堆栈中的保留字节:x86 程序集(64 位)

Reserve bytes in stack: x86 Assembly (64 bit)

pushq   %rbp
movq    %rsp, %rbp
subq    , %rsp

我对第三条指令中“$32”的解释有很大疑问。来自搜索和博客的信息指出,在上面的第三条指令中,我们为堆栈保留了 space 中的某些 "bytes"。从文档中,%rsp 是 64 位寄存器,%esp 是 32 位寄存器。

“$32”是否表示 32 个字节?($number 表示常量?)如果是,那么我们如何在 64 位寄存器上分配 32 个字节?以上指令是从 "otool" 生成的。我用的是 macbook pro.

我只是想学习一些关于汇编的小知识。

谢谢。

Is "" means 32 bytes ?($number means constant ?) If yes then how are we allocating 32 bytes on 64 bit register?

这 32 个字节未分配 在 64 位寄存器上。它们分配在堆栈上。通过降低堆栈指针(位于 %rsp 中),从 %rsp 到 %rsp+31 的地址范围可供我们存储数据使用。

在 64 位代码中,已经为您保留了 128 个字节,因此您不必在叶函数中弄乱堆栈指针,这意味着您可能不必 push/pop %rbp。只需将 %rsp-128 到 %rsp-1 用于您的数据。

这个保留区叫做:

http://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64/