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

16. Мультимодульные программы.

Рассмотрим пути создания программ из нескольких модулей.

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

3 директивы:

• public

• extrn

• global

public [язык] метка [, [язык] метка…]

Определяет метки программы, которые будут доступны в других программах.

.data

public my_equ, my_var

my_equ equ 25

my_var dd 12345678h

.code

public my_proc

my_proc proc …

extrn определение [, определение…]

определение = [язык] метка:тип[:количество повторений]

Определяет какие метку будут взяты из другого модуля.

Тип: ABS (константа), BYTE, WORD,…, FAR, NEAR, PROC

global определение [, определение…]

Объединяет функции public и extrn.

.data

global my_out:dataptr, my_in:word …

my_in dw 10

.code

global my_out_code:near, my_in_code:far

my_in_code proc far …

call my_out_code

17. Обработчики прерываний и резидентные программы.

Посредством прерывания работы микропроцессора можно приостанавл. работу текущей программы и осущ. запуск другой программы.Прерывания: 1)Внешние;2)Внутренние. Каждому прерыв. ставятся в соотв. 4-х байтный вектор с номером 0<n<255. Все векторы можно размещать по порядку в младш. килобайте памяти. Любой из них задает точку входа или старт адрес программы для обслуж. треб ситуации. В виде сегмент. прогр:смещ. прогр. Внешн прер. вызываются на входе INTR(запрос маскируемого прерывания и на NMI(немаскер. прерывание). Если признак I в регистре флаг = 0, сигнал на входе INTR не распознается и прерывание не происх. При I=1 и налич сигнала INTR возник маскируемое прерывание. Действие кот. будет при этом выполн.:1) На вход INTR - поступ. запрос прерывание;2) Послед. действия определ. допустимой ситуацией:а) ожид. завершение текущей команды; б)-||- сл. команды;в) запрос обраб во время вып. текущей команды.---В нек случаях сигнал INTR распазн только при б).--Имеются 2 случ. когда в): 1..При строковых командах с повторением.2.. При вып. команды wait. 3) Микропроц. выраб. 2 сигнала подтверждения INTX. 4) По шине адресов/данных в микропроц. передается байт с номером n прерываний. 5) Текущее содерж. регистра признаков и регистра CS и IP загруж. в стек. В стек загруж. IP соответ. смещениюкоманды перед которой возникло прерыв. 6) Признаки I,T сбрасываются в 0.7)В CS:IP загруж. содержимое вектора n. 8) Выполн. программа обработки прерывания. 9) В конце обработки прерыв. команда iret восстан. знач. регистра IP,ES и FL.10)Прерванная программа продолж. свое выполнение.

Внутренне прерывание возникает либо при появлении некоторых микро сигналов внутри микропроцессора либо по команде внутри программы

+cм 18

18. Структура резидентной программы. См пред.пункт.

Резидентные программы.

Программы, кот. ост. в памяти после возврата действия в ДОС носят назв. резидентных. Блоки памяти в которых сидят резиденты ОС отмечает как занятые. Прерывания делятся: 1) Аппаратные: - маскируемые; - немаскируемые; 2) Программные: - прерывания BIOS; - прерывания DOS; пользовательские; 3) Исключительные ситуации: - ошибки; - ловушки; - аварийное завершение. Они вызываются процессором при возникновении ошибки(00 h – 1Fh) и поддерживаются только в защищенном режиме. Сущ. 2 способа оставить программу резидентной: 1) с помощью int 21h (ah=31h; al=код возврата; dx=размер резидента в 16-байтных параграфах включая PSP; cs=сегмент резидента). 2) int 27h – оставить программу резидентной(dx= адрес последнего байта программы; cs = сегмент резидента). 1-ый исп. когда резиденты большого размера и явл. exe. Резиденты небольшого размера, реализуются в виде com и ост. в памяти обработчиком int 27h. Резиденты – активные (перехватывают прерывания от внешних устройств) и пассивные (активизируются при вып. команды int с нужным номером). Способы установки векторов прерывания: 1) непосредственным обращением к соотв. байтам( xor ax,ax---mov es,ax---mov ax,es:[9*4]---mov int_ofs,ax---mov ax,es:[9*4+2]---mov int_seg,ax---Установить адрес входа в собственный обработчик также можно напрямую, путем модификации таблицы векторов(запрещает прерывание т.к. недопустимо чтобы INT_NUM появилось в момент, когда изменяем вектор.--- push 0---pop es---mov bx,INT_NUM---shl bx,2---mov ax,seg ISR---shl eax,16---mov ax,offset ISR---mov es:[bx],eax---sti). В многозадачной среде ОС может поддерживать несколько таблиц векторов прерываний, и реальный физический адрес может быть известен только DOS. 2) Используя функции DOS. Функция 35h получает адрес обработчика.(Вход ah=35h,al=номер прерывания; выход es:bx=адрес обработчика). 25h – устанавливает адрес входа в обработчик.(вход ah=25h; al=номер прерывания; ds:dx = адрес нового обработчика; выход – ничего).

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