x86汇编指令集为什么设计一个ret
命令,为什么不用pop eip
代替?
其实是语义含义的问题:ret表示返回进入函数之前的指令,那么这个语义屏蔽了硬件实现的细节。尽管硬件在实现上是pop %eip
,但是并没有规定eip一定使用栈在保存。
当然,完整的返回函数还包含leave指令:
leave
ret
这两条指令相当于
movl %ebp, %esp
popl %ebp
popl %eip
1 回答3.3k 阅读
2 回答3.3k 阅读
1.1k 阅读
9 阅读
ret
含有平栈的操作。pop eip
只是恢复了调用时的下一条指令的地址。没处理 栈指针。文字格式太难编辑了,还是贴图吧~