Описание тега intel-syntax

Синтаксис Intel (в отличие от синтаксиса AT&T) представляет собой синтаксис сборки x86 с использованием "opcode dst, src", квадратных скобок для операндов памяти и ключевых слов для установки размера операнда: например, add dword [eax], 123. Есть два основные разновидности синтаксиса Intel: стиль NASM и стиль MASM/TASM.

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.