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好まない理由です)残っています。
なぜこのようなことが起きているのか、この問題をどうやって解決するのですか?