Синтаксис ассемблера GAS отличается от синтаксиса других ассемблеров, например NASM, тем, что в GAS используется синтаксис AT&T, а в NASM — синтаксис Intel. asm.shadrinsk.net stackoverflow.com
Некоторые отличия синтаксиса AT&T и Intel:
- Порядок операндов. www.opennet.me asm.shadrinsk.net В синтаксисе AT&T вначале указывается источник, затем приёмник, а не наоборот, как в синтаксисе Intel. www.opennet.me Например, команда в синтаксисе Intel mov eax, edx (передать содержимое регистра edx в регистр eax) в GAS будет выглядеть как mov %edx,%eax. www.opennet.me
- Обозначения регистров. www.opennet.me В GAS имена регистров начинаются с символа %, например %eax, %dl, вместо eax, dl и т. д.. www.opennet.me Это позволяет включать в код внешние переменные C, не опасаясь ошибок и не используя префиксы с подчёркиванием. www.opennet.me
- Размер операнда. www.opennet.me В GAS размер операнда определяется как суффикс имени инструкции. www.opennet.me Суффикс b используется для (8-bit) байта, w для (16-bit) слова, и l для (32-bit) двойного слова. www.opennet.me
- Константы. www.opennet.me В синтаксисе AT&T перед непосредственными операндами указывается |$, в синтаксисе Intel такого обозначения нет. asm.shadrinsk.net
Современные версии GAS поддерживают директиву .intel_syntax, которая позволяет использовать синтаксис Intel в GAS. asm.shadrinsk.net asmcourse.cs.msu.ru