GNU アセンブラ(GAS) Edit

目次 Edit

コメントの種類 Edit

GASは、3種類のコメントをサポートしている。
CやC++でおなじみのコメントと、アセンブリ言語で一般的に使用するコメントが使える。
たまに、//が使えないこともある。

  • /* ~ */
  • //
  • #

構文 Edit

基本構文 Edit

GASは、NASMなどのIntel構文と違い、AT&T構文なので、オペランドのソースとディスティネーションが逆。

NASM Edit
	movd	Dest,	Src
GAS Edit
	movl	Src,	Dest

レジスタ Edit

GASはレジスタを記述するときに%記号をつける。

NASM Edit
	movd	eax,	ebx
GAS Edit
	movl	%ebx,	%eax

即値 Edit

GASは即値(定数数値)を記述するときに$記号をつける。

NASM Edit
	movd	eax,	0x20
GAS Edit
	movl	$0x20,	%eax

メモリ参照 Edit

メモリ参照の基本構文は以下の通り。

displacement(base, index, scale)

この基本構文から一部省略して記述可能。

指定種別説明省略時
displacement即値静的なアドレスオフセット0
base32bitレジスタ配列のベースアドレス0
index32bitレジスタ(esp除く)配列のインデックス0
scale即値(1,2,4,8)配列の1要素の大きさ1

なお、計算式は以下の通り。

displacement + base + index * scale

※セグメントレジスタを以下のように指定することも可能。

segment:displacement(base, index, scale)

セグメントレジスタ省略時は、baseの種類により異なる。

  • baseがesp, ebpの場合:ss
  • 上記以外の場合:ds

以下、書き方一覧

displacement
(base)
displacement(base)
displacement(index, scale)
displacement(base, index)
displacement(base, index, scale)

displacement Edit

最も単純な構文。

例:

	movw	$0x1234,	label

	label:	.word		0x0000

ラベル(アドレス)を$記号なしで指定するだけ。

(base) Edit

レジスタを使用する場合の構文。

例:

	movw	$0x1234,	(%eax)

displacement(base) Edit

C言語において、関数の引数やローカル変数を参照する場合に有効な構文。

例:

	movw	$0x1234,	-4(%ebp)		< ローカル変数を参照

displacement(index, scale) Edit

1次元配列を参照する場合に有効な構文。

例:

	movw	$0x1234,	0x1000(%esi, 4)

1次元配列で有効に参照する場合のイメージ

	displacement[index]		< 1要素のサイズ:scale

displacement(base, index) Edit

2次元配列、構造体配列を参照する場合に有効な構文

例:

	movw	$0x1234,	+4(%ebx, %edx)

構造体配列で有効に参照する場合のイメージ

	base[index].displacement
	index += sizeof base[0]
	base[index].displacement

displacement(base, index, scale) Edit

2次元配列を参照する場合に有効な構文。

例:

	movw	$0x1234,	0x1000(%ebx, %esi, 4)

2次元配列で有効に参照する場合のイメージ

	displacement[base][index]		< 1要素のサイズ:scale

ディレクティブ Edit

GASでディレクティブを記述するときは、"."を用いる。
この"."は特別な意味がある。

ディレクティブの種類 Edit

ディレクティブ意味
.byte1バイトのデータを配置する
.word2バイトのデータを配置する
.short
.long4バイトのデータを配置する
.int
.asciiアスキーコードの文字列を配置する

参考・関連 Edit


Since 2008 July. OS Project Wiki
リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS