我对函数声明中的 GNU 汇编器开始和结束部分感到困惑
我最近一直在通过互联网上某处的《Programming Ground UP》一书在 Ubuntu 上通过 GNU Assembler 学习 x86 汇编语言。
创建函数时,总有两个部分是“必须具备”的:
一开始,考虑保存旧的 %ebp 并设置新的帧指针
推%ebp
movl %esp,%ebp
最后用于恢复旧的%ebp并弹出返回地址
movl %ebp, %esp
popl%ebp
返回
请帮助我了解到底发生了什么以及它的用途。 - 为什么他们必须将最底部的堆栈指针复制到 %ebp 以设置新的帧指针? - 为什么完成后必须将 %ebp 复制回 %esp ? - 当不带 ( )
进行复制时,这只是一个地址吗?
谢谢。
I have been recently learning x86 assembly language via GNU Assembler on Ubuntu by the book Programming Ground UP at somewhere on the internet.
There are always 2 sections that's a "Must-Have" when creating a function:
At the beginning, it's considered to save old %ebp and set new frame pointer
pushl %ebp
movl %esp,%ebp
At the end, it's used to restore old %ebp and pop out return address
movl %ebp, %esp
popl %ebp
ret
please help me know what's really happen and what's that used for.
- Why they must copy the bottom-most stack pointer to %ebp to set a new frame pointer?
- And why the must copy back the %ebp to %esp when done ?
- When copy without ( )
is that just an address ?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是函数尾声。 在函数 perilogues 上给出 gen 的常见答案 解释发生了什么、堆栈帧和帧指针寄存器。
This is a function perilogue. The Frequently Given Answer giving the gen on function perilogues explains what's happening, stack frames, and the frame pointer register.