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

发布于 2024-11-10 02:21:49 字数 481 浏览 2 评论 0原文

我最近一直在通过互联网上某处的《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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

节枝 2024-11-17 02:21:49

这是函数尾声。 在函数 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文