💡
原文中文,约1800字,阅读约需5分钟。
📝
内容提要
本文总结了x64架构下核心寄存器的状态与ABI约定,包括通用寄存器的用途、调用约定及关键状态标志。寄存器向下兼容,低32位写入会清零高32位,调用者与被调用者需管理寄存器值。系统调用和参数传递顺序在不同平台上有所不同。
🎯
关键要点
- 本文总结了x64架构下核心寄存器的状态与ABI约定。
- x64寄存器向下兼容,低32位写入会清零高32位。
- 通用寄存器(GPRs)的用途包括返回值、基址、循环计数、I/O等。
- Caller Saved寄存器需由调用者在调用前保存,Callee Saved寄存器需由被调用者在返回时恢复。
- System V AMD64 ABI的参数传递顺序为RDI, RSI, RDX, RCX, R8, R9,超过6个参数需压入栈。
- Microsoft x64的参数传递顺序为RCX, RDX, R8, R9,超过4个参数需压入栈,并需预留32字节的Shadow Space。
- 返回值在RAX寄存器中,若结果为128位,高位在RDX。
- 关键状态标志包括ZF(零标志)、SF(符号标志)、OF(溢出标志)、CF(进位标志)。
❓
延伸问答
x64架构的通用寄存器有哪些用途?
通用寄存器的用途包括返回值、基址、循环计数和I/O等。
System V AMD64 ABI的参数传递顺序是什么?
参数传递顺序为RDI, RSI, RDX, RCX, R8, R9,超过6个参数需压入栈。
Microsoft x64的参数传递顺序与System V AMD64 ABI有何不同?
Microsoft x64的参数传递顺序为RCX, RDX, R8, R9,超过4个参数需压入栈,并需预留32字节的Shadow Space。
什么是Caller Saved和Callee Saved寄存器?
Caller Saved寄存器需由调用者在调用前保存,Callee Saved寄存器需由被调用者在返回时恢复。
x64寄存器的向下兼容性是怎样的?
x64寄存器向下兼容,低32位写入会清零高32位,但写入8/16位则保留高位数据。
x64架构中的关键状态标志有哪些?
关键状态标志包括ZF(零标志)、SF(符号标志)、OF(溢出标志)、CF(进位标志)。
➡️