Иллюстрированный самоучитель по Assembler


Организация приложений MS-DOS - часть 23


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

;Сцепление прикладного обработчика с системным

; для программы 3-3

new_08 proc

pushf            ;Отправляем в стек слово флыгов

call CS:old 08   ; В системный обработчик

...      ;Продолжение программы обработчика

iret

new_08 endp   

Как будет работать такая программа? После того, как процессор выполнит процедуру прерывания, в стеке прерванного процесса оказываются три слова: слово флагов, а также двухсловный адрес возврата в прерванную программу (рис.3.5, нижние три слова стека).

Рис. 3.5. Стек прерванной программы в процессе выполнения прикладного обработчика прерываний.

CS1 - сегментный адрес прерванного процесса;

IP1 - смещение точки возврата в прерванную программу;

CS2 - сегментный адрес прикладного обработчика;

IP2 - смещение точки возврата в прикладной обработчик.

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

Первая команда нашего обработчика pushf засылает в стек еще раз слово флагов, а команда дальнего вызова процедуры call cs:old_08 (где ячейка old_08 объявлена с помощью оператора dd двойным словом) в процессе передачи упражнения системному обработчику помещает в стек двухсловный адрес возврата на следующую команду прикладного обработчика. В результате в стеке формируется трехсловная структура, которая нужна команде iret.

Системный обработчик, закончив обработку данного прерывания, завершается командой iret. Эта команда забирает из стека три верхние слова и осуществляет переход по адресу CS2:IP2, т.е. на продолжение прикладного обработчика.




Начало  Назад  Вперед



Книжный магазин