2

我想知道 g++ 使用哪种 ASM 风格(AT&T 或英特尔)。我正在处理一项要求我为各种 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++ 以 GNU 汇编器为目标gas,它使用 AT&T 语法 ( op src dest ),除非您使用该.intel_syntax指令

于 2011-04-11T05:24:51.590 回答
2

它肯定会产生 AT&T 语法,并且您所看到的是正确的。请注意,在基指针本身保存在堆栈上之后,堆栈指针被移动到基指针中。这是 gcc 在 x86 上发出的标准堆栈框架样板。

另请注意,在您之前ret,堆栈帧是通过恢复的leave,相当于

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