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

问题描述

|| 我最近在Internet上的《 Programming Ground UP》一书中通过Ubuntu上的GNU Assembler学习了x86汇编语言。 创建函数时,总是有两个部分是“必须具备的”: 开始时,考虑保存旧的%ebp并设置新的帧指针   Pushl%ebp      movl%esp,%ebp 最后,它用于还原旧的%ebp并弹出返回地址   move%ebp,%esp      popl%ebp      退回 请帮助我了解实际发生的情况以及所发生的用途。 -为什么他们必须将最底部的堆栈指针复制到%ebp才能设置新的帧指针? -为什么完成后必须将%ebp复制回%esp? -如果复制时不带“ 0”,那只是一个地址吗? 谢谢。     

解决方法

这是一个功能问题。 “频率给定答案”给出了函数伪函数的生成,解释了正在发生的事情,堆栈帧以及帧指针寄存器。