レジスタの使用
x64 アーキテクチャには、16 個の汎用レジスタと 16 個の浮動小数点用の XMM レジスタが用意されています。 揮発性レジスタは、呼び出しで使用された後に内容が破棄されることが、呼び出し元によって想定されているスクラッチ レジスタです。 関数呼び出しで使用された後もレジスタの値を保持するには不揮発性レジスタが必要です。使用された不揮発性レジスタの保存は、呼び出された関数が行う必要があります。
関数呼び出しで各レジスタがどのように使用されるかを次の表に示します。
登録 |
状態 |
使用方法 |
RAX |
揮発性 |
戻り値レジスタ |
RCX |
揮発性 |
1 番目の整数引数 |
RDX |
揮発性 |
2 番目の整数引数 |
R8 |
揮発性 |
3 番目の整数引数 |
R9 |
揮発性 |
4 番目の整数引数 |
R10:R11 |
揮発性 |
必要に応じて、呼び出された関数が保存する必要があります。syscall/sysret 命令で使用されます。 |
R12:R15 |
不揮発性 |
呼び出された関数が保存する必要があります。 |
RDI |
不揮発性 |
呼び出された関数が保存する必要があります。 |
RSI |
不揮発性 |
呼び出された関数が保存する必要があります。 |
RBX |
不揮発性 |
呼び出された関数が保存する必要があります。 |
RBP |
不揮発性 |
フレーム ポインターとして使用できます。呼び出された関数が保存する必要があります。 |
RSP |
不揮発性 |
スタック ポインター |
XMM0 |
揮発性 |
1 番目の FP 引数 |
XMM1 |
揮発性 |
2 番目の FP 引数 |
XMM2 |
揮発性 |
3 番目の FP 引数 |
XMM3 |
揮発性 |
4 番目の FP 引数 |
XMM4:XMM5 |
揮発性 |
必要に応じて、呼び出された関数が保存する必要があります。 |
XMM6:XMM15 |
不揮発性 |
必要に応じて、呼び出された関数が保存する必要があります。 |