我对函数声明中的GNU Assembler开始和结束部分感到困惑

时间:2011-05-25 12:31:14

标签: x86 gnu assembly

我最近通过Ubuntu上的GNU汇编程序在互联网上的某个地方编写了Programming Ground UP来学习x86汇编语言。

创建函数时,总有2个部分是“必须拥有的”:

一开始,它被认为是保存旧的%ebp并设置新的帧指针

  

pushl%ebp

     

movl%esp,%ebp

最后,它用于恢复旧的%ebp并弹出返回地址

  

movl%ebp,%esp

     

popl%ebp

     

保留

请帮助我知道实际发生了什么以及使用了什么。 - 为什么他们必须将最底部的堆栈指针复制到%ebp以设置新的帧指针? - 为什么必须在完成后将%ebp复制回%esp? - 没有( )的副本只是一个地址吗?

感谢。

1 个答案:

答案 0 :(得分:0)

这是一个功能周围。 Frequently Given Answer giving the gen on function perilogues解释了发生了什么,堆栈帧和帧指针寄存器。