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


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


INT 31h, AX = 0 — Выделить локальные дескрипторы

Ввод: АХ = 0
СХ = количество необходимых дескрипторов
Вывод: если CF = 0, АХ = селектор для первого из заказанных дескрипторов


Эта функция только выделяет место в таблице LDT, создавая в ней дескриптор сегмента данных с нулевыми базой и лимитом, так что пользоваться им пока нельзя.


INT 31h, AX = 1 — Удалить локальный дескриптор

Ввод: АХ = 1
ВХ = селектор
Вывод: CF = 0, если не было ошибки


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


INT 31h, АХ = 2 — Преобразовать сегмент в дескриптор

Ввод: АХ = 2
ВХ = сегментный адрес (A000h — для видеопамяти, 0040h — для данных BIOS)
Вывод: если CF = 0, АХ = готовый селектор на сегмент, начинающийся с указанного адреса, и с лимитом 64 Кб


Так, программы в защищенном режиме могут обращаться к различным областям памяти ниже границы 1 Мб, например для прямого вывода на экран.


INT 31h, AX = 6 — Определить базу сегмента

Ввод: АХ = 6
ВХ = селектор
Вывод: если CF = 0, CX:DX = 32-битный линейный адрес начала сегмента


INT 31h, AX = 7 — Сменить базу сегмента

Ввод: АХ = 7
ВХ = селектор
CX:DX = 32-битная база
Вывод: CF = 0, если не было ошибок


INT 31h, AX = 8 — Сменить лимит сегмента

Ввод: АХ = 8
ВХ = селектор
CX:DX = 32-битный лимит (длина сегмента минус 1)
Вывод: CF = 0, если не было ошибок
(чтобы определить лимит сегмента, можно пользоваться командой LSL)


INT 31h, AX = 9 — Сменить права доступа сегмента

Ввод: АХ = 9
ВХ = селектор
CL = права доступа/тип (биты 15 – 8 слова 2 дескриптора)
СН = дополнительные права (биты 7 – 4 соответствуют битам 7 – 4 слова 3 дескриптора, биты 3 – 0 игнорируются)
Вывод: CF = 0, если не было ошибок
(чтобы определить права доступа сегмента, можно пользоваться командой LAR)
<


Начало  Назад  Вперед