Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
468028.rtf
Скачиваний:
5
Добавлен:
09.11.2019
Размер:
701.39 Кб
Скачать

Модульная структура программ на языке Ассемблера.

Модулем называют часть программы, решающую некоторую подзадачу и более или менее независимую от других частей. Частным случаем модулей являются процедуры.

Рассмотрим процесс объединения отдельных модулей (оформленных в виде отдельных asm-файлов) в единый загрузочный модуль.

Пусть в программе имеется два модуля Ml и М2. Пусть в модуле М2 описана процедура Р, к которой будет обращаться модуль Ml, и пусть модуль М2 пользуется переменной Х и константой К из модуля Ml. Чтобы при трансляции не возникло сообщение об ошибке «неописанное имя», транслятору ассемблера сообщается, что имена Х и К, хотя и используются в М2, описаны в другом модуле. Такое сообщение делается с помощью директивы

<имя>:<тип>,…, <имя>:<тип>

где <тип> - это BYTE, WORD, DWORD, ABS, NEAR, FAR.

В нашем случае в модуле М2 надо указать директиву EXTRN X:BYTE, K:ABS. Она сообщает ассемблеру, что имена Х и К являются внешними по отношению к данному модулю. В модуле Ml следует поместить директиву EXTRN Р: PAR, сообщающую, что Р - это процедура из другого модуля и вызов ее должен быть дальним. В модуле, где описаны имена К и Х (т.е. в Ml) надо поместить директиву PUBLIC <имя>,….,<имя>

В данном случае в модуле Ml надо записать директиву PUBLIC X, K. Этой директивой сообщается, что имена Х и К данного модуля разрешено использовать в других модулях. Имена, описанные в модуле и доступные другим модулям, по отношению к этому модулю называются общими. Итак, если в каком-то модуле программы некоторое имя описано как внешнее, то в каком-то другом модуле это имя обязательно должно быть объявлено общим. С учетом сказанного модули Ml и М2 должны иметь следующий вид

; модуль Ml

; модуль М2

EXTRN Р: FAR

EXTRN X:BYTE, K:ABS

PUBLIC Х, K

PUBLIC P

X

DB

?

P

PROC

FAR

К

EQU

100

MOV

X, 0

MOV

АХ, К

CALL

Р

Модули транслируются отдельно. Затем при компоновке они объединяются в единую машинную программу с помощью команды:

LINK M1.OBJ+ … +Mk.OBJ, M.EXE;

Работа с командой прерываний int.

Особым видом являются подпрограммы, вызываемые по прерыванию командой INT. Прерывания бывают двух видов:

 аппаратные - это сигнал от любого устройства системы для процессора, который по этому сигналу должен обслужить данное устройство:

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

Команда прерывания

INT number

вызывает подпрограммы операционной системы. Эти прерывания имеют номера от 0 до FFh. Перед вызовом команды INT, в регистр AX помещают номер функции, который определяет необходимую подпрограмму. Другие регистры тоже могут использоваться в прерывании.

Процессор выполняет команду прерывания, используя таблицу векторов прерываний. Таблица векторов прерываний занимает самые нижние 1024 байта памяти. Каждый элемент таблицы - это 32-битный адрес «сегмент: смещение», указывающий на подпрограммы операционной системы. Когда происходит вызов команды INT процессор производит следующие действия:

1. Параметр number сообщает процессору местонахождение вектора в таблице векторов прерываний.

2. Процессор передает управление по указанному в векторе прерываний адресу процедуры обработки прерывания (ПОП).

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

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

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