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.


  • Содержание раздела