为什么将 RAX 作为第一个操作压入堆栈?
在提供的 C 代码的汇编中,RAX 被压入堆栈堆栈作为根据 64 位 ABI 保持正确堆栈对齐的第一个操作。
ABI(应用程序二进制文件)接口)指定了程序不同部分之间调用约定的一组规则。在 64 位 ABI 中,执行调用指令之前,堆栈必须在 16 字节边界对齐。
调用指令将 8 字节返回地址压入堆栈,打破了 16 字节对齐。为了纠正这个问题,编译器需要执行对齐操作。
压入无关值(例如 RAX)可以实现这种对齐,并且比从堆栈中减去 8 个字节等替代方法更有效指针。在带有堆栈引擎的 CPU 上,push rax 可以利用硬件高效处理堆栈操作的能力。
综上所述,push rax 指令用于维护 64 位 ABI 所需的堆栈对齐,确保后续函数调用在正确对齐的堆栈中正确运行。
以上是为什么在 64 位函数调用中 RAX 首先入栈?的详细内容。更多信息请关注PHP中文网其他相关文章!