1. 通用寄存器对照表(x86_64 ↔ x86)
64 位寄存器 | 32 位寄存器 | 16 位寄存器 | 8 位高位 | 8 位低位 | 常见作用 |
---|---|---|---|---|---|
RAX | EAX | AX | AH | AL | 累加器,常用于返回值 |
RBX | EBX | BX | BH | BL | 基址寄存器 |
RCX | ECX | CX | CH | CL | 计数寄存器(循环、rep 前缀的计数器) |
RDX | EDX | DX | DH | DL | 数据寄存器(I/O、除法余数、syscall 参数) |
RSI | ESI | SI | — | SIL | 源地址寄存器(字符串/内存操作源指针) |
RDI | EDI | DI | — | DIL | 目的地址寄存器(字符串/内存操作目标指针) |
RBP | EBP | BP | — | BPL | 基址指针(栈帧基址,调试、局部变量访问) |
RSP | ESP | SP | — | SPL | 栈指针(总是指向栈顶) |
R8 | — | R8W | — | R8B | 额外参数寄存器(x86_64 新增) |
R9 | — | R9W | — | R9B | 同上 |
R10 | — | R10W | — | R10B | 任意用途(内核调用时经常传参) |
R11 | — | R11W | — | R11B | 任意用途 |
R12 | — | R12W | — | R12B | 任意用途 |
R13 | — | R13W | — | R13B | 任意用途 |
R14 | — | R14W | — | R14B | 任意用途 |
R15 | — | R15W | — | R15B | 任意用途 |
2. 常见调用约定下的作用
System V AMD64 ABI(Linux 64 位常用)
函数参数位置 | 寄存器 |
---|---|
第 1 个参数 | RDI |
第 2 个参数 | RSI |
第 3 个参数 | RDX |
第 4 个参数 | RCX |
第 5 个参数 | R8 |
第 6 个参数 | R9 |
返回值 | RAX |
系统调用号 | RAX |
系统调用参数 | RDI, RSI, RDX, R10, R8, R9 |
cdecl(32 位 Linux 常用)
- 所有参数都从栈传递(右到左压栈)
- 返回值放在
EAX
- 调用者负责平衡栈
寄存器常用习惯总结
- RAX/EAX:结果/累加器(算数、返回值、syscall 号)
- RBX/EBX:无固定用途(某些特殊代码中当指针或索引)
- RCX/ECX:计数器(循环、
rep
前缀) - RDX/EDX:数据寄存器(乘除法、I/O、高位扩展)
- RSP/ESP:栈指针(push/pop 自动修改)
- RBP/EBP:栈基址(函数帧)
- RSI/ESI:源指针
- RDI/EDI:目的指针