gcc提供了奇怪的Intel语法

时间:2011-01-11 13:54:11

标签: gcc assembly disassembly

我一直试图通过使用编译器生成不同优化级别的各种C程序的汇编程序来更好地了解幕后发生的事情。有些事情一直困扰着我。

当我按如下方式编译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

语法发生了变化,但在寄存器符号之前仍然存在“%”(这就是为什么我首先不喜欢AT& T语法)。

有人能说清楚为什么会这样吗?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

GNU汇编程序(gas)确实有一个单独的选项来控制%前缀。文档似乎表明GCC没有这样的选项,但是我的GCC(版本Debian 4.3.2-1.1)没有产生%前缀。