Assembler - язык неограниченных возможностей
Проверка типа сегмента
Загрузка селектора (и дескриптора) в регистр:
в CS можно загрузить только сегмент кода;
в DS, ES, FS, GS можно загрузить только селектор сегмента данных, сегмента кода, доступного для чтения, или нулевой селектор;
в SS можно загрузить только сегмент данных, доступный для записи;
в LDTR можно загрузить только сегмент LDT;
в TR можно загрузить только сегмент TSS.
Обращение к памяти:
никакая команда не может писать в сегмент кода;
никакая команда не может писать в сегмент данных, защищенный от записи;
никакая команда не может читать из сегмента кода, защищенного от чтения;
нельзя обращаться к памяти, если селектор в сегментном регистре нулевой.
Исполнение команды, использующей селектор в качестве операнда:
дальние CALL и JMP могут выполняться только в сегмент кода, шлюз вызова, шлюз задачи или сегмент TSS;
команда LLDT может обращаться только к сегменту LDT;
команда LTR может обращаться только к сегменту TSS;
команда LAR может обращаться только к сегментам кода и данных, шлюзам вызова и задачи, LDT и TSS;
команда LSL может обращаться только к сегментам кода, данных, LDT и TSS;
элементами IDT могут быть только шлюзы прерываний, ловушек и задач.
Некоторые внутренние операции:
при переключении задач целевой дескриптор может быть только TSS или шлюзом задачи;
при передаче управления через шлюз сегмент, на который шлюз указывает, должен быть сегментом кода (или TSS для шлюза задачи);
при возвращении из вложенной задачи селектор в поле связи TSS должен быть селектором сегмента TSS.
Содержание раздела