Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МАВЦ.464319.001ТУ 20140414 Семенов.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
2.98 Mб
Скачать

4.18Основные директивы ассемблера

Напомним, что директивы (псевдооператоры) — это инструкции ассемблеру, то есть они выполняются только при ассемблировании (транслировании) програм­мы. Приведем некоторые из часто используемых директив.

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

Присваивают идентификатору с данным именем некоторое текстовое или число­вое значение (выражение). Формат директив:

имя EQU текст

имя = число значение (выражение)

Разница между псевдооператорами EQU и =:

  • EQU — присваивает значение постоянно (изменять нельзя), текст может быть символьным, числовым или смешанным выражением, определяющим констан­ту, адрес, другое символьное имя, метку и т. д.;

  • = — выполняет текущее присвоение (значение может быть переприсвоено, но только при трансляции, естественно); присваивает только числовое выраже­ние, содержащее простые математические преобразования, которые при транс­ляции и будут выполнены (например, const+1,15H*4, 3*12/4 и т. д.).

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

Используются для идентификации переменных и полей памяти. Формат дирек­тивы

[имя] D* выражение [.выражение] [ ] .

D* может быть:

a DB (define byte) — определить байт (1 байт);

Q DW (define word) — определить слово (2 байт);

a DD (define dword) — определить двойное слово (4 байт);

a DQ(define 8 byte) — определить8байт;

Q DT (define 10 byte) — определить 10 байт.

Рассматриваемые директивы определяют переменную (имя) или присваивают полям (ячейкам) памяти начальные значения; резервируют в памяти один или несколько байт — DB, слов — DW, двойных слов — DD и т. д. (с более поздним присвоением значения).

Выражение показывает, какое количество элементов памяти необходимо выделить и какие данные там должны содержаться. Выражение может быть:

  • константой: const DB 56; const DW 1936; const DD 3FFH. Обязательно следует учитывать диапазон и вместимость байта, слова и т. д.; так, для DB константа не может быть больше 255, для DW - 65535, для DD - (65535)Л2=4294836225;

  • вектором или таблицей: tab!el DB 30,4,-15,0,0,0,56; table2 DW 1936,3004,56,15. В одном псевдооператоре можно поместить строку до 132 позиций, причем вместо повторения одного и того же значения несколько раз (0 в tablet) можно использо­вать псевдооператорDUP(duplicate— дублировать):tab!el DB 30,4,-15,3 dup(0),56);

  • строкой символов: strl DB 'Вы ввели слишком большое число1; str2 DB 'Bad command1; в псевдооператоре DB строка может содержать 255 символов, во всех остальных (DW. DD, DQ, DT) — только два символа.

  • пустым полем: polel DB ?; pole2 DW 12 dup(?), при этом в элементы резервируе­мой памяти ничего не записывается (записывается не 0, как, например, в ди­рективе ро!еЗ DW 5 dup(0), а просто резервируются ячейки памяти);

  • символическим именем переменной: varl DW dlsp; var2 DD vector (одна пере­менная определяется адресом другой, в директивах указывать offset не надо, ибо имя переменной воспринимается как ее адрес). Такой вариант может использоваться, например, для хранения адресов ячеек памяти, меток, на ко­торые можно ссылаться в программе (varl DW dlsp), причем если переменная находится в том же сегменте, что и ссылающаяся команда, то достаточно в ка­честве адреса указать только смещение (2 байт), то есть обойтись DW; если же переменная находится в другом сегменте, то необходимо указать и сегмент, и смещение (всего 4 байт), то есть следует использовать уже DD (var2 DD vector);

  • простым выражением: fnl DB 80*3; fn2 DW (disp)+256, вычисляемым, естествен­но, только при трансляции программы.