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


Адресация в защищенном режиме


Прежде чем познакомиться с программированием в защищенном режиме, рассмотрим механизм адресации, применяющийся в нем. Так же как и в реальном режиме, адрес складывается из адреса начала сегмента и относительного смещения, но если в реальном режиме адрес начала сегмента просто лежал в соответствующем сегментном регистре, деленый на 16, то в защищенном режиме не все так просто. В сегментных регистрах находятся специальные 16-битные структуры, называемые селекторами и имеющие следующий вид:

    биты 15 – 3: номер дескриптора в таблице

    бит 2: индикатор таблицы 0/1 — использовать GDT/LDT

    биты 1 – 0: уровень привилегий запроса (RPL)

Уровень привилегий запроса — это число от 0 до 3, указывающее уровень защиты сегмента, для доступа к которому используется данный селектор. Если программа имеет более высокий уровень привилегий, при использовании этого сегмента привилегии понизятся до RPL. Уровни привилегий и весь механизм защиты в защищенном режиме нам пока не потребуется.

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

    слово 3 (старшее):

    биты 15 – 8: биты 31 – 24 базы

    бит 7: бит гранулярности (0 — лимит в байтах, 1 — лимит в 4-килобайтных единицах)

    бит 6: бит разрядности (0/1 — 16-битный/32-битный сегмент)

    бит 5: 0

    бит 4: зарезервировано для операционной системы

    биты 3 – 0: биты 19 – 16 лимита

слово 2:

    бит 15: бит присутствия сегмента

    биты 14 – 13: уровень привилегий дескриптора (DPL)

    бит 12: тип дескриптора (0 — системный, 1 — обычный)

    биты 11 – 8: тип сегмента

    биты 7 – 0: биты 23 – 16 базы




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