2011-01-11 3 views
2

Я пытался лучше понять, что происходит под капотом, используя компилятор для создания программ сборки различных программ на разных уровнях оптимизации. Есть кое-что, что беспокоило меня какое-то время.gcc дает странный синтаксис Intel

Когда я компилирую 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 

Существует изменения в синтаксисе, но есть еще «%» s до обозначений регистров (вот почему я не предпочитаю AT & T синтаксис в первую очередь).

Может кто-то пролить свет на то, почему это происходит? Как решить эту проблему?

ответ

2

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

Смежные вопросы