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 |