Assembler - язык неограниченных возможностей

         

Обработчики прерываний


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

INT 31h, AX = 0200h — Определить адрес реального обработчика прерывания

Ввод: АХ = 0200h
BL = номер прерывания
Вывод: CF = 0 всегда, CX:DX — сегмент:смещение обработчика прерывания в реальном режиме

INT 31h, АХ = 0201h — Установить реальный обработчик прерывания

Ввод: АХ = 0201h
BL = номер прерывания
CX:DX = сегмент:смещение обработчика прерывания в реальном режиме
Вывод: CF = 0 всегда

INT 31h, АХ = 0204h — Определить адрес защищенного обработчика прерывания

Ввод: АХ = 0204h
BL = номер прерывания
Вывод: CF = 0 всегда, CX:EDX = селектор:смещение обработчика

INT 31h, АХ = 0205h — Установить защищенный обработчик прерывания

Ввод: АХ = 0205h
BL = номер прерывания
CX:EDX = селектор:смещение обработчика
Вывод: CF = 0

INT 31h, АХ = 0202h — Определить адрес обработчика исключения

Ввод: АХ = 0202h
BL = номер исключения (00h – 1Fh)
Вывод: если CF = 0, CX:EDX = селектор:смещение обработчика исключения

INT 31h, АХ = 0203h — Установить обработчик исключения

Ввод: АХ = 0203h
BL = номер исключения (00h – 1Fh)
CX:EDX = селектор:смещение обработчика исключения
Вывод: CF = 0, если не было ошибок

Если обработчик исключения передает управление дальше по цепочке на стандартный обработчик DPMI-сервера, следует помнить, что только исключения 0, 1, 2, 3, 4, 5 и 7 передаются обработчикам из реального режима, а остальные исключения приводят к прекращению работы программы.



Содержание раздела