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


              

Передача управления между режимами в DPMI


Вызов любого программного прерывания, кроме INT 31h и INT 21h/АН = 4Ch (функция DPMI: завершение программы), приводит к тому, что DPMI-сервер переключается в режим V86 и вызывает это же самое прерывание, скопировав все регистры, кроме сегментных регистров и стека (состояние сегментных регистров не определено, а стек предоставляет сам DPMI-сервер). После того как обработчик прерывания возвратит управление, DPMI-сервер возвратиться в защищенный режим и вернет управление программе. Таким способом можно вызывать все прерывания, передающие параметры только в регистрах, например проверку нажатия клавиши или вывод символа на экран. Чтобы вызвать прерывание, использующее сегментные регистры, например вывод строки на экран, а также в других ситуациях, требующих вызова процедуры, работающей в другом режиме, применяются следующие функции.

INT 31h, AX = 0300h — Вызов прерывания в реальном режиме

Ввод: АХ = 0300h
ВН = 0, BL = номер прерывания
СХ = число слов из стека защищенного режима, которое будет скопировано в стек реального режима и обратно
ES:EDI = селектор:смещение структуры регистров v86_regs (см. ниже)
Вывод: если CF = 0, структура в ES:EDI модифицируется

Значения регистров CS и IP в структуре v86_regs игнорируются. Вызываемый обработчик прерывания должен восстанавливать стек в исходное состояние (например, INT 25h и INT 26h этого не делают).

INT 31h, АХ = 0301Н Вызов дальней процедуры в реальном режиме

Ввод: АХ = 0301h
ВН = 0
СХ = число слов из стека защищенного режима, которое будет скопировано в стек реального режима и обратно
ES:EDI = селектор:смещение структуры регистров v86_regs (см. ниже)
Вывод: если CF = 0, структура в ES:EDI модифицируется

Вызываемая процедура должна заканчиваться командой RETF.

INT 31h, AX = 0302h Вызов обработчика прерывания в реальном режиме

Ввод: АХ = 0302h
ВН = 0
СХ = число слов из стека защищенного режима, которое будет скопировано в стек реального режима и обратно
ES:EDI = селектор:смещение структуры регистров v86_regs (см. ниже)
Вывод: если CF = 0, структура в ES:EDI модифицируется
<

Содержание  Назад  Вперед