6.3.2. Функции DPMI управления дескрипторами

INT31h, AX = 0: Выделить локальные дескрипторы

Вход: АХ = О

СХ = количество необходимых дескрипторов Выход: если CF = О, АХ = селектор для первого из заказанных дескрипторов Эта функция только выделяет место в таблице LDT, создавая в ней дескриптор сегмента данных с нулевыми базой и лимитом, так что пользоваться им пока нельзя.

INT31h, AX = 1: Удалить локальный дескриптор

Вход: АХ = 1

ВХ = селектор Выход: CF = Q, если не было ошибки

Эта функция влияет на дескрипторы, созданные функцией Q, и при переклю­чении в защищенный режим, но не на дескрипторы, созданные функцией 2.

INT31h,AX= 2: Преобразовать сегмент в дескриптор Вход: АХ = 2

ВХ = сегментный адрес (OAOOOh - для видеопамяти, 0040h - для дан­ных BIOS)

Выход: если CF = О, АХ = готовый селектор на сегмент, начинающийся с ука­занного адреса, и с лимитом 64 Кб Так программы в защищенном режиме могут обращаться к различным облас­тям памяти ниже границы 1 Мб, например для прямого вывода на экран.

INT31h,AX= 6: Определить базу сегмента Вход: АХ =6

ВХ = селектор

Выход: если CF = О, CX:DX - 32-битный линейный адрес начала сегмента

INT31h,AX- 7: Сменить базу сегмента Вход: АХ = 7

ВХ = селектор

CX:DX = 32-битная база Выход: CF = Q, если не было ошибок

.   . в

INT31h,AX= 8: Сменить лимит сегмента Вход: АХ = 8

ВХ = селектор

CX.DX = 32-битный лимит (длина сегмента минус 1) Выход: CF = 0, если не было ошибок .

(чтобы определить лимит сегмента, можно пользоваться командой LSL)

6INT31h,AX = 9: Сменить права доступа сегмента Вход:  АХ = 9

ВХ = селектор

CL = права доступа/тип (биты 15-8 слова 2 дескриптора) СН = дополнительные права (биты 7-4 соответствуют битам 7-4 сло­ва 3 дескриптора, биты 3-Q игнорируются) Выход: CF - 0, если не было ошибок

(чтобы определить права доступа сегмента, можно пользоваться командой LAR)

INT31h, АХ = OAh:Создать копию дескриптора Вход:  АХ = OOOAh

ВХ = селектор (сегмента кода или данных) Выход: если CF = О, АХ = селектор на сегмент данных с теми же базой и лимитом

INT31h,AX- OBh: Прочитать дескриптор

Вход: AX = OOOBh

ВХ = селектор

ES:EDI = селекторхмещение 8-байтного буфера Выход: если CF = 0, в буфер помещен дескриптор

INT31K AX = OCh: Загрузить дескриптор

Вход: AX = OOOCh

ВХ = селектор

ES:EDI = адрес 8-байтного дескриптора Выход: CF = Q, если не было ошибок

INT31 h,AX= ODh: Выделить определенный дескриптор Вход:   АХ = OOODh

ВХ = селектор на один из первых 16 дескрипторов

(значения селектора 04h - 7Ch) Выход: CF = 0, если нет ошибок (CF = 1 и АХ = 8011h, если этот дескриптор

занят)

Данного набора функций, а точнее пары функций QQ и ОСЬ, достаточно для того, чтобы полностью настроить режим flat (или любой другой) после переклю­чения в защищенный режим. Но прежде чем это осуществить, нам надо познако­миться с тем, как в DMPI сделан вызов обработчиков прерываний реального ре­жима, иначе наша программа просто не сможет себя проявить.