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返回。
什么是易失性寄存器和非易失性寄存器的区别?
易失性寄存器在函数调用后可能会改变,而非易失性寄存器在函数返回时必须保持不变。
➡️