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

Пароль



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

Забыли пароль?
Запросите новый здесь.
КОМАНДЫ ОРГАНИЗАЦИИ ЗАЩИТЫ ПАМЯТИ
ПРОЦЕССОРЫ ОБЩЕГО НАЗНАЧЕНИЯ И СИСТЕМЫ НА ИХ ОСНОВЕ

В эту группу объединены (см. табл. 2.24) команды, выполняющие пересылку содержимого регистров таблиц глобальных и локальных дескрипторов (GDTR и LDTR), дескрипторов прерываний (IDTR), младших 16 разрядов регистра управления CR0, содержащих слово состояния машины MSW (machine status word); команды, управляющие переключением задач; команды, изменяющие уровень привилегий, права доступа и границы сегментов; команды, проверяющие допустимость записи и считывания для адресованных сегментов.

Команда LGDT загружает из памяти в регистр GDTR 32-разрядный линейный адрес начала и 16-разрядную границу (размер) таблицы глобальных дескрипторов. В команде задается адрес младшего из загружаемых в регистр байтов. Команда SGDT посылает содержимое регистра GDTR в память, размещая его в ячейках памяти, начиная с указанного в команде адреса. Команды LIDT и SIDT выполняют аналогичные процедуры с содержимым регистра таблицы прерываний IDTR, определяющим 32-разрядный начальный адрес и 16-разрядную границу таблицы дескрипторов прерываний.

Команда LLDT загружает в регистр LDTR 16-разрядный селектор, определяющий выбор дескриптора локальной таблицы LDT из таблицы GDT. Загрузка производится из регистра или ячейки памяти, заданных в команде (адресуемых байтом MODRM). Команда SLDT посылает содержимое регистра LDTR в регистр или ячейку памяти, указанные в команде. Команда LTR загружает в регистр задачи TR из памяти или регистра 16-разрядный селектор, с помощью которого в таблице GDT выбирается дескриптор, определяющий сегмент состояния выполняемой задачи TSS. Команда STR посылает селектор из регистра TR в регистр или ячейку памяти, указанные в команде.

Команда CLTS сбрасывает в нуль бит TS в регистре управления CR0 (см. рис. 2.7, а), который служит признаком переключения задачи. Этот бит устанавливается в состояние TS = 1 при каждом переключении задачи.

Команды LAR и LSL загружают в регистр г16 или г32, указанный в команде, определенные фрагменты дескрипторов. Дескриптор выбирается с помощью селектора, содержащегося в памяти или регистре, которые адресуются вторым операндом r/m(16,32) команды. По команде LAR из выбранного дескриптора выделяется и загружается в регистр байт 5 дескриптора, называемый байтом доступа. Этот байт содержит информацию о наличии сегмента, его типе, уровне его привилегий DPL. Байт доступа загружается в разряды 8-15 адресованного регистра, остальные разряды которого принимают нулевое значение. Команда LSL загружает в регистр г(16,32) значение границы сегмента, которая определяется двадцатью разрядами L19-0 содержимого выбранного дескриптора. Если в дескрипторе бит дробности G = 0, то граница определяется в байтах, и в регистр загружается 20-разрядное число, указывающее число байтов в сегменте. Если в дескрипторе бит G = 1, то соответствующие двадцать разрядов дескриптора определяют число страниц в сегменте. В этом случае процессор преобразует число страниц в число байтов (1 страница = 4096 байт) и загружает полученное 32-разрядное число в заданный регистр.

После загрузки командами LAR или LSL байта доступа или границы сегмента в адресованный регистр устанавливается признак нуля ZF = 1 в регистре EFLAGS. Если же выбранный этими командами дескриптор недоступен из-за нарушения уровня привилегий или границы таблиц GDT, LDT, то устанавливается значение признака ZF = 0.

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

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

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

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