Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №1_2012.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
140.29 Кб
Скачать

3.5. Директивы

Директивы являются указаниями ассемблеру на порядок и особенности ассемблирования. В общем случае они управляют процессом ассемблирования и формированием листинга.

Директивы можно классифицировать следующим образом:

• для работы со счетчиком адреса;

• условной трансляции;

• условного выполнения программы;

• генерации условной ошибки;

• распределения данных;

• установления равенства;

• управления листингом;

• работы с макрокомандами;

• для использования в процедурах;

• указания текущего типа процессора;

• для блоков повторения;

• управления областью видимости;

• управления сегментацией;

• упрощенной сегментации;

• работы со строками;

• описания сложных типов данных;

• другие директивы.

Рассмотрим наиболее важные директивы, являющиеся общими для ассемблеров программных пакетов различных производителей.

.386 - Разрешает трансляцию команд для процессора 80386(включая команды сопроцессора 80387), одновременно отключая трансляцию команд из расширенного набора для более поздних моделей процессора.

.486 - Разрешает трансляцию команд для процессора 80486 (включая команды сопроцессора), одновременно отключая трансляцию команд из расширенного набора для более поздних моделей процессора.

EQU – определение имени.

Формат: имя EQU выражение (строка текста).

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

DD – определение данных.

Формат [имя] DD инициализатор [,инициализатор]…

По этой директиве выделяются ячейки памяти и в них записываются значения, определяемые операндом директивы. В соответствии с форматом этой директивы перед ней могут стоять метка или имя. Одной директивой могут определяться несколько объектов данных. Эта директива приводит к генерации выходного кода – непосредственно значений данных.

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

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

END – конец программного модуля.

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

SEGMENT – определяет параметры сегментов в программе.

Формат

имя SEGMENT [READONLY] [выражение] [комбинирование] [размер] [‘класс’]

операторы

имя ends

Значения атрибутов:

выравнивание – BYTE, WORD, DWORD,PARA,PAGE;

комбинирование – PUBLIC, STACK, COMMON, MEMORY, ATадрес, PRIVATE;

размер – USE16, USE32, FLAT;

класс – строка символов.

PROC – обмечает начало блока процедуры, обозначенного идентификатором.

Формат:

метка PROC [язык] [расстояние]

[USES список_регистров] [, параметр [:тип]]…

команды

метка ENDP

Команды в блоке могут вызываться посредством команды CALL или директивой invoke.

ASSUME – включение механизм предположения об использовании и типе содержимого регистров.

Формат:

ASSUME сегментный регистр: имя [,сегментный_регистр:имя]…

ASSUME регистр_общего_назначения:тип [,регистр_общего_назначения :тип]…

ASSUME регистр:ERROR [,регистр:ERROR]…

ASSUME [регистр:] NOTHING [,регистр: NOTHING]…

После применения директивы ASSUME в программе транслятор отслеживает правильность использования заявленных в ней регистров. ERROR указывает на необходимость генерации ошибки при попытке использования регистра. NOTHING указывает на необходимость прекращения контроля за содержимым регистра (или всех регистров). В одной инструкции можно комбинировать различные виды предположений.

ORG – установка адреса

Формат:

ORG выражение

Устанавливает счетчик адреса программы равным значению выражения

STАRT/, SECT – начало модуля или программной секции

Операндом директивы является имя секции. Этой директивой устанавливается в 0 счетчик адресов программы. Программа может состоять из нескольких программных секций, в каждой секции счет адресов ведется от 0. При обработке этой директивы на 1-м проходе ассемблер создает таблицу программных секций и только в конце 1-го прохода определяет их длины и относительные адреса в программе. На 2-м проходе ассемблер использует таблицу секций при трансляции адресов.

DB – определение байта.

Формат [имя] DB инициализатор [,инициализатор] …

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

DW – директива определения слова

Формат [имя] DW инициализатор [,инициализатор] …

Размещает и при необходимости инициализирует слово памяти размером 2 байта для каждого инициализатора. Числовое выражение в DW может содержать одно или более двухбайтовых констант. Два байта представляются четырьмя шестнадцатеричными цифрами. В десятичном формате пределы числа, задаваемого этой директивой определяются значениями +32767 и -32768.

DD – директива определения двойного слова

Формат [имя] DD инициализатор [,инициализатор] …

Определяет элементы, которые имеют длину в два слова (четыре байта). Числовое выражение может содержать одну или более констант, каждая из которых имеет максимум четыре байта. В десятичном счислении пределы чисел, задаваемых этой директивой определяются от -2147483647 до +2147483648.

DQ – директива определения учетверенного слова

Формат [имя] DQ инициализатор [,инициализатор] …

Эта директива определяет элементы, имеющие длину четыре слова (восемь байт). Числовое выражение может содержать одну или более констант, каждая из которых имеет максимум восемь бай или 16 шестнадцатеричных цифр. Символьные строки в этой директиве обрабатываются также как в директивах DD и DW.

DT – директива определения десяти байт.

Формат [имя] DD инициализатор [,инициализатор] …

Определяет элементы данных, имеющие длину в десять байт.