堆栈中的reserve字节:x86组件(64位)

问题描述 投票:0回答:2
pushq   %rbp
movq    %rsp, %rbp
subq    $32, %rsp
我有一个关于第三条指令中“ $ 32”的解释的问题。来自搜索和博客的信息指出,在上述第三个指令中,我们将保留某些堆栈空间的“字节”。从文档中,%RSP为64位寄存器,%ESP为32位。

是“ $ 32”表示32个字节?($ number表示常数?)如果是,那么我们如何在64位寄存器上分配32个字节?上述指令是从“ Otool”产生的。我正在使用MacBookPro.

我只是想学习有关集会的小东西。

是“ $ 32”表示32个字节?($ number表示常数?)如果是,那么我们如何在64位寄存器上分配32个字节?
assembly x86-64 cpu-registers
2个回答
2
投票
这些32个字节不是分配的64位寄存器。它们分配在堆栈上。通过降低stackPointer(以%RSP为中),地址从%rsp到%rsp+31范围可用于存储数据。

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

这个保留的区域称为区域:


2
投票
Http://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-on-x86-64/

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.