December 17 2017 04:28:28
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
Формат селектора
ФОРМАТЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ И ВЫПОЛНЕНИЕ ОПЕРАЦИЙ

Поле INDEX (биты 3-15) служит индексом для выбора одного из 8192 дескрипторов, содержащихся в таблице.

15










3 2 1 0
INDEX TI PRL

Рис. 2.39. Формат селектора

«»Регистр LDTR (см. рис. 2.6) содержит 16-разрядный селектор, определяющий размещение в GDT дескриптора используемой таблицы LDT. Поле INDEX в этом указателе содержит смещение, которое используется для формирования адреса дескриптора таблицы LDT, выбираемого из GDT. Дескриптор LDT содержит 32-разрядный базовый адрес используемой LDT, ее 16-разрядную фаницу и атрибуты, определяющие права доступа к таблице. При зафузке в LDTR селектора таблицы LDT соответствующий дескриптор выбирается из GDT и хранится во внутреннем программно недоступном регистре процессора - «теневом» регистре LDTR (рис. 2.40).

Загрузка регистров GDTR, LDTR из памяти, а также сохранение в памяти их содержимого реализуется с помощью команд LGDT, LLDT и SGDT, SLDT. Загрузка селекторов в регистры сегментов данных DS, ES, FS, GS, SS производится командами LDS, LES, LFS, LGS, LSS. Регистр CS является программно недоступным, поэтому прямая загрузка в него (или выгрузка) селекторов для выбора сегментов программ невозможна. Начальное содержимое CS устанавливается при инициализации системы и затем изменяется программно при выполнении команд межсегментных вызовов и переходов CALL, JUMP и при переключении задач.

img026

Если селектор, зафуженный в сегментный регистр CS, SS, DS, ES, FS или GS, обращается к таблице GDT (бит TI = 0) или LDT (бит TI = 1), то его индекс, сдвинутый на три разряда влево(т. е. умноженный на 8 - число байтов в дескрипторе), служит в качестве относительного адреса (смещения) для формирования адреса дескриптора в данной таблице (рис. 2.40). Это смещение сравнивается с границей таблицы, хранящейся в GDTR или «теневом» регистре LDTR. Если смещение превышает границу, т. е. выходит за пределы таблицы GDT, то вырабатывается прерывание типа #GP («нарушение защиты»). Если нарушения границы нет, то смещение прибавляется к содержащемуся в GDTR базовому адресу, в результате чего образуется адрес младшего байта выбираемого дескриптора. При обращении к таблице LDT проверяются также права доступа к данной таблице, которые устанавливаются также, как для выбираемых сегментов.

Селектор с нулевым значением полей INDEX и TI (разряды 2-15, рис. 2.39) называется нуль-индикатором. Он обеспечивает обращение к первому дескриптору в таблице GDT (нуль-дескриптор). Загрузка такого селектора в регистр CS или SS для выборки сегмента команд или стека вызывает исключение типа #GP («нарушение общей защиты»). Так как при инициализации системы обычно производится установка нулевых начальных значений дескрипторов и селекторов, то данное исключение предотвращает возможность запуска рабочих программ до загрузки операционной системой необходимых сегментов и дескрипторов.

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.03 секунд 2,298,862 уникальных посетителей