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