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