Глава 4. ДескрипторПрежде чем программа сможет обратиться по какому-либо адресу памяти, она должна определить набор сегментов, через которые она сможет получить доступ к памяти. биты: Эта структура поясняется на рис. 4-1: Как видите, значения предела и адреса сегмента "разбросаны" по всей структуре дескриптора. Это объясняется тем, что впервые защищённый режим появился в 16-разрядном процессоре 80286 и для совместимости с ним дескриптор не переделывали, а расширили дополнительными полями (биты с 49 по 63), благодаря чему программы, написанные для защищённого режима 286-го процессора работают и на 32-разрядных процессорах. descriptor: Байт прав доступа имеет следующий формат: биты: Байт старшей части предела и флагов GDXU имеет формат: биты: Элементы дескриптора.
Таблица 4-1. Тип сегмента
Примечания:
Например, Если вам нужно, чтобы процессор выполнял программу на нулевом уровне привилегий, то в DPL дескриптора сегмента кода, где размещается программа, должно быть значение 00B. Например, сегмент, имеющий предел, равный 2, при G=0 будет иметь размер в три байта, а при G=1 - 12Кб (3 страницы) Создавать дескрипторы достаточно легко. Все биты и битовые поля находятся в байте прав доступа access_rights (P, DPL, S, Тип, A ) и в старших четырёх разрядах байта limit_hi_and_flags (G, D, X, U). Дескрипторы по типу отличаются значениями байта прав доступа, по свойствам - битами G и D, остальное - значения базового адреса и предела. Когда мы будем рассматривать пример перехода в защищённый режим, вы увидите один из вариантов конструирования дескрипторов. |