我最近通过Ubuntu上的GNU汇编程序在互联网上的某个地方编写了Programming Ground UP来学习x86汇编语言。
创建函数时,总有2个部分是“必须拥有的”:
一开始,它被认为是保存旧的%ebp并设置新的帧指针
pushl%ebp
movl%esp,%ebp
最后,它用于恢复旧的%ebp并弹出返回地址
movl%ebp,%esp
popl%ebp
保留
请帮助我知道实际发生了什么以及使用了什么。
- 为什么他们必须将最底部的堆栈指针复制到%ebp以设置新的帧指针?
- 为什么必须在完成后将%ebp复制回%esp?
- 没有( )
的副本只是一个地址吗?
感谢。
答案 0 :(得分:0)
这是一个功能周围。 Frequently Given Answer giving the gen on function perilogues解释了发生了什么,堆栈帧和帧指针寄存器。