[Назад] [Далее]

6.3.1. Переключение в защищенный режим

Все основные сервисы DPMI доступны только в защищенном режиме через прерывание INT 31h, так что переключение режимов — первое, что должна сделать программа.


INT 2Fh AX = 1687h — Функция DPMI: получить точку входа в защищенный режим

Ввод: АХ = 1687h
Вывод: АХ = 0, если DPMI присутствует
ВХ: бит 0 = 1, если поддерживаются 32-битные программы, 0 — если нет
CL: тип процессора (02 — 80286, 03 — 80386 и т.д.)
DH:DL — версия DPMI в двоичном виде (обычно 00:90 (00:5Ah) или 01:00)
SI = размер временной области данных, требуемой для переключения в 16-байтных параграфах
ES:DI = адрес процедуры переключения в защищенный режим

Вызвав эту функцию, программа должна выделить область памяти размером SI * 16 байт и выполнить дальний CALL на указанный адрес. Единственные входные параметры — регистр ES, который должен содержать сегментный адрес области данных для DPMI и бит 0 регистра АХ. Если этот бит 1 — программа собирается стать 32-битным приложением, а если 0 — 16-битным. Если по возвращении из процедуры установлен флаг CF, переключения не произошло и программа все еще в реальном режиме. Если CF = 0, программа переключилась в защищенный режим и в сегментные регистры загружены следующие селекторы:

Разрядность сегментов данных определяется заявленной разрядностью программы. Остальные регистры сохраняются, а для 32-битных программ старшее слово ESP обнуляется. По адресу ES:[002Ch] записывается селектор сегмента, содержащего переменные окружения DOS.

После того как произошло переключение, можно загрузить собственные дескрипторы для сегментов кода и данных и перейти в режим с моделью памяти flat.

Перечислим теперь основные функции, предоставляемые DPMI для работы с дескрипторами и селекторами.


п»ї
"target=_blank><\/a>") //-->