Эмуляция прерывания реального режима
Эта функция предназначена для эмуляции выполнения прерывания в реальном режиме. С её помощью вы сможете находясь в защищённом режиме обращаться к функциям BIOS, DOS и к другим прерываниям реального режима. Регистры на входе AX 0300h BL Номер прерывания. BH Байт флагов. Если установлен в единицу бит 0, выполняется сброс контроллера и линии A20. Остальные биты зарезервированы и должны быть сброшены в нуль. CX Количество слов, которые должны быть скопированы из стека защищённого режима в стек реального режима. ES:(E)DI Адрес управляющей структуры для вызова прерывания. Регистры на выходе: CARRY 0, если функция выполнилась без ошибки, 1, если произошла ошибка. ES:(E)DI Адрес модифицированной (в результате выполнения обработчика прерывания) управляющей структуры в формате защищённого режима.
Управляющая структура содержит значения для инициализации регистров перед вызовом эмулируемого прерывания реального режима. Она имеет следующий формат:
Таблица 11. Формат управляющей структуры для эмуляции прерывания реального режима средствами DPMI.
| Смещение | Регистр |
| 00h | EDI |
| 04h | ESI |
| 08h | EBP |
| 0Ch | Зарезервировано |
| 10h | EBX |
| 14h | EDX |
| 18h | ECX |
| 1Ch | EAX |
| 20h | FLAGS |
| 22h | ES |
| 24h | DS |
| 26h | FS |
| 28h | GS |
| 2Ah | IP |
| 2Ch | CS |
| 2Eh | SP |
| 30h | SS |
Ваша программа, находясь в защищённом режиме, может не только вызвать прерывание реального режима, но и передать параметры через стек, указав в управляющей структуре их количество. Наример: push Parametr1 push Parametr2 push Parametr3 mov cx, 3 ; Копируем три параметра mov ax, 0301h int 31h add sp, 6 ; Восстанавливаем стек
Обработчик прерывания реального режима получит стек, подготовленный следующим образом: Parametr1 Parametr2 Parametr3 CS для возврата IP для возврата
Указатель стека реального режима SS:SP установлен на слово, содержащее IP для возврата.