GCC дает странный синтаксис Intel - PullRequest
2 голосов
/ 11 января 2011

Я пытался получить лучшее представление о том, что происходит под капотом, используя компилятор для генерации программ сборки различных программ на 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 Ответ

2 голосов
/ 11 января 2011

У ассемблера GNU (газ) есть отдельная опция для управления префиксом%.Документация предполагает, что GCC не имеет такой опции, но мой GCC (версия Debian 4.3.2-1.1) не производит префикс%.

...