Какой стиль ASM использует g++

Мне было интересно, какой стиль ASM использует g ++ (AT&T или Intel). Я работаю над заданием, которое требует от меня определения различных инструкций ASM. Я видел ниже:

movl    %esp, %ebp
where %esp = stack pointer and %ebp = base pointer

Стиль Intel гласит, что вышесказанное соответствует:

movl    destination, source

Но не имеет смысла перемещать базовый указатель в указатель стека, поэтому мне интересно, использует ли g ++ стиль AT&T ASM.

Вот команда, которую я использовал для создания ASM (и информации о платформе):

g++ -S src -o out.bin
OS: Fedora Linux 14, 2.6.35.10-74.fc14.i686
Compiler: gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) 

Мой вопрос: есть ли какой-либо способ точно сказать, какой стиль создает g ++? Есть какой-то переключатель.

Пожалуйста, поправьте меня, где я не прав. Заранее спасибо!

2 ответа

Решение

G++ предназначается для ассемблера GNU gas, который использует синтаксис AT&T (op src dest), если вы не используете .intel_syntax директива

Скорее всего, он создает синтаксис AT&T, и то, что вы видите, является правильным. Обратите внимание, что указатель стека перемещается в базовый указатель после того, как базовый указатель сам сохраняется в стеке. Это стандартный шаблон стека кадров, испускаемый gcc на x86.

Также обратите внимание, что перед вашим retкадр стека восстанавливается через leave, что эквивалентно

movl %ebp,%esp
popl %ebp
Другие вопросы по тегам