共用方式為


暫存器使用方式

x64 架構提供 16 個一般目的的暫存器 (以下稱為整數暫存器),以及 16 個可供浮點數使用的 XMM/YMM 暫存器。動態暫存器是臨時暫存器,由呼叫者假設為跨呼叫終結。需要靜態暫存器才能跨函式呼叫保留其值,且靜態暫存器必須由被呼叫者 (如果使用的話) 儲存。

下表描述如何跨函式呼叫使用每一個暫存器:

登錄

狀態

用法

RAX

動態

傳回值暫存器

RCX

動態

第一個整數引數

RDX

動態

第二個整數引數

R8

動態

第三個整數引數

R9

動態

第四個整數引數

R10:R11

動態

必須由呼叫者視需要保留;在 syscall/sysret 指令中使用

R12:R15

靜態

必須由被呼叫者保留

RDI

靜態

必須由被呼叫者保留

RSI

靜態

必須由被呼叫者保留

RBX

靜態

必須由被呼叫者保留

RBP

靜態

必須用作框架指標;必須由被呼叫者保留

RSP

靜態

堆疊指標

XMM0, YMM0

動態

第一個 FP 引數;使用 __vectorcall 時的第一個向量類型引數

XMM1, YMM1

動態

第二個 FP 引數;使用 __vectorcall 時的第二個向量類型引數

XMM2, YMM2

動態

第三個 FP 引數;使用 __vectorcall 時的第三個向量類型引數

XMM3, YMM3

動態

第四個 FP 引數;使用 __vectorcall 時的第四個向量類型引數

XMM4, YMM4

動態

必須由呼叫者視需要保留;使用 __vectorcall 時的第五個向量類型引數

XMM5, YMM5

動態

必須由呼叫者視需要保留;使用 __vectorcall 時的第六個向量類型引數

XMM6:XMM15, YMM6:YMM15

靜態 (XMM)、動態 (YMM 的上半部分)

必須由被呼叫者視需要保留。YMM 暫存器必須由被呼叫者視需要保留。

請參閱

參考

x64 軟體慣例

__vectorcall