【问题标题】:gcc gives weird Intel syntaxgcc 给出了奇怪的 Intel 语法
【发布时间】:2011-01-11 13:54:11
【问题描述】:

我一直试图通过使用编译器生成不同优化级别的各种 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 语法的原因)。

有人能解释一下为什么会这样吗?我该如何解决这个问题?

【问题讨论】:

    标签: gcc assembly disassembly


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多