Описание тега intel-syntax
Intel Syntax используется в руководствах Intel (и AMD) и многими ассемблерами. См. Вики по тегам x86, где есть ссылки на них и на руководства по ассемблеру.
Другой важный синтаксис для сборки x86 - AT&T ( att). Другие синтаксисы включают HLA и синтаксис x86 ассемблера Go (который выглядит как 16-битный, где AX фактически означает AL/AX/EAX/RAX в зависимости от размера операнда).
Все разновидности Intel Syntax имеют следующие характеристики:
- Порядок параметров: назначение <- источник.
pinsrd xmm0, eax, 2
- Квадратные скобки обозначают операнд памяти:
add eax, [esi]
(но помните о различиях между NASM и MASM для символов,offset
вместо того, чтобы просто опустить[]
). - Размер операнда: подразумевается именем регистра или явно указывается с помощью
dword
(NASM) илиdword ptr
(MASM) в инструкциях без регистрового операнда.add qword [fs:rdi + r10], 123
. (Поместите оператор размера в операнд памяти.) - Непосредственные значения и другие числовые константы: Нет
$
префикс. Для шестнадцатеричного используйте завершающийh
, и убедитесь, что номер начинается с0
. например0deadbeefH
. Некоторые ассемблеры синтаксиса Intel (например, NASM) также поддерживают стиль C.0xdeadbeef
константы, но все они поддерживают завершающий h. Бинарные константы могут использоватьb
суффикс.
Двумя основными разновидностями синтаксиса Intel являются стиль NASM и стиль MASM/TASM.
Как узнать, имеет ли код сборки определенный синтаксис (emu8086, NASM, TASM, ...)?
и x86, разница между BYTE и BYTE PTR
Ассемблер GNU, as
/gas (и совместимые с ним, например встроенный ассемблер clang) поддерживает .intel_syntax noprefix
директива для переключения в режим с синтаксисом, подобным MASM. Официальной документации для Intel-синтаксиса GAS нет. См. Также разделение памяти и константы в GNU как.intel_syntax. Если вы не уверены, закодируйте нужный машинный код (например, используя другой ассемблер) и выполните дизассемблирование в синтаксисе Intel с помощьюobjdump -drwC -Mintel
.
- MASM: когда
[]
игнорируется, и как получить адреса как непосредственные константы. Запутанные скобки в MASM32 - Разница в сборке между [var] и var для NASM и MASM.