汇编中的call和ret指令

          call和ret指令都是转移指令,它们都修改偏移地址或同时修改段地址和偏移地址。ret指令用栈中的数据,修改偏移地址,从而实现近转移。call可以通过位移和目的地址进行转移。下面来通过汇编代码学习一下call和ret指令的配合使用。

          

         下面来看一下程序刚加载时栈的情况,对应16个00

         

         程序对应的机器指令

         

         下面来debug一下。

         

          刚开始IP指向栈顶,SP=0010。执行了CALL 0013之后,SP=000E,这就是执行了压栈操作,此时栈中的数据为0E 00。压栈时候的IP=000B,压栈的时候压的是当前指令的下一个指令,所以是0E 00。

        

       上面是ret指令结束后,SP=0010,IP=000E表明进行pop操作,修改了IP。指令又转到了call 指令的下一个指令。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盼盼编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值