堆栈中的保留字节:x86 汇编(64 位)

pad*_*apa 5 assembly x86-64 cpu-registers

pushq   %rbp
movq    %rsp, %rbp
subq    $32, %rsp
Run Code Online (Sandbox Code Playgroud)

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

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

我只是想学习一些有关装配的小知识。

谢谢。

Fif*_*nik 2

“$32”是否表示 32 个字节?($number 表示常量?)如果是,那么我们如何在 64 位寄存器上分配 32 个字节?

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