x64 暫存器速查表

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

本文总结了x64架构下的核心寄存器状态与ABI约定,包括通用寄存器的用途、函数调用约定及关键状态标志。介绍了System V和Microsoft x64的参数传递顺序及返回值处理,强调了易失性和非易失性寄存器的区别。

🎯

关键要点

  • x64架构下的通用寄存器分为易失性和非易失性寄存器,易失性寄存器在函数调用后可能会改变,非易失性寄存器在函数返回时必须保持不变。
  • System V AMD64 ABI的参数传递顺序为RDI、RSI、RDX、RCX、R8、R9,超过6个参数时通过栈传递,返回值通过RAX传递。
  • Microsoft x64的参数传递顺序为RCX、RDX、R8、R9,超过4个参数时通过栈传递,并且调用者需预留32字节的Shadow Space,返回值同样通过RAX传递。
  • 关键状态标志包括ZF(零标志)、SF(符号标志)、OF(溢出标志)和CF(进位标志),用于控制流指令的判断。
  • 浮点参数在System V ABI中通过XMM0到XMM7传递,浮点返回值通过XMM0返回,XMM0到XMM15通常为易失性寄存器。

延伸问答

x64架构下的寄存器分为哪两类?

x64架构下的寄存器分为易失性寄存器和非易失性寄存器。

System V AMD64 ABI的参数传递顺序是什么?

System V AMD64 ABI的参数传递顺序为RDI、RSI、RDX、RCX、R8、R9,超过6个参数时通过栈传递。

Microsoft x64的参数传递有什么特别之处?

Microsoft x64的参数传递顺序为RCX、RDX、R8、R9,超过4个参数时通过栈传递,并需预留32字节的Shadow Space。

关键状态标志ZF、SF、OF和CF分别代表什么?

ZF表示运算结果为0,SF表示结果为负,OF表示有符号运算溢出,CF表示无符号运算进位或借位。

浮点参数在System V ABI中如何传递?

浮点参数在System V ABI中通过XMM0到XMM7传递,浮点返回值通过XMM0返回。

什么是易失性寄存器和非易失性寄存器的区别?

易失性寄存器在函数调用后可能会改变,而非易失性寄存器在函数返回时必须保持不变。

➡️

继续阅读