【发布时间】:2014-02-24 15:29:48
【问题描述】:
我目前正在自学 x64 汇编,但无法理解从 c++ 调用汇编过程时堆栈会发生什么。
根据我目前对MSDN 和Intel 的了解,前 4 个整数/浮点参数存储在 rcx/xmm0、rdx/xmm1、r8/xmm2 和 r9/xmm3 寄存器中,所有其他参数将是放在堆栈上。
我只是不明白为什么我必须从 rsp [rsp+28h] 访问第 5 个参数 40 个字节而不是 8 个,因为前 32 个字节是在寄存器中访问的。
谁能解释一下到底发生了什么?
谢谢。
【问题讨论】:
-
谈论“fastcall”在 64 位代码中没有意义。调用约定的一部分是“影子空间”,堆栈帧中的额外空间可以在必要时存储 RCX、RDX、R8 和 R9。
-
@HansPassant:但无论如何,微软和英特尔都在谈论它,以强调 x64 调用约定更类似于 fastcall,而不是 Windows 在 x86 上使用的任何其他调用约定。
标签: stack 64-bit parameter-passing fastcall