Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать
  1. Устанавливает различие между разными форматами дескрипторов;

  2. Специфицирует функциональное назначение сегмента.

Кроме дескрипторов сегментов данных и кодовых сегментов, обычно используемых прикладными программами, есть еще дескрипторы специальных сегментов, используемые операционной системой и дескрипторы вентилей (шлюзов). Табл. 3.4 содержит все значе­ния поля «тип» для системных сегментов и вентилей. |

Рис. 3.24. Поля защиты дескриптора сегментов (А - бит обращения; AVL - бит, доступный для использования программистом; В - «большой» бит; С - бит согласования; D - разряд по умол­чанию; DPL - уровень привилегий дескриптора; Е - бит прямой и обратной записи; G - бит дроб­ности; Р - бит присутствия; R - бит доступности для чтения; W - бит доступности для записи)

Заметим, что не все дескрипторы описывают сегменты; дескрипторы вентилей вызова имеют другую цель.

Поля типа дескрипторов сегментов данных и кодовых сегментов включают разряды, которые в дальнейшем определяют степень защиты сегмента (см. рис. 3.24.).

Разряд разрешения записи (W) в дескрипторе сегмента данных указывает, могут ли команды осуществлять запись в этот сегмент.

Разряд разрешения чтения (R) в дескрипторе кодового' сегмента указывает, разре­шено ли командам читать из сегмента (например, для доступа к константам, которые хранятся в командах). Кодовый сегмент, разрешенный для чтения, может быть прочитан двумя способами:

  1. через регистр CS, путем использования префикса переопределения CS;

  1. путем загрузки селектора дескриптора кодового сегмента в регистр сегментов дан­ных (DS, ES, FS или GS).

Проверка типа может быть использована для обнаружения ошибок программы, при ко­торых делается попытка использовать сегменты так, как это не предусмотрено програм­мистом. Процессор проверяет информацию типа по двум алгоритмам:

1) когда селектор дескриптора загружается в сегментный регистр; определенные сегмен­тные регистры могут содержать только определенные типы дескрипторов, например: CS-регистр может загружаться только селектором кодового сегмента; селекторы кодовых сег­ментов, для которых не разрешено чтение, не могут быть загружены в регистры сегментов данных; только селекторы сегментов данных с разрешением записи в сегмент могут быть загружены в регистр SS;

2) когда команда содержит обращение (неявное или явное) к сегментному регистру; оп­ределенные сегменты могут быть использованы командами лишь в определенных, напе­ред заданных случаях, например: никакая команда не может записывать информацию в кодовый сегмент; никакая команда не может записывать информацию в сегмент данных, если разряд разрешения записи не установлен; никакая команда не может прочитать кодо­вый сегмент, если не установлен разряд разрешения чтения.

Проверка предела1 (границы). Поле границы дескриптора сегмента используется про­цессором для того, чтобы предотвратить адресацию за пределы сегмента.

Процессор по-разному интерпретирует границу в зависимости от состояния разряда дробности (G), а для сегментов данных процессор по-разному интерпретирует границу в зависимости также от состояния разряда Е (разряд прямой или обратной записи) и разря­да В («большого»2 разряда — см. табл. 3.5).

Когда G = 0, истинная граница имеет значение поля 20-разрядной границы, которая ука­зана в дескрипторе. В этом случае граница может простираться от 0 до OFFFFFH (220- 1 ИЛИ 1 МбайТ).

Таблица 3.5