


return指令本质上是一个跳转指令,是用来做跳转的,而不是我们根深蒂固所理解的返回,只不过说,它最常用的场景是用于函数返回。用于做跳转 和 call 成对的出现



首先将 ax寄存器值 bx寄存器值 压入栈中,然后通过远调用指令(通过选择子+偏移地址)调用函数,调用的函数在另一个段中,因此是远调用。调用函数时,栈的变化和之前学习的一样,原理不变,就是讲当前地址压入栈中,但是细节上,当前地址变成了两个:
第一个是段地址,其实就是选择子,当前所执行的代码段的选择子是放到 cs寄存器中的,所以cs寄存器的当前值会被压入到栈中
第二个是偏移地址,即eip的值 也会被压入栈中
这两个地址压入后,调用函数时的地址 也就在栈中了(栈顶)。<

本文详细解析了return指令的本质及用途,重点介绍了其在不同段间进行远跳转的实现原理,包括寄存器和栈的操作过程。
最低0.47元/天 解锁文章
1523

被折叠的 条评论
为什么被折叠?



