Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_lectures.doc
Скачиваний:
27
Добавлен:
28.04.2019
Размер:
992.77 Кб
Скачать

Взаимодействие прикладных и системных обработчиков прерываний

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

При инициализации прикладного обработчика, сцепляемого с системным, следует сохранить адрес системного обработчика (или прикладного, который уже перехватил системный). Адрес запоминается в 2-х словной ячейке old-int. В вектор заносится адрес нового обработчика new-int. Если прикладная обработка д.б. после системной, то структура прикладного обработчика следующая:

Old_int DD ?

.

.

.

new_int proc far

pushf

call cs:old_int ; в систем. обр. с возвратом

.

.

; прикладная обработка

.

iret

new_int endp

Рассмотрим структуру стека при выполнении процедуры прерывания и вызове new_int

Это для iret системного обработчика

IP2

 От команды call cs:old_int

CS2

Флаги

 От pushf

Это для iret прикладного обработчика

IP1

 отновит. Адрес точки возврата в прерванный процесс

CS1

 сегментный адрес прерванного процесса

Флаги

Т.о. в результате команд pushf и call в стеке формируется трехсловная структура, необходимая команде iret – системного обработчика, чтобы вернуться в new_int. Команда call CS:old_int – формирует дальний вызов процедуры точно также как call dword PTR CS:[old_int] за счет того, что old_int объявлено двойным словом.

Если прикладная обработка должна вестить до системной, то структура обработчика должна иметь вид:

new_int proc far

; прикладная обработка

jmp CS:old_int ;В системный обработчик без возврата

new_int endp

Команда jmp передает управление в системный обработчик (не затрагивая стек), который далее работает обычным образом.

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

new_int proc far

; прикладная обработка до системной

pushf

call cs:old_int ; в системный обработчик с возвратом

; прикладная обработка после системной

iret

new_int endp

В некоторых случаях обработчик, получив управление, анализирует ситуацию и либо выполняет обработку сам, полностью исключив системный обработчик, либо отдает управление системному:

new_int proc far

; анализ ситуации

jmp cs:old_int ; в системный обработчик с возвратом

; прикладная обработка, системная исключается

iret

new_int endp

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