Организация ЭВМ и систем: Курс лекций (Позиционные системы счисления. Процессоры семейства IA-32. Лазерные принтеры), страница 14

Метка помечает в программе участок кода или данных. В процессе трансляции ассемблер определяет адрес каждого оператора. Этот адрес назначается метке, размещённой перед данным оператором.

Метка при команде должна заканчиваться двоеточием. Все остальные метки не должны заканчиваться двоеточием.

Мнемоника команды является условным обозначением команды процессора.

Различные команды содержат от нуля до трёх операндов.

Текст, начинающийся точкой с запятой и до конца строки, считается комментарием и игнорируется ассемблером. Некоторые ассемблеры допускают другие обозначения комментариев, определяемые специальными директивами.

5.4.2. Директивы

Директивой называется оператор, который выполняется ассемблером во время трансляции исходного текста программы.

Директивы используются для определения сегментов, выбора модели памяти, определения переменных, создания процедур и другого.

Набор директив и их синтаксис зависит от используемого ассемблера и прямо не связан с набором команд процессора.

6. Способы адресации

[1]

Способ адресации — это не что иное, как способ задания местоположения значения операнда. Процессоры семейства IA-32 допускают следующие способы адресации:

1)  непосредственная,

2)  регистровая,

3)  прямая,

4)  косвенная,

5)  косвенная со сдвигом,

6)  косвенная с масштабированием,

7)  косвенная со сдвигом и индексированием,

8)  косвенная со сдвигом, индексированием и масштабированием.

6.1.  Непосредственная адресация

Некоторые команды позволяют указывать один из операндов непосредственно в команде. Например, команда

                MOV     AX, 2

помещает в регистр AX число 2.

6.2.  Регистровая адресация

Операнды могут располагаться в любых регистрах общего назначения, сегментных и некоторых других регистрах. Для этого в качестве операнда указывается название соответствующего регистра. Например, вышеприведённая команда сочетает в себе и непосредственную адресацию числа 2, и регистровую адресацию регистра AX.

6.3.  Прямая адресация

Если адрес расположенного в памяти операнда заранее известен, то этот адрес можно использовать непосредственно. Например, команда

                MOV     AX, ES:0001

помещает в регистр AX слово, находящееся в сегменте, на который указывает регистр ES, со смещением от базы сегмента 1.

Примечание. Команды, типа приведённой, используются достаточно редко, так как они требуют, чтобы программист отслеживал положение нужного ему числа. Обычно вместо этого в сегменте данных, на который в примере указывает регистр ES, описывается переменная, идентификатор которой и подставляется в команду. А ассемблер уже вместо идентификатора подставляет смещение, равное 1 в данном примере. Но об этом речь будет идти далее.

Прямая адресация отличается для реального и защищённого режимов. В реальном режиме смещение всегда 16-разрядное, а в защищённом — 32-разрядное. Тоже самое касается всех более сложных способов адресации, где смещение определяется как результат сложения содержимого разных регистров.

6.4.  Косвенная адресация

Адрес операнда в памяти можно хранить в регистре, а не указывать явно, как при прямой адресации. Для этого можно использовать регистры BX, SI, DI, BP и все 32-разрядные регистры общего назначения. Если базовый регистр не указан явно, то при использовании регистров BX, SI, EAX, EBX, ECX, EDX и ESI используется DS, при использовании регистров BP, EBP и ESP используется SS.

Например, команда

                MOV     AX, [BX]

помещает в регистр AX слово из ячейки памяти, сегмент которой указывается DS, а смещение находится в BX.

6.5.  Косвенная адресация со сдвигом

Данный способ адресации является комбинацией прямой и косвенной адресации. Смещение задаётся суммой значения, находящегося в регистре, и значения, заданного непосредственно. Разрешается использовать те же самые регистры, что и при косвенной адресации.

Например, три нижеследующие команды:

                MOV     AX, [BX+2]
                MOV     AX, [BX]+2
                MOV     AX, 2[BX]