























本文匯總 x64 架構下最核心的暫存器狀態與 ABI 約定。
x64 暫存器完美向下相容。寫入低 32 位 (如 MOV EAX, 1) 會自動清零高 32 位;但寫入 8/16 位則保留高位數據。
| 64-bit | 32-bit | 16-bit | 8-bit | 用途 (System V / 通用) | 易失性 |
|---|---|---|---|---|---|
| RAX | EAX | AX | AL | 返回值 / 累加器 | Caller Saved |
| RBX | EBX | BX | BL | 基址 / 通用數據 | Callee Saved |
| RCX | ECX | CX | CL | 循環計數 / 第4參數 | Caller Saved |
| RDX | EDX | DX | DL | I/O / 乘除法 / 第3參數 | Caller Saved |
| RSI | ESI | SI | SIL | 源地址 / 第2參數 | Caller Saved |
| RDI | EDI | DI | DIL | 目的地址 / 第1參數 | Caller Saved |
| RBP | EBP | BP | BPL | 棧底指針 (Base Ptr) | Callee Saved |
| RSP | ESP | SP | SPL | 棧頂指針 (Stack Ptr) | Callee Saved |
| R8 | R8D | R8W | R8B | 第5參數 | Caller Saved |
| R9 | R9D | R9W | R9B | 第6參數 | Caller Saved |
| R10 | R10D | R10W | R10B | 臨時暫存器 (Static Chain) | Caller Saved |
| R11 | R11D | R11W | R11B | 臨時 / 連結暫存器 | Caller Saved |
| R12-R15 | RxxD | RxxW | RxxB | 通用數據儲存 | Callee Saved |
關鍵術語:
- Caller Saved: 調用函數前,如果還需要這些值,調用者必須自己壓棧保存。函數返回後值可能變了。
- Callee Saved: 被調用的函數必須保證在返回時,這些暫存器的值和調用前一樣(通常通過
push/pop維護)。
RDI →\rightarrow RSI →\rightarrow RDX →\rightarrow RCX →\rightarrow R8 →\rightarrow R9RAX (若結果為 128 位,高位在 RDX)。syscall 指令,參數傳給 RAX (系統調用號), RDI, RSI, RDX, R10, R8, R9。RCX →\rightarrow RDX →\rightarrow R8 →\rightarrow R9RAX。控制流指令 (JMP, Jcc) 的依據。
XMM0 到 XMM7 傳遞。XMM0 返回。XMM0 - XMM15 通常都是 Caller-saved (易失的)。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。