[汇编]汇编学习笔记(2):EBP寻址

        刚看到ESP寻址和EBP寻址,个人理解其实2个寻址都是差不多的,都是利用偏移量来获取参数,一个搞懂另一个也明白了。只要记住ESP寻址有缺陷就OK了,缺陷就是在函数中使用push后会导致ESP一直在变,不好计算传入参数的地址而已。多写写就能记住。
        练习:写个3数相加的函数。在敲代码之前,先画张图,理清下思路:


        1.第一张图完成了计算,并将结果存入EAX寄存器中。说明下,图中的X地址只是用于做标示的,管它是多少来着。图上最后一张框里的汇编代码写错了,把ECX写成EBX了,害得后面写代码也写错了╮(﹀_﹀)╭,仔细调试才发现写错,截图截了好几次,好累。


        2.第二张图完成了恢复工作,恢复堆栈平衡,ECX,EDX,EBP3个寄存器恢复之前缓存的值。

        开始敲代码,代码就按照上面2张图写,ECX寄存器所存储的值为了方便观察改成了12345678:

        第一张图只是记录初始值。

        第2张图,执行完call指令,观察堆栈里的值和ESP寄存器

        第3张图执行完函数中的push指令,缓存了3个寄存器的值,并将ESP寄存器的值赋给EBP寄存器

        第4张图,执行完了加法,并得到结果6,函数主要的功能完成,

        最后一张图,几个pop指令加上retn指令恢复了堆栈平衡,和寄存器之前存储的值。变化就是栈顶上面有使用过的地址,提醒自己局部变量需要初始化。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值