Косвенная адресация с последующим индексированием (послеиндексирование)

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

Директивы

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

Директив может быть великое множество. В 1-м приближении мы рассмотрим лишь несколько практически обязательных директивы (мнемоники директив везде — условные, в конкретных Ассемблерах те же по смыслу директивы могут иметь другие мнемоники).

EQU
Определение имени

Перед этой директивой обязательно стоит имя. Операнд этой директивы определяет значение имени.

Операндом может быть и выражение, вычисляемое при ассемблировании. Имя может определяться и через другое имя, определенное выше. Как правило, не допускается определение имени со ссылкой вперед.

DD
Определение данных

Выделяются ячейки памяти и в них записываются значения, определяемые операндом директивы.

Перед директивой может стоять метка/имя. Как правило, одной директивой могут определяться несколько объектов данных.

В конкретных Ассемблерах может существовать либо одна общая директива DD, тогда тип данных, размещаемых в памяти определяется формой записи операндов, либо несколько подобных директив — для разных типов данных.

В отличие от других, эта директива приводит непосредственной к генерации некоторого выходного кода — значений данных.

BSS
Резервирование памяти

Выделяются ячейки памяти, но значения в них не записываются. Объем выделяемой памяти определяется операндом директивы.

Перед директивой может стоять метка/имя.

END
Конец программного модуля

Указание Ассемблеру на прекращение трансляции. Обычно в модуле, являющемся главным (main) операндом этой директивы является имя точки, на которую передается управление при начале выполнения программы. Во всех других модулях эта директива употребляется без операндов.

Директивы определения данных

Сегмент данных предназначен для определения констант, рабочих полей и областей для ввода-вывода. В соответствии с имеющимися директивами в Ассемблере разрешено определение данных различной длины: например, директива DB определяет байт, а директива DW oпределяет слово. Элемент данных может содержать непосредственное значение или константу, определенную как символьная строка или как числовое значение.

Другим способом определения константы является непосредственное значение, то есть, указанное прямо в ассемблерной команде, например:

MOV AL,20H

В этом случае шестнадцатеричное число 20 становится частью машинного объектного кода. Непосредственное значение ограничено oдним байтом или одним словом, но там, где оно может быть применено, оно является более эффективным, чем использование конcтанты.

Ассемблер обеспечивает два способа определения данных: во-первых, через указание длины данных и, во-вторых, по их cодержимому. Рассмотрим основной формат определения данных:

[имя] Dn выражение

Имя элемента данных не обязательно (это указывается квадратными скобками), но если в программе имеются ссылки на некоторый элемент, то это делается посредством имени.

Для определения элементов данных имеются следующие директивы: DB (байт), DW (слово), DD (двойное слово), DQ (учетверенное слово) и DT (десять байт).

Выражение может содержать константу, например:

FLD1 DB 25

или знак вопроса для неопределенного значения, например

FLDB DB ?

Выражение может содержать несколько констант, разделенных запятыми и ограниченными только длиной строки:

FLD3 DB 11, 12, 13, 14, 15, 16, ...

Ассемблер определяет эти константы в виде последовательности cмежных байт.

Ссылка по имени FLD3 указывает на первую константу, 11, по FLD3+1 — на вторую, 12. (FLD3 можно представить как FLD3+0). Например команда

MOV AL,FLD3+3

загружает в регистр AL значение 14 (шест. 0E). Выражение допускает также повторение константы в следующем формате:

[имя] Dn число-повторений DUP (выражение) ...

Следующие три примера иллюстрируют повторение:

DW 10 DUP(?) ;Десять неопределенных слов

DB 5 DUP(14) ;Пять байт, содержащих шест.14

DB 3 DUP(4 DUP(8));Двенадцать восьмерок

В третьем примере сначала генерируется четыре копии десятичной 8 (8888), и затем это значение повторяется три раза, давая в pезультате двенадцать восьмерок.

Выражение может содержать символьную строку или числовую константу.

Символьные строки

Символьная строка используются для описания данных, таких как, например, имена людей или заголовки страниц. Содержимое строки oтмечается одиночными кавычками, например, 'PC' или двойными кавычками — "PC".

Ассемблер переводит символьные строки в объектный код в обычном формате ASCII.

Символьная строка определяется только директивой DB, в котоpой указывается более двух символов в нормальной последовательности слева направо. Следовательно, директива DB представляет единственно возможный формат для определения символьных данных.

Числовые константы

Числовые константы используются для арифметических величин и для aдресов памяти. Для описания константы кавычки не ставятся. Ассемблер преобразует все числовые константы в шестнадцатеричные и записывает байты в объектном коде в обратной последовательности — справа налево. Ниже показаны различные числовые форматы.

Десятичный формат

Десятичный формат допускает десятичные цифры от 0 до 9 и обозначается последней буквой D, которую можно не указывать, например, 125 или 125D. Несмотря на то, что Ассемблер позволяет кодирование в десятичном формате, он преобразует эти значения в шест. объектный код. Например, десятичное число 125 преобразуется в шест.7D.

Шестнадцатеричный формат

Шестнадцатеричный формат допускает шест. цифры от 0 до F и обозначается последней буквой H.

Так как Ассемблер полагает, что с буквы начинаются идентификаторы, то первой цифрой шест. константы должна быть цифра от 0 до 9. Например, 2EH или 0FFFH, которые Ассемблер преобразует соответственно в 2E и FF0F (байты во втором примере записываются в объектный код в обратной последовательности).

Двоичный формат

Двоичный формат допускает двоичные цифры 0 и 1 и обозначается последней буквой B. Двоичный формат обычно используется для более четкого представления битовых значений в логических командах AND, OR, XOR и TEST. Десятичное 12, шест. C и двоичное 1100B все генерируют один и тот же код: шест. 0C или двоичное 0000 1100 в зависимости от того, как вы рассматриваете содержимое байта.

Восьмеричный формат

Восьмеричный формат допускает восьмеричные цифры от 0 до 7 и обозначается последней буквой Q или O, например, 253Q. На сегодня восьмеричный формат используется весьма редко.

Наши рекомендации