Названия команд, не принимающих операндов, совпадают с названиями, принятыми в синтаксисе Intel:
nop
К названиям команд, имеющих операнды, добавляются суффиксы, отражающие размер операндов:
b — байт;
w — слово;
l — двойное слово;
q — учетверенное слово;
s — 32-битное число с плавающей запятой;
l — 64-битное число с плавающей запятой;
t — 80-битное число с плавающей запятой.
// mov byte ptr variable,0 movb $0,variable // fild qword ptr variable fildq variable
Команды, принимающие операнды разных размеров, требуют указания двух суффиксов, сначала суффикса источника, а затем приемника:
// movsx edx,al movsbl %al,%edx
Команды преобразования типов имеют в AT&T названия из четырех букв — С, размер источника, Т и размер приемника:
// cbw cbtw // cwde cwtl // cwd cwtl // cdq cltd
Но многие ассемблеры понимают и принятые в Intel формы для этих четырех команд.
Дальние команды передачи управления (jmp, call, ret) отличаются от ближних префиксом l:
// call far 0007:00000000 lcall $7,$0 // retf 10 lret $10
Если команда имеет несколько операндов, операнд-источник всегда записывается первым, а приемник — последним, то есть в точности наоборот по сравнению с Intel-синтаксисом:
// mov ax,bx movw %bx,%ax // imul eax.ecx,16 imull $16,%ecx,%eax
Все префиксы имеют имена, которыми они задаются как обычные команды, — перед командой, для которой данный префикс предназначен. Имена префиксов замены сегмента — segcs, segds, segss, segfs, seggs, имена префиксов изменения разрядности адреса и операнда- addr16 и data 16:
segfs movl variable,%eax rep stosd
Кроме того, префикс замены сегмента будет включен автоматически, если используется оператор «:» в контексте операнда:
movl %fs:variable, %eax