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 передаются обработчикам из реального режима, а остальные исключения приводят к прекращению работы программы.





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