Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Организация ЭВМ и сетей - Лаба 01.rtf
Скачиваний:
6
Добавлен:
10.07.2019
Размер:
765 Кб
Скачать
☆

Директивы.

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

PAGE str, sim - Задает число строк на странице и символов в строке листинга.

SEGMEMT - определение сегмента. Любая программа содержит по крайней мере один сегмент - кода, но обычно используются и сегменты стека и данных. Формат Имя SEGMENT [параметры]

...................

Имя ENDS

Имя должно обязательно присутствовать и быть уникальным. Директива ENDS означает конец сегмента и должна иметь то же имя. Может быть три типа параметров:

1. Выравнивание - определяет границу начала сегмента. Есть 5 типов выравнивания. Обычно имеет значение PARA, по которому сегмент устанавливается на границу параграфа.

2. Объединение - определяет, объединяется ли данный сегмент с другими сегментами в процессе компоновки программы (Если разные модули программы транслировались отдельно). Есть 6 типов объединения. Сегмент стека определяется следующим образом:

имя SEGMENT PARA STACK

3. Класс - используется для группирования отдельных сегментов при компоновке. Заключается в апострофы.

имя SEGMENT PARA STACK ‘Stack’

ASSUME - определяет назначение сегментных регистров.

ASSUME SS: имя_стек, DS: имя_данные, CS: имя_код

При выполнении команд для адресации стека будет использоваться адрес в регистре SS, данных - в регистре DS, кода - в CS. Но загружать значения в эти регистры надо отдельно.

PROC - описание процедуры. Формат:

Имя_процедуры PROC тип

тело процедуры

RET

ENDP

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

END [имя программы] - завершает программу.

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

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

Имя не обязательно, но программа ссылается на элемент через имя. Можно определить DB - байт, DW - слово, DD - двойное слово и др. Выражение может содержать константу, несколько констант через запятую или знак вопроса ? для неопределенного значения (если нужно просто зарезервировать место). В формате

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

выражение повторяется заданное число раз. Например:

X1 DB 25 - байт с константой.

X1 DW ? - слово с неопределенным значением.

X2 DB 1,2,3,4,5 - несколько констант. Обращение к первой по имени X2, ко второй

X2+1 и т.д.

X3 DW 5 DUP(?) - 5 неопределенных слов.

STR DB ‘СТРОКА’ - символьная строка определяется директивой DB и заключается

в кавычки или апострофы.

Структура ассемблерной программы.

Существует два основных типа загрузочных программ: EXE и COM. Каждой программе в памяти предшествует префикс программного сегмента длиной 256 байт в котором . Компоновщик LINK автоматически генерирует EXE-фйлы. В них имеется специальный начальный блок (заголовок) длиной не менее 512 байт. В нем находится информация о размере программы, адресе стека и др. ЕХЕ-программа может иметь любой размер, СОМ - не более 64К. Размер СОМ-файла всегда меньше, чем соответствующего ЕХЕ. СОМ-программы автоматически генерирует стек. в СОМ-программах все данные должны быть определены в сегменте кода.

В реальной программе должны быть определены используемые сегменты и выполнены четыре требования DOS (для EXE-программ):

1. Указать, какие сегментные регистры каким сегментам соответствуют.

2. Сохранить в стеке содержимое регистра DS на момент начала выполнения программы.

3. Записать в стек нулевой адрес.

4. Загрузить в DS адрес сегмента данных.

Выход из программы и возврат в DOS производится командой RET.