GNUアセンブラ(GAS)でインテル記法を使う

GCCではインラインアセンブリでGASを使うことが出来る。
インラインアセンブラでは,Cとアセンブラ間でのスタックのやり取りをまったく気にすることなく,シームレスにコードを記述できる。
それに拡張子を.SにしておけばGCCはgasをcppで前処理してくれるので,Cのプリプロセッサが使用できる。
つまりCとGASは愛称抜群だ!

ただ一つ残念なことは,美しくないAT&T記法を採用していることなのだが,
バージョン2.10からインテル記法もサポートされたようで,もうGASを使わない理由が無い。

早速インテル記法を使ってみるよう。

gasでインテル記法を使うには.intel_syntaxディレクティブを書いてやればいい。

例えば次のコードは:

movl %eax, %ebx

こう書ける:

.intel_syntax noprefix
mov ebx, eax

うん。美しい!


参考に.intel_syntaxディレクティブとの対応を下記表に示す。

いつものgas .intel_syntax有り
movb %al, %bl mov bl, al
movw %ax, ($0x1000) mov [0x1000], ax
movl 4(%esp), %eax mov eax, [esp+4]
jmp label jmp label
ljmp 0x80, label jmp 0x80, offset label