Научная литература
booksshare.net -> Добавить материал -> Физика -> Александров Е.К. -> "Микропроцессорные системы" -> 62

Микропроцессорные системы - Александров Е.К.

Александров Е.К., Грушвицкий Р.И., Купрянов М.С., Мартынов О.Е. Микропроцессорные системы — Спб.: Политехника, 2002. — 935 c.
ISBN 5-7325-0516-4
Скачать (прямая ссылка): mikroprocessorniesistemi2002.djvu
Предыдущая << 1 .. 56 57 58 59 60 61 < 62 > 63 64 65 66 67 68 .. 528 >> Следующая

то после содержимого EBP (или ВР) в стек заносится п = (18) слов (32- или
16-разрядных) из последовательно расположенных 32- или 16-разрядных ячеек
памяти, адрес которых задается содержимым регистра EBP (или ВР),
последовательно уменьшаемым на 4 (или 2).
При выполнении команды выхода из процедуры LEAVE содержимое регистра EBP
(или ВР) заносится в регистр ESP (или SP), восстанавливая значение
указателя стека, которое было до входа в процедуру с помощью предыдущей
команды ENTER. Затем из стека извлекается старое значение EBP (или ВР).
Таким образом, производится подготовка к возврату в предыдущую процедуру.
Обычно команда LEAVE является последней в программе реализации вызванной
процедуры, и следующая за ней команда RET обеспечивает возврат к
выполнению предыдущей процедуры.
2.3.3. КОМАНДЫ ОРГАНИЗАЦИИ ЗАЩИТЫ ПАМЯТИ
В эту группу объединены (см. табл. 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.
Команда ARPL выполняет сравнение значений двух младших разрядов (1-0)
операндов, первый из которых хранится в памяти или регистре, второй в
регистре. В качестве операндов используются селекторы, разряды (1-0)
которых содержат запрашиваемый уровень привилегий RPL, имеющий значение
от 00 (высший уровень) до 11 (низший уровень). Вторым операндом обычно
служит селектор текущей программы, который предварительно перегружается
из регистра CS в регистр, адресуемый командой ARPL. При этом младшие
разряды регистра будут содержать уровень привилегий текущей программы
CPL. Если RPL первого операнда-селектора меньше CPL, то значение RPL в
этом операнде устанавливается равным CPL, т. е. уровень его привилегий
Предыдущая << 1 .. 56 57 58 59 60 61 < 62 > 63 64 65 66 67 68 .. 528 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

Есть, чем поделиться? Отправьте
материал
нам
Авторские права © 2009 BooksShare.
Все права защищены.
Rambler's Top100

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed