Эмуляция прерывания реального режима
Эта функция предназначена для эмуляции выполнения прерывания в реальном режиме. С её помощью вы сможете находясь в защищённом режиме обращаться к функциям 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 для возврата.