2

g++ が使用する ASM スタイル (AT&T または Intel) を知りたいと思っていました。さまざまな ASM 命令の定義を提供する必要がある課題に取り組んでいます。私は以下を見ました:

movl    %esp, %ebp
where %esp = stack pointer and %ebp = base pointer

インテルのスタイルでは、上記は次のようになります。

movl    destination, source

しかし、ベース ポインターをスタック ポインターに移動するのは意味がなく、g++ が AT&T ASM スタイルを使用するかどうか疑問に思います。

ASM (およびプラットフォーム情報) を生成するために使用したコマンドは次のとおりです。

g++ -S src -o out.bin
OS: Fedora Linux 14, 2.6.35.10-74.fc14.i686
Compiler: gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) 

私の質問: g++ が生成しているスタイルを明確に伝える方法はありますか? なんらかのスイッチはありますか。

私が間違っているところを修正してください。前もって感謝します!

4

2 に答える 2

3

G++ は、ディレクティブを使用しない限り、gasAT&T 構文 ( op src dest ) を使用する GNU アセンブラーをターゲットにします。.intel_syntax

于 2011-04-11T05:24:51.590 に答える
2

それは間違いなく AT&T 構文を生成し、あなたが見ているものは正しいです。ベース ポインター自体がスタックに保持された後、スタック ポインターがベース ポインターに移動されることに注意してください。これは、x86 で gcc によって出力される標準のスタック フレーム ボイラープレートです。

retまた、 の前に、スタック フレームが を介して復元されるleaveことにも注意してください。

movl %ebp,%esp
popl %ebp
于 2011-04-11T05:26:49.130 に答える