1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Function Calling Convention (x86-64)

Last updated at Posted at 2016-12-14

最近アセンブラを勉強しているため、そのメモ用です。
基本的に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]


まだまだ勉強中なので、適宜更新する予定です。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?