10.7.2. Проверка типа сегмента

1. Загрузка селектора (и дескриптора) в регистр:

- в CS можно загрузить только сегмент кода;

- в DS, ES, FS, GS можно загрузить только селектор сегмента данных, сег­мента кода, доступного для чтения, или нулевой селектор;

- в SS можно загрузить только сегмент данных, доступный для записи;

- в LDTR можно загрузить только сегмент LDT;

- в TR можно загрузить только сегмент TSS.

2. Обращение к памяти:

- никакая команда не может писать в сегмент кода;

- никакая команда не может писать в сегмент данных, защищенный от записи;

- никакая команда не может читать из сегмента кода, защищенного от чтения;

- нельзя обращаться к памяти, если селектор в сегментном регистре нулевой.

3. Исполнение команды, использующей селектор в качестве операнда:

- дальние CALL и JMP могут выполняться только в сегмент кода, шлюз вы­зова, шлюз задачи или сегмент TSS;

- команда LLDT может обращаться только к сегменту LDT;

- команда LTR может обращаться только к сегменту TSS;

- команда LAR может обращаться только к сегментам кода и данных, шлю­зам вызова и задачи, LDT и TSS;

- команда LSL может обращаться только к сегментам кода, данных, LDTmTSS;

- элементами IDT могут быть только шлюзы прерываний, ловушек и задач.

4. Некоторые внутренние операции:

- при переключении задач целевой дескриптор может быть только TSS или шлюзом задачи;

- при передаче управления через шлюз сегмент, на который шлюз указыва­ет, должен быть сегментом кода (или TSS для шлюза задачи);

- при возвращении из вложенной задачи селектор в поле связи TSS дол­жен быть селектором сегмента TSS.