Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
167 Кб
Скачать
☆

11. Рассказать о назначении директивы segment и ее использовании.

12. Рассказать о назначении директивы proc и ее использовании.

Директива SEGMENT Любые ассемблерные программы содержат по крайней мере один сегмент - сегмент кода. В некоторых программах используется сегмент для стековой памяти и сегмент данных для определения данных. Ассемблерная директива для описания сегмента SEGMENT имеет следующий формат: Имя Директива Операнд имя SEGMENT [параметры]... имя ENDS Имя сегмента должно обязательно присутствовать, быть уникальным и соответствовать соглашениям для имен в ассемблере. Директива ENDS обозначает конец сегмента. Обе директивы SEGMENT и ENDS должны иметь одинаковые имена. Директива SEGMENT может содержать три типа параметров, определяющих выравнивание, объединение и класс. 1. Выравнивание. Данный параметр определяет границу начала сегмента. Обычным значением является PARA, по которому сегмент устанавливается на границу параграфа. В этом случае начальный адрес делится на 16 без остатка, т.е. имеет шест. адрес nnn0. В случае отсутствия этого операнда ассемблер принимает по умолчанию PARA. 2. Объединение. Этот элемент определяет объединяется ли данный сегмент с другими сегментами в процессе компоновки после ассемблирования (пояснения см. в следующем разделе "Компоновка программы"). Возможны следующие типы объединений: STACK, COMMON, PUBLIC, AT выражение и MEMORY. Сегмент стека определяется следующим образом: имя SEGMENT PARA STACK, когда отдельно ассемблированные программы должны объединяться компоновщиком, то можно использовать типы: PUBLIC, COMMON и MEMORY. В случае, если программа не должна объединяться с другими программами, то данная опция может быть опущена. 3. Класс. Данный элемент, заключенный в апострофы, используется для группирования относительных сегментов при компоновке: имя SEGMENT PARA STACK 'Stack' Фрагмент программы на рис.3.1. в следующем разделе иллюстрирует директиву SEGMENT и ее различные опции. Директива PROC Сегмент кода содержит выполняемые команды программы. Кроме того, этот сегмент также включает в себя одну или несколько процедур, определенных директивой PROC. Сегмент, содержащий только одну процедуру имеет следующий вид: имя-сегмента SEGMENT PARA имя-процедуры PROC FAR Сегмент . кода . с . одной RET процедурой имя-процедуры ENDP имя-сегмента ENDS Имя процедуры должно обязательно присутствовать, быть уникальным и удовлетворять соглашениям по именам в ассемблере. Операнд FAR указывает загрузчику DOS, что начало данной процедуры является точкой входа для выполнения программы. Директива ENDP определяет конец процедуры и имеет имя, аналогичное имени в директиве PROC. Команда RET завершает выполнение программы и в данном случае возвращает управление в DOS. Сегмент может содержать несколько процедур (см. гл.7).

13. Рассказать о назначении директивы assume и ее использовании.

14. Рассказать о назначении директивы end и ее использовании.

Директива ASSUME

Процессор использует регистр SS для адресации стека, регистр DS для адресации сегмента данных и регистр CS для адресации сегмента кода. Ассемблеру необходимо сообщить назначение каждого сегмента. Для этой цели служит директива ASSUME, кодируемая в сегменте кода следующим образом: Директива Операнд ASSUME SS:имя_стека,DS:имя_с_данных,CS:имя_с_кода Например, SS:имя_стека указывает, что ассемблер должен ассоциировать имя сегмента стека с регистром SS. Операнды могут записываться в любой последовательности. Регистр ES также может присутствовать в числе операндов. Если программа не использует регистр ES, то его можно опустить или указать ES: NOTHING.

Директива END Как уже показано, директива ENDS завершает сегмент, а директива ENDP завершает процедуру. Директива END в свою очередь полностью завершает всю программу: Директива Операнд END [имя процедуры] Операнд может быть опущен, если программа не предназначена для выполнения, например, если ассемблируются только определения данных, или эта программа должна быть скомпонована с другим (главным) модулем. Для обычной программы с одним модулем операнда содержит имя, указанное в директиве PROC, которое было обозначено как FAR.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]