Итак, в ассемблере AT&T в качестве допустимых символов в тексте программы рассматриваются только латинские буквы, цифры и символы «%» (процент) «$» (доллар), «*» (звездочка) , «.» (точка), «,» (запятая) и «_» (подчеркивание). Помимо них существуют символы начала комментария, различные для разных ассемблеров и различные для комментария размером в целую строку или правую часть строки. Любые другие символы, кроме кавычек, двоеточия, пробела и табуляции, если они не часть комментария или не заключены в кавычки, считаются ошибочными.
Если последовательность допустимых символов, с которой начинается строка, не начинается со специального символа или цифры и не заканчивается двоеточием — это команда процессора:
// остановить процессор hlt
Если последовательность допустимых символов начинается с символа «%» — это название регистра процессора:
// поместить в стек содержимое регистра ЕАХ pushl %eax
Если последовательность начинается с символа «$» — это непосредственный операнд:
// поместить в стек 0, число 10h и адрес переменной variable pushl $0 pushl $0x10 pushl $variable
Если последовательность символов начинается с точки — это директива ассемблера:
.align 2
Если последовательность символов, с которой начинается строка, заканчивается двоеточием — это метка (внутренняя переменная ассемблера, значение которой соответствует адресу в указанной точке):
eternal_loop: jmp eternal_loop variable: .byte 7
Метки, состоящие из одной цифры от 0: до 9:, используются как локальные — обращение к метке 1f соответствует обращению к ближайшей из меток 1: вперед по тексту программы, обращение к метке 4b соответствует обращению к ближайшей из меток 4: назад по тексту программы.
Одни и те же метки могут использоваться без ограничений и как цель для команды перехода, и как переменные.
Специальная метка «.» (точка) всегда равна текущему адресу (в точности как «$» в ассемблерах для DOS/Windows).
Если последовательность символов начинается с символа «*» — это абсолютный адрес (для команд jmp и call), иначе — относительный.