是否指定在x64上推送堆栈指针时会发生什么?
我在 x64 上用汇编编程,我打算在堆栈中推送一个地址。我打算编写push %rsp
,但是,由于此指令更改了 的值%rsp
,我不确定将推送什么值。
具体来说,如果我运行以下命令:
movq $0x10, %rsp
pushq %rsp
内存地址是否0x8
包含0x10
或0x8
?这个处理器是依赖的还是所有 x64 处理器的标准?
回答
正如@Raymond Chen 在评论中提到的,它在英特尔的手册中指定,HTML 摘录在这里:https ://www.felixcloutier.com/x86/push 。
推送的值是指令%rsp
之前的值push
。
与push mem
涉及 RSP 的寻址模式相同,例如push 16(%rsp)
复制堆栈中已有的内容。