最近アセンブラを勉強しているため、そのメモ用です。
基本的に64bit環境でOSはLinuxを前提としており、アセンブラの文法はAT&Tです。
関数の引数に利用されるレジスタ
引数の型により使用されるレジスタが異なる。
整数型 / ポインタ型
rdi
第1引数を保持するレジスタ
rsi
第2引数を保持するレジスタ
rdx
第3引数を保持するレジスタ
rcx
第4引数を保持するレジスタ
r8
第5引数を保持するレジスタ
r9
第6引数を保持するレジスタ
上記は整数型、ポインタ型の引数に利用され、最大6個の汎用レジスタを利用することができる。
ただし、引数の型に応じてレジスタのプレフィックスは変化する。
int32型なら、r → e になる。
浮動小数点型
xmm[0-7]
最大8個のxmmレジスタを利用することができる。
レジスタが足りないときはスタックを利用する。
SIMDデータ型
xmm[0-7]
SIMDデータ型が64 or 128bit
ymm[0-7]
SIMDデータ型が256bit
zmm[0-7]
SIMDデータ型が512bit
関数の戻り値に利用されるレジスタ
%eax、%rax、%rdx、%xmm0、%ymm0、%zmm0
上記以外にも使われるレジスタがあるみたいだが、基本的に上記だと思えば良さそう。
自由に使用可能(Callee Saveでない)なレジスタ
rax、rcx、rsi、rdi、r[8-11]、xmm[0-15]、ymm[0-15]
Callee Saveなレジスタ
rbx, rbp, r[12-15]
まだまだ勉強中なので、適宜更新する予定です。
参考