2011-01-11 8 views
2

コンパイラを使って様々な最適化レベルでさまざまなCプログラムのアセンブリプログラムを生成することで、何が起こっているのかをよりよく理解しようとしています。しばらく私を悩ませているものがあります。gccが奇妙なインテルの構文を与える

次のように私はt.cをコンパイルし、次のように

gcc -S t.c 

私はAT & T構文でアセンブリを取得します。

function: 
    pushl %ebp 
    movl %esp, %ebp 
    movl 12(%ebp), %eax 
    addl 8(%ebp), %eax 
    popl %ebp 
    ret 
    .size function, .-function 

私は次のようにMASM引数を使用してコンパイル: -

gcc -S t.c -masm=intel 

私は次の出力を取得します。

function: 
    push %ebp 
    mov %ebp, %esp 
    mov %eax, DWORD PTR [%ebp+12] 
    add %eax, DWORD PTR [%ebp+8] 
    pop %ebp 
    ret 
    .size function, .-function 

構文の変化がありますが、レジスタの表記の前に「%」sが(私が最初の場所で& T構文AT好まない理由です)残っています。

なぜこのようなことが起きているのか、この問題をどうやって解決するのですか?

答えて

2

GNUアセンブラ(ガス)には、%接頭辞を制御するための別のオプションがあります。 GCCにはこのようなオプションはありませんが、私のGCC(バージョンDebian 4.3.2-1.1)は%プレフィックスを生成しません。