AT&T синтаксис
Материал из Википедии — свободной энциклопедии
AT&T-синтаксис — один из форматов записи мнемоники инструкций процессора.
[править] Особенности
Отличия AT&T-ассемблера(as) от Intel-ассемблера (MASM, TASM, FASM, NASM):
- Отсутствие префикса операнда указывает на адрес в памяти; поэтому movl $foo,%eax помещает адрес переменной foo в регистр %eax, а movl foo,%eax помещает в %eax содержимое переменной foo.
- Имена регистров начинаются с символа %, то есть %eax, %dl, вместо eax, dl, и т. д. Это позволяет включать в код внешние переменные C, не опасаясь ошибок и не используя префиксов с подчёркиванием (_). Например:
%eax, %ebx, %ecx, %edx
- Размер операнда определяется как суффикс имени инструкции. Суффикс b используется для (8-bit) байта, w для (16-bit) слова, и l для (32-bit) двойного слова, почти у каждой команды особое окончание
- b — операнды размером в 1 байт
- w — операнды размером в 1 слово (2 байта)
- l — операнды размером в 4 байта
movb %al,%ah movw %ax,%bx movl %ebx,%eax
- Порядок операндов — вначале источник, затем приёмник, а не наоборот, как в синтаксисе Intel. Например:
mov eax,ebx (Intel) movl %ebx,%eax (AT&T)
- числовые константы имеют следующую форму записи
20h (Intel) $0x20 (AT&T, знак доллар в начале)
movl $0x10,%ebx (AT&T)
- для записи/считывания значения из определённого адреса в регистр знак доллара отсутствует
movl 0xffff,%eax
- сегмент.смещение
00:0FFh (Intel) 00.$0xFF (AT&T)