[Назад] [Далее]

11.1.1. Основные правила

Итак, в ассемблере 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), иначе — относительный.


п»ї
"target=_blank><\/a>") //-->