问题描述
我正在 x64 上进行汇编编程,我打算在堆栈中推送一个地址。我打算写 push %rsp
,但是,由于此指令更改了 %rsp
的值,我不确定会推送什么值。
特别是如果我运行以下:
movq $0x10,%rsp
pushq %rsp
内存地址 0x8
是否包含 0x10
或 0x8
?这个处理器是依赖的还是所有 x64 处理器的标准?
解决方法
正如@Raymond Chen 在评论中提到的,它在 Intel 的手册中指定,HTML 摘录在这里:https://www.felixcloutier.com/x86/push。
推送的值是%rsp
之前 push
指令的值。
对于涉及 RSP 的寻址模式的 push mem
也是如此,例如 push 16(%rsp)
复制堆栈中已有的内容。