ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 8 - 254 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єIRET/IRETD Возврат из прерывания (или из задачи в Защищенномє є режиме) є ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: ЪДДДДДДДДї IRET і11001111і АДДДДДДДДЩ ФУНКЦИЯ: IF (ADRESS SIZE = 32) THEN BEGIN POP EIP; ( IRET снимает со стека EIP или IP) POP CS; ( IRET также снимает со стека CS) POP EFLAGS; ( IRET также снимает со стека EFLAG или FLAG END ELSE BEGIN POP IP; ( IRET снимает со стека EIP или IP) POP CS; ( IRET также снимает со стека CS) POP FLAGS; ( IRET также снимает со стека EFLAG или FLAG) END ОПИСАНИЕ: IRET обычно появляется в конце программы обслуживания прерываний для контроля возврата к прерванной программе. IRET снимает со стека указатель команды и код регистра сегмента, т.о. выполняя межсегментный возврат. Она также снимает со стека флаг регистра, который содержит состояние IF, предшествующего прерыванию. Когда IRET имеет место в реальном режиме или в режиме виртуальном 8086, то указатель команды и регистр кода сегмента, снятые со стека, определяют адрес, куда должно возвратиться выполнение главной программы. Когда IRET имеет место в защищенном режиме, действия, выполняемые 80386 могут быть довольно сложными и должны соответствовать одному из 3-х состояний: 1.сегмент кода находится на текущем уровне привилегии (DPL=CPL); 2.сегмент кода находится на более привилегированном уровне (DPL< CPL) или 3.сегмент состояния задач. Команда IRET также годится для окончания (завершения) решаемой задачи, где она вызывает переключение к предыдущему заданию (условие решаемой задачи обозначается NT=1 в регистре EFLAG). ПРИМЕР: IRET ДЕТАЛИ ЗАЩИЩЕННОГО РЕЖИМА: IF флаг режима виртуального 8086 (VM)=1 и IOPL<3 THEN Исключение "по стандартной защите" (код ошибки 0000h) (для эмуляции команды разрешить супервизор защищенного режима) ELSE IF флаг Вложенной Задачи (NT=1) THEN go to (перейти) к ВОЗВРАТУ ЗАДАЧИ ELSE IF флаг режима виртуального 8086 (VM)=1 в имидже флага на стеке THEN goto ВОЗВРАТ СТЕКА К РЕЖИМУ ВИРТУАЛЬНОМУ 8086 ELSE goto ВОЗВРАТ СТЕКА. ВОЗВРАТ СТЕКА К РЕЖИМУ ВИРТУАЛЬНОМУ 8086(Прерванная процедура была в режиме виртуальном 8086) - 255 - CPL должен=0 ELSE Исключение "по стандартной защите" (код ошибки селектора сегмента). Вершина стека 36 байтов уровня 0 должна быть в пределах ELSE Отказ стека (код ошибки 0000h) Выполнить возврат CS селектора и соответствующего дескриптора: Селектор не должен быть нулем ELSE Исключение "по стандартной защите" (код ошибки 0000h). Индекс селектора должен быть в пределах таблицы ELSE Исключение "по стандартной защите" (код ошибки селектора возврата). Байт Права Доступа (AR) должен означать сегмент кода ELSE Исключение "по стандартной защите" (код ошибки селектора возврата). DPL сегмента кода должен = 3 ELSE Исключение "по стандартной защите" (код ошибки селектора возврата). Сегмент кода должен существовать ELSE Исключение "Данные отсутствуют" (код ошибки селектора возврата) Выполнить SS селектор возврата и соответствующего дескриптора: Селектор не должен быть нулем ELSE Исключение "по стандартной защите" (код ошибки 0000h). Индекс селектора должен быть в пределах таблицы ELSE Исключение "по стандартной защите" (код ошибки селектора стека). RPL селектор должен = RPL селектора возврата ELSE Исключение "по стандартной защите" (код ошибки селектора стека). Байт Права Доступа (AR) должен означать разрешение записи сегмента ELSE Исключение "по стандартной защите" (код ошибки селектора стека). DPL сегмента стека должен = 3 ELSE Исключение "по стандартной защите" (код ошибки селектора возврата). Сегмент стека должен существовать ELSE Исключение "Данные отсутствуют" (код ошибки селектора возврата) Указатель команды должен быть в пределах сегмента кода ELSE Исключение "по стандартной защите" (код ошибки 0000h). Загрузить EFLAGS SS:[ESP+8] (Устанавливается флаг режима виртуального 8086 (VM) в прерываемой программе) EIP := Pop(). CS :=Pop().(CS и все другие величины регистра сегмента, снятые со стека, ведут себя точно также как в 8086 при VM=1) throwaway := Pop(). (Выброс уже загруженного EFLAGS) ES := Pop(). (Снять со стека 4 байта, выбросить 2 верхних байта) DS := Pop(). (Снять со стека 4 байта, выбросить 2 верхних байта) FS := Pop(). (Снять со стека 4 байта, выбросить 2 верхних байта) GS := Pop(). (Снять со стека 4 байта, выбросить 2 верхних байта) IF CS.RPL > CPL THEN TempESP := Pop(). TempSS := Pop(). SS:ESP := TempSS:TempESP. ВОЗВРАТ ЗАДАЧИ: Выполнить Селектор Обратной Связи в TSS, адрессованный текущим Регистром Задач (TR): Должен глобально описываться в бите индикатора глобально/локальной таблицы (TI) ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). Индекс должен быть в пределах GDT ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). Байт Права Доступа (AR) должен описывать Сегмент Состояния Задачи ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). - 256 - Новый TSS должен быть занят ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). Задача должна существовать ELSE исключение "Данные отсутствуют" (код ошибки селектора TSS). ПЕРЕКЛЮЧАЕМЫЕ ЗАДАЧИ без вложения задачи, на TSS, определяемый селектором обратной связи. Отметить задачу, из которой только что вышли, как НЕЗАНЯТУЮ. Указатель команды должен быть в пределах сегмента кода ELSE Исключение "по стандартной защите" (код ошибки 0000h). ВОЗВРАТ СТЕКА: IF размер операнда = 32 THEN 3-е слово на стеке должно быть в пределах стека ELSE исключение "Отказ стека" (код ошибки 0000h) ELSE 2-е слово на стеке должно быть в пределах стека ELSE исключение "Отказ стека" (код ошибки 0000h) Возврат RPL селектора CS должен быть > CPL Исключение "по стандартной защите" (код ошибки селектора возврата). IF RPL селектора возврата = CPL THEN goto ВОЗВРАТ К ТАКОМУ ЖЕ УРОВНЮ ELSE goto ВОЗВРАТ К ВЫХОДНОМУ УРОВНЮ (возврат к уровню меньшей привилегии) ВОЗВРАТ К ТАКОМУ ЖЕ УРОВНЮ: IF размер операнда = 32 THEN Верхние 12 байт на стеке должны быть в пределах ELSE исключение "Отказ стека" (код ошибки 0000h). Возврат селектора CS (на ESP+4) не должен быть нулем ELSE исключение "по стандартной защите" (код ошибки 0000h). ELSE Верхние 6 байт на стеке должны быть в пределах ELSE исключение "Отказ стека" (код ошибки 0000h). Возврат селектора CS (на ESP+2) не должен быть нулем ELSE исключение "по стандартной защите" (код ошибки 0000h). Индекс селектора должен быть в пределах его таблицы дескриптора ELSE исключение "по стандартной защите" (код ошибки селектора возврата) Байт Права Доступа (AR) должен означать сегмент кода ELSE исключение "по стандартной защите (код ошибки селектора возврата). IF несоответствующий сегмент кода THEN DPL сегмента кода должен = CPL ELSE исключение "по стандартной защите" (код ошибки селектора возврата). IF соответствующий сегмент кода THEN DPL сегмента кода должен быть > CPL ELSE исключение "по стандартной защите" (код ошибки селектора возврата). Сегмент должен существовать ELSE Исключение "Данные отсутствуют" (код ошибки селектора возврата) Указатель команды должен быть в пределах сегмента кода ELSE Исключение "по стандартной защите" (код ошибки 0000). IF размер операнда = 32 THEN Снять со стека CS:EIP. Загрузить кэш дескриптора CS новым дескриптором сегмента кода. Загрузить EFLAGS 3-им DWORD из стека. Увеличить ESP на 12, чтобы учесть величины, снятые со стека. ELSE - 257 - Загрузить кэш дескриптора CS новым дескриптором сегмента кода. Загрузить EFLAGS 3-им DWORD на стеке. Увеличить SP на 6. ВОЗВРАТ К ВЫХОДНОМУ УРОВНЮ: IF размер операнда = 32 THEN Верхние 20 байт на стеке должны быть в пределах ELSE исключение "Отказ стека" (код ошибки 0000h). ELSE Верхние 10 байт на стеке должны быть в пределах ELSE исключение "Отказ стека" (код ошибки 0000h). Выполнить возврат CS селектора и соответствующего дескриптора: Селектор не должен быть 0 ELSE исключение "по стандартной защите" (код ошибки 0000h). Индекс селектора должен быть в пределах его таблицы дескриптора ELSE исключение "по стандартной защите" (код ошибки селектора возврата) Байт Права Доступа (AR) должен означать сегмент кода ELSE исключение "по стандартной защите (код ошибки селектора возврата). IF несоответствующий сегмент кода THEN DPL сегмента кода должен = CS селектора RPL ELSE исключение "по стандартной защите" (код ошибки селектора возврата). IF соответствующий сегмент кода THEN DPL сегмента кода должен быть < CPL ELSE исключение "по стандартной защите" (код ошибки селектора возврата). Сегмент должен существовать ELSE Исключение "Данные отсутствуют" (код ошибки селектора возврата) Выполнить возврат CS селектора и соответствующего дескриптора: Селектор не должен быть 0 ELSE исключение "по стандартной защите" (код ошибки 0000h). Индекс селектора должен быть в пределах ELSE исключение "по "по стандартной защите" (код ошибки селектора стека) Селектор RPL должен = RPL селектора возврата ELSE исключение "по стандартной защите" (код ошибки селектора стека) Байт Права Доступа (AR) должен означать разрешение записи сегмента кода ELSE исключение "по стандартной защите (код ошибки селектора стека). DPL сегмента стека должен = RPL возвращаемого CS селектора RPL ELSE исключение "по стандартной защите" (код ошибки селектора возврата). Сегмент должен существовать ELSE Исключение "Данные отсутствуют" (код ошибки селектора возврата) Указатель команды должен быть в пределах сегмента кода ELSE Исключение "по стандартной защите" (код ошибки 0000). IF размер операнда = 32 THEN Загрузить CS:EIP из стека. Загрузить EFLAGS величинами в SS:[ESP + 8]. ELSE Загрузить CS:IP из стека. Загрузить EFLAGS величинами в SS:[SP + 4]. Загрузить CS:EIP из стека. Установить CPL в RPL возвращаемого CS селектора Загрузить кэш дескриптора CS дескриптором CS. Загрузить кэш дескриптора SS дескриптором SS. FOR каждого ES,FS,GS,DS DO - 258 - IF величина текущего RPL регистра сегмента неверна (недействительна) для использования на выходном уровне THEN обнулить регистр сегмента и очистить соответствующие верные биты флага. Для того чтобы быть правильным, устанавливающий регистр должен соответствовать следующим требованиям: Индекс селектора должен быть в пределах таблицы дескриптора, Байт Права Доступа (AR) должен означать сегмент данных или читаемый сегмент кода, IF сегмент-это данные или несоответствующий код, THEN DPL должен быть > CPL или DPL должен быть > RPL. ФЛАГИ: Флаги не задействуются до тех пор, пока переключатель задач не окажется в защищенном режиме. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Прерывание 13 имеет место, если любая часть операнда в памяти является исполнительным адресом, большим, чем FFFFh в сегментах CS, DS, ES, FS или GS. Прерывание 12 имеет место, если любая часть операнда в памяти является исполнительным адресом, большим, чем FFFFh в стековом сегменте SS. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключительная ситуация "по стандартной защите" (исключение 13) идет с кодом ошибки 0000h для операндов сегментов памяти CS, DS, ES, FS или GS, если операнд источника является нечитаемым сегментом кода, или если любая часть операнда является исполнительным адресом выше предела сегмента. Исключение стека идет с кодом ошибки 0000h для операндов в сегменте стека, если любая часть операнда является исполнительным адресом выше предела сегмента. Исключение стека с кодом ошибки селектора сегмента имеет место, если операнд в памяти находится в сегменте SS и маркирован, как отсутствующий. Исключительная ситуация "данные отсутствуют" (исключение 11) имеет место с кодом ошибки селектора сегмента, если операнд в памяти находится в сегменте DS, ES, FS, GS и отмечен несуществующим. Исключительная ситуация "данные отсутствуют" имеет место с кодом ошибки селектора сегмента, если операнд в памяти находится в сегменте DS, ES, FS, GS и отмечен несуществующим. Исключительная ситуация "отказ страницы" (исключение 14) с кодом ошибки кода отказа и линейным адресом отказа находится в регистре CR2. Исключительная ситуация Сегмента Состояния Задач (исключение 10) с кодом ошибки селектора для несогласованностей в Сегменте Состояния Задач имеет место, если задействован переключатель задач. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Такие же, как в реальном режиме, но имеют место в защищенном режиме при уровне привилегии 0. Формат стека с уровнем привилегии 0 после исключения (с кодом ошибки) или прерывания (без кода ошибки) показан на рис.12.2.Также Исключительная ситуация "отказ" страницы" с кодом ошибки кода отказа и линейным адресом отказа находится в регистре CR2. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 259 - ЙНННННННННННННННННННННННННННННННННННННННННН» єJCC Переход при условии "истина"є ИННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: JCC Последовательность байт(ов) байт 0 байт 1 8-битовое 0111cccc 8-битовое смещение смещение Полное смещение 00001111 1000сссс C C C C Условие 0 0 0 0 Переполнение 0 0 0 1 Нет переполнения 0 0 1 0 Ниже/Не выше или Равно 0 0 1 1 Не ниже/Выше или Равно 0 1 0 0 Равно/Ноль 0 1 0 1 Не равно/Не ноль 0 1 1 0 Ниже или Равно/Не выше 0 1 1 1 Не ниже или Равно/Выше 1 0 0 0 Знак/Отрицательный 1 0 0 1 Не знак/Положительный 1 0 1 0 Паритет/Четный паритет 1 0 1 1 Не паритет/Нечетный паритет 1 1 0 0 Меньше/Не больше или Равно 1 1 0 1 Не меньше/Больше или Равно 1 1 1 0 Меньше или Равно/Не больше 1 1 1 1 Не меньше или Равно/Больше ФУНКЦИЯ: IF (CONDITION = TRUE) THEN EIP <-- EIP + DISPLACEMENT; (Преобразовать ветвь, если условие истинно) ОПИСАНИЕ: JCC обеспечивает условное ответвление внутри сегмента текущего кода. Если условие верно, смещение, данное как операнд, добавляется к указателю команды для того, чтобы начать выполнение при новом офсете. Заметим, что смещение операнда - это или 8-битовое знаковое число, или полное число знакового офсета, при этом полный офсет является 16-битовым, если размер адреса-16 бит, или 32-битовым, если размер адреса-32 бита. Т.о. полные смещения позволяют переходы везде в сегменте текущего кода. Поскольку эти команды условных переходов могут разветвляться только внутри сегмента, регистр кода сегмента не задействован. - 260 - ПРИМЕР: JNE LABEL_D ФЛАГИ: Флаги не задействованы. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Прерывание 13 имеет место, если любая часть команды приемника является исполнительным адресом, большим, чем FFFFh в сегменте CS. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключительная ситуация "по стандартной защите" (исключение 13) с кодом ошибки 0000h для приемника в сегменте памяти CS имеет место, если если любаячасть команды приемника является исполнительным адресом выше предела сегмента. Исключительная ситуация "данные отсутствуют" (исключение 11) с кодом ошибки селектора сегмента имеет место, если операнд в памяти обозначен в сегменте CS, как отсутствующий. Исключительная ситуация "отказ страницы" (исключение 14) с кодом ошибки кода отказа и линейным адресом отказа находится в регистре CR2. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Такие же, как в реальном режиме, но имеют место в защищенном режиме при уровне привилегии 0. Формат стека с уровнем привилегии 0 после исключения (с кодом ошибки) или прерывания (без кода ошибки) показан на рис.12.2.Также Исключительная ситуация "отказ" страницы" с кодом ошибки кода отказа и линейным адресом отказа находится в регистре CR2. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ЙННННННННННННННННННННННННННННННННННН» єJCXZ/JECXZ Переход, если CX/ECX 0є ИНННННННННННННННННННННННННННННННННННј ФОРМАТ: JCXZ/JECXZ Байт 0 Байт 1 8-битовое ЪДДДДДДДДДДДї смещение і 11100011 і8-битовое смещение АДДДДДДДДДДДЩ ФУНКЦИЯ: IF (ECX = 0) THEN EIP <-- EIP + DISPLACEMENT; (Смещение осуществляется только 8 битами) ОПИСАНИЕ: JECXZ/JCXZ обеспечивает условное разветвление внутри сегмента текущего кода на базе регистра ECX или CX (в зависимости от размера операнда). Если состояние регистра-0, то смещение, данное как операнд, добавляется к указателю команды для того, - 261 - чтобы начать выполнение нового офсета. Заметим, однако, что смещение представляет собой 8-битовое знаковое число, ограничивающее смещение диапазоном от -128 до +127. Т.к. эта команда условного перехода может ветвиться только внутри сегмента, регистр сегмента кода не задействован. ПРИМЕР: JECXZ LABEL_E ФЛАГИ: Флаги не задействованы. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Прерывание 13 имеет место, если любая часть команды приемника является исполнительным адресом, большим, чем FFFFh в сегменте CS. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключительная ситуация "по стандартной защите" (исключение 13) с кодом ошибки 0000h для приемника в сегменте памяти CS имеет место, если если любаячасть команды приемника является исполнительным адресом выше предела сегмента. Исключительная ситуация "данные отсутствуют" (исключение 11) с кодом ошибки селектора сегмента имеет место, если операнд в памяти обозначен в сегменте CS, как отсутствующий. Исключительная ситуация "отказ страницы" (исключение 14) с кодом ошибки кода отказа и линейным адресом отказа находится в регистре CR2. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Такие же, как в реальном режиме, но имеют место в защищенном режиме при уровне привилегии 0. Формат стека с уровнем привилегии 0 после исключения (с кодом ошибки) или прерывания (без кода ошибки) показан на рис.12.2.Также Исключительная ситуация "отказ" страницы" с кодом ошибки кода отказа и линейным адресом отказа находится в регистре CR2. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 262 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єJMP Переход к коду (или к задаче в Защищенном режиме)є ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: JMP Последовательность байт(ов) байт 0 байт 1 Прямое,короткое 1 1 1 0 1 0 1 1 8-битовое смещение смещение Прямое Полное смещение 1 1 1 0 1 0 0 1 Полное смещение Косвенный по абсолютно- 1 1 1 1 1 1 1 1 mod: 1 0 0 : r/m му офсету Прямой 1 1 1 0 1 0 1 0 Абсолютный офсет, Межсегментный Селектор сегмента Косвенный 1 1 1 1 1 1 1 1 mod: 1 0 1 : r/m межсегментный ФУНКЦИЯ: RELOAD EIP FROM OPERAND; RELOAD CS FROM OPERAND; ОПИСАНИЕ: JMP внутри сегмента текущего кода модифицирует указатель команды для того, чтобы начать выполнение нового офсета. Когда JMP выполняется внутри сегмента текущего кода, регистр сегмента кода не задействован. Когда межсегментный JMP возникает в реальном режиме или в режиме виртуальном 8086, указатель команды и регистр сегмента кода оба заменяются величинами операнда, чтобы начать выполнение в подпрограмме. Когда JMP имеет место в защищенном режиме, действия, выполняемые 80386, могут быть довольно сложными, согласно одному из состояний селектора приемника: 1.сегмент кода находится на текущем уровне привилегии (DPL=CPL), 2.сегмент согласованного кода находится на более привилегированном уровне (DPL < CPL), 3.переключатель вызова, 4.сегмент состояния задачи или 5.переключатель задачи. ПРИМЕР: JMP LABEL_A ДЕТАЛИ ЗАЩИЩЕННОГО РЕЖИМА: JMP ЗАЩИЩЕННОГО РЕЖИМА К СЕГМЕНТУ НЕСООТВЕТСТВУЮЩЕГО (т.е. регулярного) КОДА: - 263 - RPL селектора приемника должен быть численно < CPL ELSE Исключительная ситуация "по стандартной защите" (код ошибки селектора сегмента кода). Дескриптор DPL должен быть численно = CPL ELSE Исключение "по стандартной защите" (код ошибки селектора сегмента кода). Селектор должен быть в пределах таблицы своего дескриптора ELSE исключение "по стандартной защите" (код ошибки селектора сегмента кода) Сегмент должен существовать ELSE Исключение "Данные отсутствуют" (код ошибки селектора сегмента кода). Указатель команды должен быть в пределах сегмента кода ELSE Исключение "по стандартной защите" (код ошибки 0000h). Загрузить дескриптор сегмента кода в кэш дескриптора CS (не видим для программиста). Загрузить регистр CS селектором сегмента кода. Загрузить EIP нулевым расширением (новый офсет). IF размер операнда = 16 THEN EIP := EIP AND 0000FFFFh. Установить поле RPL регистра CS в CPL. JMP ЗАЩИЩЕННОГО РЕЖИМА К СЕГМЕНТУ СООТВЕТСТВУЮЩЕГО КОДА: DPL дескриптор должен быть численно < CPL ELSE Исключение "по стандартной защите" (код ошибки селектора сегмента кода). Селектор должен быть в пределах таблицы своего дескриптора ELSE исключение "по стандартной защите" (код ошибки селектора сегмента кода) Индекс сегмента должен существовать ELSE Исключение "Данные отсутствуют" (код ошибки селектора сегмента кода). Указатель команды должен быть в пределах сегмента кода ELSE Исключение "по стандартной защите" (код ошибки 0000h). Загрузить дескриптор сегмента кода в кэш дескриптора CS (не видим для программиста). Загрузить регистр CS селектором сегмента кода. Загрузить EIP нулевым расширением (новый офсет). IF размер операнда = 16 THEN EIP := EIP AND 0000FFFFh. Установить поле RPL регистра CS в CPL. JMP ЗАЩИЩЕННОГО РЕЖИМА К ПЕРЕКЛЮЧАТЕЛЮ ВЫЗОВА: DPL переключателя вызова должен быть численно > CPL ELSE Исключение "по стандартной защите" (код ошибки селектора переключателя вызова). DPL переключателя вызова должен быть численно > RPL ELSE Исключение "по стандартной защите" (код ошибки селектора переключателя вызова). Переключатель вызова должен существовать ELSE Исключение "Данные отсутствуют" (код ошибки селектора переключателя вызова). Выполнить поиск селектора сегмента кода в переключателе вызова: Селектор кода не должен быть нулем ELSE исключение "по стандартной защите" (код ошибки 0000h). Индекс Селектора должен быть в пределах таблицы своего дескриптора ELSE исключение "по стандартной защите" (код ошибки селектора сегмента кода) Байт AR выбранного дескриптора должен означать сегмент кода ELSE исключение "по стандартной защите" (код ошибки селектора сегмента кода). - 264 - IF несогласованный сегмент кода THEN DPL выбранного дескриптора должен быть < CPL ELSE Исключение "по стандартной защите" (код ошибки селектора сегмента кода) ELSE DPL выбранного дескриптора должен быть < CPL ELSE Исключение "по стандартной защите" (код ошибки селектора сегмента кода) Установить поле RPL регистра CS в CPL. Сегмент кода должен существовать ELSE Исключение "Данные отсутствуют"(код ошибки селектора сегмента кода). Указатель команды должен быть в пределах сегмента кода ELSE Исключение "по стандартной защите" (код ошибки 0000h). IF размер операнда = 32 THEN Загрузить CS:EIP из переключателя вызова. ELSE Загрузить CS:IP из переключателя вызова. Загрузить дескриптор CS в кэш дескриптора CS. Установить поле RPL регистра CS в CPL. JMP ЗАЩИЩЕННОГО РЕЖИМА К ПЕРЕКЛЮЧАТЕЛЮ ЗАДАЧ: Переключатель задачи DPL должен быть > CPL ELSE исключение "недопустимый TSS" (код ошибки селектора переключателя). Переключатель вызова DPL должен быть > RPL ELSE исключение "недопустимый TSS" (код ошибки селектора переключателя). Переключатель вызова должен существовать ELSE исключение "Данные отсутствуют" (код ошибки селектора переключателя). Проверить селектор TSS, данный в переключателе задач: Должен отличаться Таблица Глабального Дескриптора (GDT) в бите Индикатора Таблицы (TI) ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). Индекс должен быть в пределах GDT ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). Байт Права Доступа дескриптора TSS должен быть незанят ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). Сегмент состояния Задачи должен существовать ELSE исключение "Данные отсутствуют" (код ошибки селектора TSS). ПЕРЕКЛЮЧАЕМЫЕ ЗАДАЧИ без вложения задачи, сбросить бит NT в EFLAG) для задачи, данной селектором TSS. EIP должен быть в пределах сегмента кода ELSE исключение "недопустимый TSS" (код ошибки 0000h) JMP ЗАЩИЩЕННОГО РЕЖИМА К СЕГМЕНТУ СОСТОЯНИЯ ЗАДАЧИ: TSS DPL должен быть > CPL ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). TSS DPL должен быть > RPL ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). Байт Права Доступа дескриптора TSS должен быть незанят TSS ELSE исключение "недопустимый TSS" (код ошибки селектора TSS). Переключатель задач должен существовать ELSE исключение "Данные отсутствуют" (код ошибки селектора переключателя). - 265 - ПЕРЕКЛЮЧАЕМЫЕ ЗАДАЧИ без вложения задачи, сбросить бит NT в EFLAG) для задачи, данной селектором TSS. EIP должен быть в пределах сегмента кода ELSE исключение "недопустимый TSS" (код ошибки 0000h) ФЛАГИ: Флаги не задействуются до тех пор, пока переключатель задач не окажется в защищенном режиме. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Прерывание 13 имеет место, если любая часть операнда в памяти является исполнительным адресом, большим, чем FFFFh в сегментах CS, DS, ES, FS или GS. Прерывание 12 имеет место, если любая часть операнда в памяти является исполнительным адресом, большим, чем FFFFh в стековом сегменте SS. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключительная ситуация "по стандартной защите" (исключение 13) идет с кодом ошибки 0000h для операндов сегментов памяти CS, DS, ES, FS или GS, если операнд источника является нечитаемым сегментом кода, или если любая часть операнда является исполнительным адресом выше предела сегмента. Исключение стека идет с кодом ошибки 0000h для операндов в сегменте стека, если любая часть операнда является исполнительным адресом выше предела сегмента. Исключение стека с кодом ошибки селектора сегмента имеет место, если операнд в памяти находится в сегменте SS и маркирован, как отсутствующий. Исключительная ситуация "данные отсутствуют" (исключение 11) имеет место с кодом ошибки селектора сегмента, если операнд в памяти находится в сегменте DS, ES, FS, GS и отмечен несуществующим. Исключительная ситуация "данные отсутствуют" имеет место с кодом ошибки селектора сегмента, если операнд в памяти находится в сегменте DS, ES, FS, GS и отмечен несуществующим. Исключительная ситуация "отказ страницы" (исключение 14) с кодом ошибки кода отказа и линейным адресом отказа находится в регистре CR2. Исключительная ситуация Сегмента Состояния Задач (исключение 10) с кодом ошибки селектора для несогласованностей в Сегменте Состояния Задач имеет место, если задействован переключатель задач. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Такие же, как в реальном режиме, но имеют место в защищенном режиме при уровне привилегии 0. Формат стека с уровнем привилегии 0 после исключения (с кодом ошибки) или прерывания (без кода ошибки) показан на рис.12.2.Также Исключительная ситуация "отказ" страницы" с кодом ошибки кода отказа и линейным адресом отказа находится в регистре CR2. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 266 - ЙННННННННННННННННННННННННННННННННННННННННННН» єLAHF Загрузка AH регистра из EFLAG.є ИНННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: ЪДДДДДДДДї LAHF і10011111і АДДДДДДДДЩ ФУНКЦИЯ: AH <Д низкий байт регистра EFLAG ОПИСАНИЕ: LAHF загружает AH регистр наиболее низким байтом EFLAG. Из MSB в LSB AH принимает величину SF, ZF, неопределенную, AF, неопределенную, PF, неопределенную, CF. ВРЕМЯ ВЫПОЛНЕНИЯ: 2 тактаэ 0,1 мкс при 20 МГц. ФЛАГИ: Ни один не задействован. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Нет. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Нет. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Нет. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 267 - ЙННННННННННННННННННННННННННННННННННННН» єLAR Право доступа загрузкиє ИНННННННННННННННННННННННННННННННННННННј ФОРМАТ. LAR байт 0 байт 1 байт 2 - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 1 1 1 1 0 0 0 0 0 0 1 0 mоd: reg : r/m ФУНКЦИЯ: IF ACCESS IS VALID GENERAL REGISTER <-- ACCESS RIGHTS OF GIVEN SELECTOR; ZF <-- 1; ELSE ZF <-- 0; ОПИСАНИЕ: LAR-команда защищенного режима. LAR хранит маскируемую форму второго DWORD дескриптора селектора источника, если дескриптор является видимым в CPL (ослаблено селекторным RPL). Второе маскирование DWORD выполняется посредством сложения DWORD с кодом 00F0FF00h. Если размером операнда команды является WORD, то в этом случае загружается только WORD (меньшую часть DWORD обычно маскируют). Маскируемая величина - FF00h. Если тип дескриптора доступен CPL (ослабленным посредством RPL селектора), то ZF устанавливается, в противном случае ZF сбрасывается. Все дескрипторы сегмента и переключатели являются действительными и доступными, если CPL (ослабленный посредством RPL селектора) < DPL дескриптора или переключателя. ПРИМЕР: LAR ECX, DESCRIPTOR_PTR ; загрузить r/m операнд, э интерпретировать операнд как право доступа дескриптора или переключателя. ВРЕМЯ ВЫПОЛНЕНИЯ: из операнда регистра: 15 тактовэ 0.75 мкс при 20 МГц из операнда памяти: 16 тактовэ 0.8 мкс при 20 МГц ФЛАГИ: ZF описан в разделе ФУНКЦИЯ выше. Все другие флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Прерывание 6. LAR, команда защищенного режима, не распознаваема в реальном режиме. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Такие же, как в реальном режиме, но имеют место в защищенном режиме при уровне привилегии 0. Формат стека с уровнем привилегии 0 после исключения (с кодом ошибки) или прерывания (без кода ошибки) показан на рис.12.2.Также Исключительная ситуация "отказ" страницы" с кодом ошибки кода отказа и линейным адресом отказа находится в регистре CR2. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 268 - ЙННННННННННННННННННННННННННННННН» єLEA Загрузка права доступає ИНННННННННННННННННННННННННННННННј Формат байт 0 байт 1 ЪДДДДДДДДДДВДДВДДВДДВДДВДВДДДДВДДДДВДДДДї LEA і 10001101 ірежимірегистрірегистр/памятьі АДДДДДДДДДДБДДБДДБДДБДДБДБДДДДБДДДДБДДДДЩ Функция GENERAL REGISTER чДД EFFECTIVE ADRESS; Описание Команда LEA вычисляет эффективный адрес в соответствии с определенным способом адресации.Эффективный адрес вычисляется как двойное слово,если используется 32-битовый размер адреса,и как слово,если используется 16-битовый размер адреса. Размер данных в команде определяет должен ли быть эффективный адрес усечен для соответствия с регистром - приемником. Пример: LEA ECX,[EDX][4*ESI]DOLLAR Если EDX=00000034h, ESI=00000052h и DOLLAR=00007289h, то результатом выполнения команды LEA из примера является ECX=00007405h. Это - вычисленный эффективный адрес. Временные характеристики 2-тактовых импульса (ТИ); 0,1 мкс при 20 Мгц Если эффективный адрес содержит 2 регистра,как в примере, то команда LEA требует один дополнительный тактовый импульс.Обычно команда,вычисляющая эффективный адрес,который включает 2 регистра,требует 1 дополнительный тактовый импульс. Флаги Не устанавливаются Исключительные ситуации в реальном режиме Прерывание 6; если второй операнд является регистром. Исключительные ситуации в защищенном режиме Исключительная ситуация "неверный код операции" (исключительная ситуация 6),если второй операнд - регистр. Исключительная ситуация 6 не проталкивает в стек код ошибки. Исключительные ситуации в режиме "виртуальный 8086" Такие же,как в защищенном режиме ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 269 - ЙННННННННННННННННННННННННННННННННННННННННННН» єLEAVE Высокоуровневая процедура выходає ИНННННННННННННННННННННННННННННННННННННННННННј Формат ЪДДДДДДДДДДї LEAVE і 11001001 і АДДДДДДДДДДЩ Функция: ESP EBP (воздействие со стороны размера адреса) EBP POP() (воздействие со стороны операнда) Описание: Действие команды LEAVE обратно действию команды ENTER. ESP,EBR восстанавливают значения,которые были до команды ENTER. Пример: LEAVE RET Временные характеристики: 4 ТИ; 0,2 мкс при 20 Мгц. Флаги Не устанавливаются Исключительные ситуации в реальном режиме Такие же,как при команде ADD Исключительные ситуации в защищенном режиме Такие же,как при команде ADD Исключительные ситуации в режиме "виртуальный 8086" Такие же,как при команде ADD ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 270 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єLGDT Загрузить регистр таблицы глобальных дескрипторовє ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННј Формат: байт 0 байт 1 байт 2 ЪДДДДДДДДДДВДДДДДДДДДДВДДВДДВДДДВДДДВДДДДВДДДДДї LGDT і 10001101 і 00000001 ірежимі010ірегистр/памятьі АДДДДДДДДДДБДДДДДДДДДДБДДБДДБДДДБДДДБДДДДБДДДДДЩ Функция: IF (ADRESS SIZE=32) THEN GDTR.LIMIT: GDTR.BASE чДДДД MEMORY 16:24;(загружается 24 бита от базы) ELSE GDTR.LIMIT:GDTR.BASE чДДДД MEMORY 16:32;(загружается 32 бита от базы) ОПИСАНИЕ: LGDT загружает граничное значение и линейный базовый адрес в регистр таблицы глобальнах дескрипторов.Таким образом устанавливается размер и размещение в памяти таблицы глобальных дескрипторов. LGDT является командой операционной системы. Она обычно встречается в программе реального режима когда система иницизируется для ввода защищенного режима.Кроме того команда LGDT выполняется в защищенном режиме при CPL=0. В защищенном режиме только команды LGDT и LIDT выполняют загрузку линейного адреса в регистр. ПРИМЕР: LGDT GDT_INFO ;устанавливает размер и ;граничное значение таблицы ;глобальных дескрипторов, ;соответствующие данным ;в памяти,названным ;GDT_INFO Временные характеристики: 11 ТИ; 0,55 мкс при 20 Мгц. Флаги: Не устанавливаются Исключительные ситуации в реальном режиме Такие же, как при команде ADD; Исключительные ситуации в защищенном режиме Исключительная ситуация "стандартная защита"(исключительная ситуация 13) с кодом ошибки 0000h,если CPL не равно 0. Остальные исключительные ситуации-такие же ,как при команде ADD Исключительные ситуации в режиме "виртуальный 8086" Исключительная ситуация "стандартная защита"(исключительная ситуация 13) с кодом ошибки 0000h,если CPL=3(не равно 0). ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 271 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єLIDT Загрузка регистра таблицы описателей прерыванияє ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: байт 0 байт 1 байт 2 ЪДДДДДДДДДДВДДДДДДДДДДВДДВДДВДДДВДДДВДДДДВДДДДДї LIDT і 00001111 і 00000001 ірежимі011ірегистр/памятьі АДДДДДДДДДДБДДДДДДДДДДБДДБДДБДДДБДДДБДДДДБДДДДДЩ Функция: IF (OPERAND SIZE =32) THEN IDTR.LIMIT: IDTR.BASE чДДДД MEMORY 16:24;(загружается 24 бита от базы) ELSE IDTR.LIMIT:IDTR.BASE чДДДД MEMORY 16:32;(загружается 32 бита от базы) ОПИСАНИЕ: LIDT загружает граничное значение и линейный базовый адрес в регистр таблицы дескрипторов прерываний,таким образом устанавливая размер и размещение таблицы дескрипторов прерываний в памяти. LIDT является командой операционной системы.Она обычно появляется в программе реального режима,если система инициализируется для ввода защищенного режима.Кроме того LIDT выполняется в защищенном режиме только команды LGDT и LIDT выполняют загрузку линейного адреса в регистр. ПРИМЕР: LIDT IDT_INFO ;устанавливает размер и ;граничное значение таблицы ;дескрипторов прерываний, ;соответствующие данным ;в памяти,названным ;IDT_INFO Временные характеристики: 11 ТИ; 0,55 мкс при 20 Мгц. Флаги: Не устанавливаются Исключительные ситуации в реальном режиме Такие же, как при команде ADD; Исключительные ситуации в защищенном режиме Исключительная ситуация "стандартная защита"(исключительная ситуация 13) с кодом ошибки 0000h,если CPL не равно 0. Остальные исключительные ситуации-такие же ,как при команде ADD Исключительные ситуации в режиме "виртуальный 8086" Исключительная ситуация "стандартная защита"(исключительная ситуация 13) с кодом ошибки 0000h,если CPL=3(не равно 0). ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 272 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єLDS/LES/LFS/LGS/LSS Загрузка полного указателя в регистрє є сегмента :регистр общего назначения є ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: байт 0 байт 1 ЪДДДДДДДДДДВДДДДДВДДДДДДДВДДДДДДДДДДДДДДї LDS і 11000101 ірежимірегистрірегистр/памятьі АДДДДДДДДДДБДДДДДБДДДДДДДБДДДДДДДДДДДДДДЩ байт 0 байт 1 ЪДДДДДДДДДДВДДДДДДВДДДДДДДВДДДДДДДДДДДДДДї LES і 11000100 і режимірегистрірегистр/памятьі АДДДДДДДДДДБДДДДДДБДДДДДДДБДДДДДДДДДДДДДДЩ байт 0 байт 1 байт 2 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДДВДДДДДДДВДДДДДДДДДДДДДДї LFS і 00001111 і 10110100 ірежимірегистрірегистр/памятьі АДДДДДДДДДДБДДДДДДДДДДБДДДДДБДДДДДДДБДДДДДДДДДДДДДДЩ байт 0 байт 1 байт 2 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДДВДДДДДДДВДДДДДДДДДДДДДДї LGS і 00001111 і 10110101 ірежимірегистрірегистр/памятьі АДДДДДДДДДДБДДДДДДДДДДБДДДДДБДДДДДДДБДДДДДДДДДДДДДДЩ байт 0 байт 1 байт 2 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДДВДДДДДДДВДДДДДДДДДДДДДДї LSS і 00001111 і 10110010 ірежимірегистрірегистр/памятьі АДДДДДДДДДДБДДДДДДДДДДБДДДДДБДДДДДДДБДДДДДДДДДДДДДДЩ - 273 - Функция: IF (OPERAND SIZE=32) THEN BEGIN GENERAL REGISTER EFFECTIVE ADRESS ; (32-битовый эффектив- ный адрес) SEGMENT REGISTER EFFECTIVE ADRESS 4; (16-битовый селектор) END ELSE BEGIN GENERAL REGISTER EFFECTIVE ADRESS ; (16-битовый эффектив- ный адрес) SEGMENT REGISTER EFFECTIVE ADRESS +2 ; (16- битовый селектор) Описание Эта команда загружает из памяти полный указатель. Полный ука- затель состоит из направления (colrse), селектора (для идентифи- кации отдельного сегмента) и эффективного адреса (смещение в сег- менте). Селектор загружается в регистр сегмента, эффективный ад- рес - в регистр общего назначения. Когда происходит присваивание значения регистру сегмента в реальном или "виртуальном 8086" режимах значение селектора сдви- гается на 4 позиции влево для вычисления килейного базового адре- са сегмента. Если присваивание поисходит в защищенном режиме, то базовые и граничное значения сегмента загружается из строки таб- лицы дескриптов, для данного сегмента. Пример LDS DATA SEG устанавливает данные сегмента, соответствующего селектору с имеенем DATA SEG Временные характеристики Реальный или "виртуальный 8086" режимы: 7ТИ; 0,35 мкс при 20 МГй Защищенный прежим: 22ТИ; 1,1 мкс при 20МГц Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD; Исключительные ситуации в защищенном режиме Такие же, как при команде ADD Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде ADD ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 274 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єLLDT Загрузка регистра таблицы локальных дескрипторовє ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 байт 2 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДДДДВДДДДДВДДДДДДДДДДДДДДДДї LLDT і 00001111 і 00000000 і режим і 000 і регистр/память і АДДДДДДДДДДБДДДДДДДДДДБДДДДДДДБДДДДДБДДДДДДДДДДДДДДДДЩ Функция LDTR SELECTOR (16-битовый селектор) Описание LLDT - команда защищенного режиме LLDT загружает селектор в регистр таблицы локальных дескриптов. Т.о. устанавливается табли- ца локальных дескрипторов. Данные базы и границыы таблицы дескрипторов загружаются из таблицы дескрипторов, введенной для данного сегмента. Селектор должен обращаться к дескриптору из таблицы локальных дескрипторов (дескриптор типа 2). Однако, селектор может быть еще нулевым. В таком случае таб- лица локальных дескрипторов считается неверной и любые ссылки дескрипторов на эту таблицу вызывают общую исключительную ситу- ацию при защите (исключая ссылки команд LAR, LSL, VERR и VERW, разработанные для доступа к тестируемым селекторам "благотворным образом". LLDT - является привилегированной командой и доступна для вы- полнения только на нулевом уровне привилегированности. Пример LLDT INITIAL LD устанавливает таблицу локальных дескрепторов, соответствующую селектору с именем INITIAL LDT Временные характеристики 20ТИ; 1,0 мкс при 20 МГц Флаги Не устанавливаются Исключительные ситуации в реальном режиме Прерывание 6, команда LLDT запрещена в реальном режиме. Исключительные ситуации в защищенном режиме Исключительная ситуация "стандартная защита" (исключительная ситуация 13) с кодом ошибки 0000h, если CPL=0. Исключительная ситуация "стандартная защита" с кодом ошибки ошибочного селектора, если операнд-селектор не ссылается на таб- лицы глобальных дескрипторов и дескриптор в локальной таблице дескрипторов. Остальные исключительные ситуации - такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальной 8086" Исключительная ситуация "неверный код операции" (исключитель- ная ситуация 6). LLDT запрещена в режиме "виртуальный 8086". ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 275 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єLMSW Загрузка регистра слова состояния компьютерає ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 Байт 1 байт 2 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДДДДВДДДДДВДДДДДДДДДДДДДДДї LMSW і 00001111 і 00000001 і режим і 110 і регистр/памятьі АДДДДДДДДДДБДДДДДДДДДДБДДДДДДДБДДДДДБДДДДДДДДДДДДДДДЩ Функция MSW 16-bit operand (MSW (слово состояния компьютера) - младщие 16 битов из CRO) Описание LMSW - загружает младшую половину CRO из источника операнда. Однако боле вероятно, что будет использоваться команда микропро- цессора 80386 MOV CRO, SOURCE. (Команда LMSW обеспечивает совмес- тимость с кодом операции в процессоре 80286). LMSW является командой операционной системы. Она обычно встречается в программе в реальном режиме в 80286 когда система инициализируется для ввода защищенного режима. Эта команда может использоваться для переключения (перехода) в защищенный режим посредством установки бита PE в CRO. В таком случае за ней должен следовать межсегментный переход для подкачки команд, дешифриру- емых в реальном режиме, в очередь предвыборки команд. Пример LMSW IDT INFO загружает младшую половину CRO Временные характеристики Операнд из регистра: ОТИ; 0,5 мкс при 20 МГц Операнд из памяти: ВТИ; 0,65 мкс при 20 МГц Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Исключительная ситуация "стандартная защита" (исключительная ситуация 13) с кодом ошибки 000h, если CPL=0. Остальные исключи- тельные ситуации такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальной 8086" Исключительная ситуация "стандартная защита" с кодом ошибки 000h, если CPL равно 3 (не равно 0). ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 276 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННН» єLODSB/LODSW/LODSD Загрузить строку данныхє ИНННННННННННННННННННННННННННННННННННННННННННННННННННј Формат ЪДДДДДДДДДДї LODSB/LODSW/LODSD і 1010110W і АДДДДДДДДДДЩ Функция IF (OPERAND SZZE = DWORD) (загрузка операнда в EAX/AX/AC) THEN EAX SOURCE INPEX ELSE IF (OPERAND SIZE = WORD) THEN AX SOORCE INDEX ELSE (размер операнда - байт) AL SOURCE INDEX IF (ADRESS SIZE = 32) THEN (модификация индекса для источника) ADYUST EST ELSE ADYUST SI (размер адреса - 16 бит) Описание LODS загружает операнды из "строки памяти" - источника. Под- разумевается, что строка является массивом байтов, слов или двойных слов (в зависимости от размера операнда в строке коман- ды). После того, как пересылка произведена инддексный регистр ис- точика автоматически изменяется (увеличивается или изменяется в соответстви с DF) на величину равную размеру операнда. Если размер адреса команды - два слова, то операнд (исходная строка) - ESI . Lelare исходный операнд - SI . Правильно значение индекса загружается до выполнения команды LODS. Пример LODSW загружает одно слово из строки Т.к. индексный регистр источника должен быть загружает при ис- пользовании этой команды, то команда LODSW/W/D часто встречается в циклах и используется для выполнения нескольких итераций. Временные характеристики STI; 0,25 мкс при 20 МГц Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 277 - ЙНННННННННННННННННННННННННННННННННННННННННННННННН» єLOOP Выполнить цикл и уменьшить ECXє ИННННННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 Байт 1 ЪДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДї LOOP і 11100010 і 8-битовое смещение і АДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДЩ Функция IF (ECX < > 0) THEN EIP EIP + DISPLASEMENT (смещение только 8-битовое) (смещение) Описание LOOP уменьшает регистр счета без изменения флагов. Регистр сч ета - ECX (если размер адреса - 32 бита) и CX (если размер адреса - 16 бит) - уменьшается как счетчик итераций без знака и проверяется (но флаги не изменяются). Если регистр счета не равен нулю, то дела ется "короткий переход" с использованием 8-битового смещения, находяще гося в операнде. Смещение прибавляется к считчику команд, соответствую щему адресу следующей команды. Заметим, однако, что смещение - 8-бит овая величина со знаком, поэтому значения смещения находятся в предела х от - 128 до +127. Т.о., выполняя команду LOOP, возможно выполнять переходы то лько внутри сегмента, а содержимое регистра сегмента не изменяется. Пример LOOP LOOP START выполняет определенное в регистре счета количество итераций Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Прерывание 13, если эффективный адрес любой части команды, к кото- рой совершается переход, больше, чем FFFFh в CS сегмента. Исключительные ситуации в защищенном режиме Исключительные ситуации "стандартная защита" (исключительная ситу- ация 13) с кодом ошибки 0000h? для CS сегмента памяти, к которому осу- ществляется переход, если эффективный адрес любой части команды, к ко- торой осуществляется переход, выходит за пределы сегмента. Иск лючи- тельная ситуация "отсутствие" (исключительная ситуация 11) с кодом ошибки равным селектору сегмента, если операнд в памяти помечен в CS сегмента как отсутствующий. Исклжючительная ситуация "неисправн ость страницы" (исключительная ситуация 14) с кодом ошибки равным код у не- исправности и линейным адресом неисправной страницы в регистре CR 2. Исключительные ситуации в режиме "виртуальном 8086" Такие же, как в реальном режиме, но обрабатывчаются в защищ енном режиме на нулевом уровне привилегированности. Формат стека в прив иле- гированном режиме после исключительной ситуации (с кодом ошибки) или после прерывания (без кода ошибки) показан на рис. 12.2. Кроме того, бывает исключительная ситуация "неисправность страницы" с кодом ошиб- ки, равным коду неисправности и линейным адресом неисправной стр аницы в регистре CS2. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 278 - ЙННННННННННННННННННННННННННННННННННННННННННННН» єLOOPE/LOOPZ Выполнить цикл и уменьшить ECX,є є если выполняется условие є ИНННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 ЪДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДї LOOPE/LOOPZ і 11100001 і 8-битовое смещение і АДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДЩ Функция IF ((ECX < >0 AND (ZF=1) THEN EIP EIP + смещение смещение только 8-битовое Описание LOOP уменьшает содержимое регистра счетчика без изменения фл агов. Регистр счетчика - ECX (если размер адреса 32 бита) или CX (если раз- мер адреса 16 битов) - уменьшается как счетчик итераций без зна ка и проверяется (но флаги не изменяются). Если регистр счетчика не ну левой и флаг равенства нулю установлен, то совершается короткий пепр еход, используя 8-битовое смещение, находящееся в операнде. Смещение пр ибав- ляется к счетчику команд соответствующему адресу, следующей ком анды. Заметим, однако, что смещение - только 8-битовая величина со зн аком. Это ограничивает значения смещения от - 128 до +127. Т.о. эта команда цикла может совершать переходы только внутри сег- мента, а содержимое регистра сегмента не изменяется. Пример LOOPE LOOP START выполняет итерации определенное в регис тре счетчика, пока количество раз выполняется ZF=1 (т.е. условие верно) Флаги Не изменяются. Исключительные ситуации в реальном режиме Такие же, как при команде LOOP. Исключительные ситуации в защищенном режиме Такие же, как при команде LOOP. Исключительные ситуации в режиме "виртуальный 8086" Такие же , как при команде LOOP. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 279 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єLOOPNE/LOORNZ Выполнить цикл и уменьшить ECX,є є если не выполняется условие є ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 ЪДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДї LOOPNE/LOOPNZ і 11100000 і 8-битовое смещение і АДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДЩ Функция IF ((ECX < >0 AND (ZF=1))THEN EIP EIP + смещение (смещение только 8-битовое) Описание LOOP уменьшает содержимое регистра счетчика без изменения фла гов.| Регистр счетчика - ECX (если размер адреса 32 бита) или CX (если раз- мер адреса 16 бит) - уменьшается как счетчик итераций без знака и про- веряется (но флаги не устанавливаются). Если регистр счетчика не нуле- вой и сброшен флаг равенства нулю, то совершается короткий пере ход, используя 8-битовое смещение, находЯщееся в операнде. Смещение пр ибав- ляется к счетчику команд, соответствующему адресу следующей ком анды. Заметим, однако, что смещение - только 8-битовая величина со зн аком. Это ограничивает значения смещения от - 128 до + 127. Т.о. эта команда цикла может совершать переходы только в пре делах сегмента, содержимое регистра сегмента, содержимое регистра сег мента не изменяется. Пример LOOPNE LOOP START выполняет итерации количество раз, определ енное в регистре счетчика, пока ZF=0 (т.е. условие не выполняется) Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде LOOP. Исключительные ситуации в защищенном режиме Такие же, как при команде LOOP. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде LOOP. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 280 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єLSL Загрузка граничное значение сегмента в регистрє ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 байт 2 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДї LSL і 00001111 і 00000011 і mod і red і r/m і і і ірежимірегистр і регистр/памятьі АДДДДДДДДДДБДДДДДДДДДДБДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДЩ Функция IF ACCESS IS VALID (существует доступ) THEN GENERAL REGISTER SEGMENT LIMIT OF GIVEN SELECTOR (регистр общего назначения ограничение сегмента из данного селектора) ZF 1 ELSE ZF 0 Описание LSL является командой защищенного режима, LSL загружает раз- ложенное на составные части (расшифрованный) граничное значение сегмента из дескриптора, если дескриптор является "видимым" в CPL (ослабленный RPL селектора). LSL загружает байт граничного значения сегмента. Если гранич- ное значение блокировано по страницам в дескрипторе, LSL "переде- лает (trauslate) его в байт граничного состояния перед загрузкой его в регистр-приемник (сдвиг блокированного по страницам гранич- ного значения на 12 битов влево, затем операция ИЛИ с 00000FFFh). Если тип дескриптора доступен в CPL (ослабленный RPL-селекто- ра) устанавливает ZF=1, иначе ZF=0 Все дескрипторы сегмента существуют и доступны, если CPL (ос- лабленный RPL селектора) < DPL дескриптора. Однако, переключатели не имеют место в этой команде, поскольку они не имеют поля огра- ничения (граничного поля). - 281 - Пример LSL ECX, DESERIPTOR PTR загружает операнд из регистра/памяти, интерпретируя его как граничное зна- чение сегмента, содержащиеся в деск- рипторе Временные характепистики Байт граничного значения из операнда-регистра: 20 тактовых импульсов; 1,00 мкс при 20МГц. Байт граничного значения из операнда-памяти: 21 тактовый им- пульс; ;1,05 мкс при 20 МГц. Граничное значение страницы из операнда-регистра: 25 ТИ; 1,25 мкс при 20 МГц. Граничное значеие страницы из операнда-памяти: 26 ТИ; 1,3 мкс при 20МГц. Флаги Флаг ZF устанавливается, как показано в "Функции", остальные флаги не устанавливаются. Исключительные ситуации в реальном режиме Прерывание 6. LST-команда защищенного режима и не распознает- ся в реальном режиме. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при реальном режиме, но обрабатывается в защи- щенного режиме на нулевом уровне привилегированности. Формат сте- ка нулевом уровне привилегий после исключительной ситуации пока- зан на рис.12.2. Кроме того, исклюдчительная ситуация "неисправ- ность страницы" (исключительная ситуация ) с кодом ошибки, равным коду неисправности и линейным адресом неисправной страницы в ре- гистре CR2. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 282 - ЙННННННННННННННННННННННННННННННННННННННННННННННН» єLTR Загрузить регистр задачиє ИНННННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДДДДВДДДДДВДДДДДДДДДДДДДДДДї LTR і 00001111 і 00000000 і режим і 001 і регистр/память і АДДДДДДДДДДБДДДДДДДДДДБДДДДДДДБДДДДДБДДДДДДДДДДДДДДДДЩ Функция TR SELECTOR селектор (16-битовый селектор) Описание LTR является командой защищенного режима. LTR загружает се- лектор в TR (Регистр задачи). Таким образом устанавливается TSS (сегмент состояния задачи) задачи. Это не является причиной пе- реключения задачи. Данные размещения и границы TSS загружаются из таблицы дескрипторов, введенной для данного селектора. Селектор должен ссылаться на незанятый дескриптор TSS (тип дескриптора 1 или 9) в GDT (таблица глобальных дескрипторов). LTR - привилегированная команда, выполняется только в уровне привилегий 0. Пример LTR INITIAL TSS устанавливает сегмент задачи в соответ- ствии с селектором с именем INITIAL TSS Временные характеристики Селектор в регистре: 23 ТИ; 1,15 мкс при 20 МГУ. Селектор в памяти: 27 ТИ; 1,35 мкс при 20 МГЦ. Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Прерывание 6. LTR - запрещенная команда в реальном режиме. Исключительные ситуации в защищенном режиме Исключительная ситуация "стандартная защита" (исключительная ситуация 13) с кодом ошибки 0000h, если CPL не равно 0. Исключи- тельная ситуация "стандартная защита" с кодом ошибки "ошибочного селектора, если операнд-селектор не ссылается на GDT или дескрип- тор сегмента состояния задачи. Остальные исключительные ситуации -такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Исключительная ситуация "неверный код операции" (исключи- тельная ситуация 6). LTR - запрещенная команда в режиме "вирту- альный 8086". ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 283 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННН» єMOV Переслать в/из регистр общего назначенияє ИННННННННННННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 ЪДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДї подпоследо- Из регистра і 1000100W і режим і регистр і регистр/ і вательный в регистр/ і і і і память і байт память АДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДЩ (байты) Из AL/AX/EAX ЪДДДДДДДДДДї в память і 1010001W і полное смещение (короткое АДДДДДДДДДДЩ кодирование) Из регист- ЪДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДї ра памяти і 1000101W і режим і регистр і регистр/ і в регистр і і і і память і АДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДЩ Из памяти в AL/AX/EAX ЪДДДДДДДДДДДї (короткое і 10010000W і полное смещение кодирование) АДДДДДДДДДДДЩ Непосред- Байты не- | ственные ЪДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДї посредст- данные в і 1100011W і режим і регистр і регистр/ і венных регистр/ і і і і память і данных память АДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДЩ Непосредственные ЪДДДДДДВДДДВДДДДДДДДДї Байты непосредст- данные в регистр і 1011 і W і регистр і венных данных АДДДДДДБДДДБДДДДДДДДДЩ - 284 - Функция DESTINATION SOURCE (приемник) (источник) или DESTINATION IMMEDIATE DATA (непосредственно данные) Описание Пересылает источника операнда (размещенный в регистре, памяти или непосредственные данные в приемник операнда. Исходный операнд остается без изменений, а операнд-приемник перезаписывается ис- ходными данными. Пример MOV ECX, EDX EDX-источник ECH-приемник Если ECX=00000034h и EDX=00000052h, то в результате выполнения данной команды ECX примет значения 00000052h. Все флаги не изме- няются. Временные характеристики Регистр регистр: 2 ТИ; 0,1 мкс при 20 МГц Регистр память: 2 ТИ; 0,1 мкс при 20 МГц Память регистр 4 ТИ; 0,2 мкс при 20 МГц Непосредственные данные регистр 2 ТИ; 0,1 мкс при 20 МГц Непосредственные данные регистр 2 ТИ; 0,1 мкс при 20 МГц Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 285 - ЙННННННННННННННННННННННННННННННННННННННННННННННННН» єMOV Пересылка в/из регистр сегментає ИНННННННННННННННННННННННННННННННННННННННННННННННННј Формат Из регистра/памяти ЪДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДї в сегментный і 10001110 і режим і сегм. і регистр/ і регистр і і і регистр і память і АДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДЩ Из сегментного ЪДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДї регистра в і 10001100 і режим і сегм. і регистр/ і регистр/память і і і регистр і память і АДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДЩ Функция SEGMENT REGISTER REGISTER/MEMORY (загрука сегмент- (регистр сегмента) (регистр/память) ного регистра) REGISTER/MEMORY SEGMENT REGISTER (запоминание содер- жимого сегментного регистра) Описание Запоминание или загрузка 16-битового регистра сегмента в или из памяти или регистра. Для этой команды всегда используется 16-битовый размер операнда независимо от атрибута длины операнда. Как и в других командах MOV источник операнда остается неизмен- ным, а приемник операнда перезаписывается данными из источника. Пример MOV DS, DATA AREA DS-приемник DATA AREA-источник, содержа- щий 16-битовый селектор, ко- торый загружается в DS. Временные характеристики Загрузка Из регистра общего назначения 18 ТИ; 0,9 мкс при 20 МГц в сегментный регистр Из памяти в сегментный регистр 19 ТИ; 0,95 мкс при 20 МГц Запоминание Из сегментного регистра в ре- гистр общего назначения 2 ТИ; 0,1 мкс при 20 МГц Из регистра сегмента в память 2 ТИ; 0,1 мкс при 20 МГц Флаги Не устанавливаются. Исключительные ситуации не описаны ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 286 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННН» єMOV Пересылка в/из системный регистр є ИННННННННННННННННННННННННННННННННННННННННННННННННННј Формат Из CRO/2/3 в ЪДДДДДДДДДДВДДДДДДДДДДВДДДДВДДДДДВДДДДДДДДДї регистр обще - і 00001111 і 00100010 і 11 і rrr і регистр і го назначения АДДДДДДДДДДБДДДДДДДДДДБДДДДБДДДДДБДДДДДДДДДЩ Из регистра ЪДДДДДДДДДДВДДДДДДДДДДВДДДДВДДДДДВДДДДДДДДДї общего назна- і 00001111 і 00100000 і 11 і rrr і регистр і чения в АДДДДДДДДДДБДДДДДДДДДДБДДДДБДДДДДБДДДДДДДДДЩ CRO/2/3 Из DRO/1/2/36/7 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДВДДДДДВДДДДДДДДДї в регистр обще- і 00001111 і 00100011 і 11 і rrr і регистр і го назначения АДДДДДДДДДДБДДДДДДДДДДБДДДДБДДДДДБДДДДДДДДДЩ Из регистра об- ЪДДДДДДДДДДВДДДДДДДДДДВДДДДВДДДДДВДДДДДДДДДї щего назначения і 00001111 і 00100001 і 11 і rrr і регистр і в DRO/1/2/3/6/7 АДДДДДДДДДДБДДДДДДДДДДБДДДДБДДДДДБДДДДДДДДДЩ ИЗ TR 6/7 в ре- ЪДДДДДДДДДДВДДДДДДДДДДВДДДДВДДДДДВДДДДДДДДДї гистре общего і 00001111 і 00100110 і 11 і rrr і регистр і назначения АДДДДДДДДДДБДДДДДДДДДДБДДДДБДДДДДБДДДДДДДДДЩ Из регистра об- ЪДДДДДДДДДДВДДДДДДДДДДВДДДДВДДДДДВДДДДДДДДДї щего назначения і 00001111 і 00100100 і 11 і rrr і регистр і TR 6/7 АДДДДДДДДДДБДДДДДДДДДДБДДДДБДДДДДБДДДДДДДДДЩ rrr CONTROL REGISTER DEBUG REGISTER TEST REGISTER (регистр управления) (регистр отладки) (регистр тестиро- вания) 000 CRO DRO 001 DR1 010 CR2 DR2 011 CR3 DR3 100 101 110 DR6 TR6 111 DR7 TR7 - 287 - Функция SYSTEM REGISTER GENERAL REGISTER (загрузка систем- (системный регистр) (регистр общего ного регистра) назначения) или GENERAL REGISTER SYSTEM REGISTER (запоминание содержи- мого системного ре- гистра) Описание Запоминание или загрузка 32-битового системных регистров (ре- гистры управления, регистры отладки и страничного преобразования) из 32 битового регистра общего назначения. Для этой команды всег- да используется 32-битовый размер операнда независимо от атрибута длины операнда. Как и в других командах MOV источник операнда ос- тается без изменений и приемник операнда перезаписывается данными из источника. Пример MOV EAX, CR2 EAX-приемник, CR2-источник, этот пример может появиться в программе, которая исследует адрес неисправной страницы для программы обработки неисправности страницы Временные характеристики Загрузка Из регистра в CRO/2/3 10 ТИ; 0,5 мкс при 20 МГц Из регистра в DR 0-3 11 ТИ; 1,1 мкс при 20 МГц Из регистра в DR 6/7 16 TИ; 0,8 мкс при 20 МГц Из регистра в TR 6/7 12 ТИ; 0,6 мкс при 20 МГц Запоминание Из CRO/2/3 в регистр 6 ТИ; 0,3 мкс при 20 МГц Из DRO/3 в регистр 22 ТИ; 1,1 мкс при 20 МГц Из DR 6/7 в регистр 14 ТИ; 0,7 мкс при 2 МГц Из TR 6/7 в регистр 12 ТИ; 0,6 мкс при 20 МГц Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Нет. Эта команда может использоваться в реальном режиме. Исключительные ситуации в защищенном режиме Исключительная ситуация "стандартная защита" (исключительная ситуация 13) с кодом ошибки 0000h, если текущий уровень привиле- гий не нулевой. В защищенном режиме эта команда может выполняться только при уровне привилегированности 0. Исключительные ситуации в режиме "виртуальной 8086" Исключительная ситуация "стандартная защита" с кодом ошибки 0000h, если произведена попытка выполнения команды. Это происхо- дит потому, что в режиме "виртуальный 8086" CPL=3. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 288 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННННН» єMOVSB/MOVSW/MOVSD Переслать строку данных є є (слово или двойное слово)є ИННННННННННННННННННННННННННННННННННННННННННННННННННННј Формат ЪДДДДДДДДДДї MOVSB/MOVSD/MOVSD і 1010010W і АДДДДДДДДДДЩ Функция DESTINATION SOURCE ( ) (приемник) (источник) операндов) IF (ADRESS SIZE=32) THEN (размер адреса) (ADYUST ESIAND EDI; (установка индексов для источника и приемника) ELSE (если размер адреса 16) ADYUST SI and DI Описание Пересылает операнды из строки памяти-источника в "строку па- мяти" - приемник. Подразумевается, что строка - это массив байтов, слов или двойных слов (в зависимости от размера операнда в строке команды). После того, как пересылка произведена, ин- дексные регистры источика ик приемника автоматически изменяются (увеличиваются или уменьшаются, взависимости от DF) на величину, равную размеру операнда. Если размер адреса команды - двойное слово, то исходная стро- ка - [ESI], пока операнд-приемник есть ES: [EDI]. Иначе операнды - [SI] и [DI]. Загрузка правильных значений индексов производится перед выполнением команды MOVS'. Пример MOVSD сравнивает байтовый операнд из строк байтов или REP MOVSD повторяет MOVS, пока не "кончится" ECX. (см. стр. 457) Т.к. регистр источника и приемника должны быть загружены для использования этой команды, MOVS часто встречается в циклах и ис- пользуется для выполнения нескольких операций. Временные характеристики Без повторений: 7 ТИ; 0,35 мкс при 20 МГц С повторением: 1 4 n ТИ; (0,35 +0,2n мкс при 2 МГц (n - число выполняемых итераций) Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме виртуальной 8086" Такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 289 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННННН» єMOVSX Пересылка данных, с добавленным знакомє ИННННННННННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 байт 2 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДї і 00001111 і 1011111W і режим і регистр і регистр/ і і і і і і память і АДДДДДДДДДДБДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДЩ Функция DESTINATION SIGN - EXTEND (SOURCE BYTE) (приеминик) (добавленный (исходный знак) байт) Описание Пересылает исходный операнд (байт в регистре или байт в па- мяти) в приемник операнда размером слово или двойное слово, до- полнив его знаком. Источник операнда остается без изменений, при- емник операнда перезаписывается данными, расширенными знаком. Пример MOVSX ECX, DL ECT получает байт, расширенный знаком из DL Временные характеристики Из регистра в регистр: 3ТИ; 0,15 мкс при 20 МГц Из памяти в регистр: 6 ТИ; 0,3 мкс при 20 МГц Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 290 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єMOVZX Пересылка данных с дополнением нулейє ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 ЪДДДДДДДДДДВДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДДДДДї і 00001111 і 1011011W і режим і регистр і регистр/память і АДДДДДДДДДДБДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДДДДДДДЩ Функция DESTINATION ZERO-EXTEND (SOURCE BYTE) (приемник) (расширение (исходный нулем) байт) Описание Пересылает из источника операнда (байт в регистре или байт в памяти) в приемник операнда (слово или двойное слово) операнд, дополнив его нулем. Источник операнда остается без изменения, а приемник перезаписывается исходными данными, расширенными нулем. Пример MOVSX EBX, BL EBX получает байт из BL, расширенный нулем Временные характеристики Пересылка из регистра в регистр 3ТИ; 0,15 мкс при 20 МГц из памяти в регистр 6ТИ; 0,3 мкс при 20 МГц Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 291 - ЙННННННННННННННННННННННННННННННННННННННННННННН» єMUL Умножение без учета знакає ИНННННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 ЪДДДДДДДДДДВДДДДДДДВДДДДДВДДДДДДДДДДДДДДДДї і 1111011W і режим і 110 і регистр/память і АДДДДДДДДДДБДДДДДДДБДДДДДБДДДДДДДДДДДДДДДДЩ Функция AL/AX/EAX DESTINATION х SOURCE (приемник) (источник) или AL/AX/EAX DESTINATION х IMMEDIATE DATA (приемник) (непосредствен- ные данные) Описание MUL выполняет умножение без знака. Команды MUL использует ре- гистр AL/AX/EAX как приемник результата и один сомножитель. Пример MUL ECX EDX Если ECX=00000034h и EDX=00000032h, то в результате выполнения данной операции в ECX будет 000010A8h. Временные характеристики MUL использует алгоритм (larby-finish) раннего окончания. Тре буемое для завершения команды число циклов определяется позицией знающего бита в оптимизируемом сомножителе. Из регистра в AL/AX/EAX: 9-41 ТИ; 0,45-2,05 мкс при 20 МГц Из памяти AL/AX/EAX: 12-44 ТИ; 0,6-2,2 мкс при 20 МГц Флаги OF и CF устанавливаются как описано в приложении А. SF, ZF, AF и PF не определены. Остальные флаги не изменяются. Исключительные ситуации при реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 292 - ЙНННННННННННННННННННННННННННННННННННННННННН» єNEG Инвертированиеє ИННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 ЪДДДДДДДДДДДВДДДДДДДВДДДДДВДДДДДДДДДДДДДДДДї і 1111011W і режим і 011 і регистр/память і АДДДДДДДДДДДБДДДДДДДБДДДДДБДДДДДДДДДДДДДДДДЩ Функция DESTINATION 0 - DESTENATION (приемник) (0 - приемник) Описание Операнд инвертируется. Операнд используется как приемник результата. Пример NEG EAX Если EAX=00000281h, то в результате выполнения команды EAX будет равно FFFFFD7Fh. Временные характеристики Регистр-регистр 2 ТИ; 0,1 мкс при 20 МГц Регистр-память 7 ТИ; 0,35 мкс при 20 МГц Память-регистр 6 ТИ; 0,3 мкс при 20 МГц Непосредственные данные - регистр 2 ТИ; 0,1 мкс при 20 МГц Непосредственные данные - память 7 ТИ; 0,35 мкс при 20 МГц Флаги OF, CF, SF, ZF, AF и PF устанавливаются, как показано в приложении А. Остальные флаги не изменяются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 293 - ЙННННННННННННННННННННННННННННННННННННННН» єNOP Нет операцииє ИНННННННННННННННННННННННННННННННННННННННј Формат ЪДДДДДДДДДДї і 10010000 і NOP АДДДДДДДДДДЩ Функция EIP увеличивается для следующей команды (счетчик команд) Описание Команда не выполняет никаких существенных функций. Счетчик команд увеличивается для следующей команды. NOP - другая мнемони- ка команды XCHG AX, AX. Временные характеристики ЗТИ; 0,15 мкс при 20 МГц Флаги Не устанавливаются. Исключительных ситуации в любом режиме нет. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 294 - ЙНННННННННННННННННННННННННННННННННННННННННННННН» єNOT Логическое дополнениеє ИННННННННННННННННННННННННННННННННННННННННННННННј Формат ЪДДДДДДДДДДВДДДДДДДВДДДДДВДДДДДДДДДДДДДДДДї NOT і 1111011W і режим і 010 і регистр/память і АДДДДДДДДДДБДДДДДДДБДДДДДБДДДДДДДДДДДДДДДДЩ Функция DESTINAT FON DESTINATION Описание Выполняет побитовое логическое дополнение операнда. Операнд еще используется как приемник результата. Пример NOT ECX Если ECX=90AD9034h, то в результате выполнения команды значе ние ECX будет 6F526FCDh. Временные характеристики Регистр-регистр 2ТИ; 0,1 мкс при 20 МГц Регистр-память 7 ТИ; 0,35 мкс при 20 МГц Память-регистр 6 ТИ; 0,3 мкспри 20 МГц Непосредственные данные - регистр 2 ТИ; 0,1 мкс при 20 МГц Непосредственные данные - память 7 ТИ;,35 мкс при 20 МГц Флаги OF=0; CF=0; SF, ZF и PF уставливаются как описано в приложении 2. Остальные флаги не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 295 - ЙНННННННННННННННННННННННННННННННННННННННННН» єOR Логическое ИЛИє ИННННННННННННННННННННННННННННННННННННННННННј Формат байт 0 байт 1 ЪДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДДДДДї регистр-регистр і 000010dW і режим і регистр і регистр/память і АДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДДДДДДДЩ ЪДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДДДДДї регистр-память і 0000100W і режим і регистр і регистр/память і АДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДДДДДДДЩ ЪДДДДДДДДДДВДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДДДДДї память/регистр і 0000101W і режим і регистр і регистр/память і АДДДДДДДДДДБДДДДДДДБДДДДДДДДДБДДДДДДДДДДДДДДДДЩ ЪДДДДДДДДДДВДДДДДДДВДДДДДВДДДДДДДДДДї Непосредствен- і 100000SW і режим і 001 і регистр/ і байты ные данные - і і і і память і данных память-регистр АДДДДДДДДДДБДДДДДДДБДДДДДБДДДДДДДДДДЩ Непосредственные ЪДДДДДДДДДДї данные - AL/AX/EAX і 0000110W і байты (короткое кодиро- АДДДДДДДДДДЩ данных вание) Функция DESTINATION DESTINATION V SOURCE или DESTINATION DESTINATION V IMMEDIATE DATA Описание Выполняет побитно операцию ИЛИ над двумя операндами. Один операнд еще используется как приемник результата. Пример OR EBX, EDI Если EBX=00AD9034h, EDI=03800052h, то в результате выполнения этой команды будет EBX=OBAD9070h. Временные характеристики Регистр-регистр 2 ТИ; 0,1 мкс при 20 МГц Регистр-память 7 ТИ; 0,355 мкс при 20 МГц Память-регистр 6 ТИ; 0,3 мкс при 20 МГц Непосредственные данные - регистр 2 ТИ; 0,1 мкс при 20 МГц Непосредственные данные - память 7 ТИ; 0,35 мкс при 20 МГц Флаги OF=0; CF=0; SF, ZF и РФ устанавливаются как описано в приложении А. Остальные флаги не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищенном режиме Такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 296 - ЙННННННННННННННННННННННННННННННННН» єOUT Выводє ИНННННННННННННННННННННННННННННННННј Формат ЪДДДДДДДДДДї 8 битовый номер Непосредственный порт (OO-FFh) і 1110010W і порта АДДДДДДДДДДЩ ЪДДДДДДДДДДї В порт, определяемый регистром DX (0000-FFFFh) і 1110110В і АДДДДДДДДДДЩ Функция DESTINATION PORT DX (выпод данных) Описание Вывод операнда из AL/AX/EAX (в зависимости от размера операн- да в команде байт, слово или двойное слово). Операнд передается в порт, определяемый регистром DX или непосредственно в поле даных. Эта команда всегда доступна в реальном режиме. В защищенном режиме эта команда доступна всегда, если CPL < IOPL. Если в защи- щенном режиме CPL > IOPL, то карта разрешения ввода-вывода опре- деляет разрешена ли команда. Все действительные биты в карте раз- решения вводавывода должны быть установлены в 0 для выполнения ввода-вывода. В режиме "виртуальный 8086" карта разрешения вво- да-вывода определяет разрешена ли команда OUT. OUT вывод операнда в порт, определяемый регистром DX Временные характеристики Реальный режим Вывод в порт, определяемый 10 ТИ; 0,5 мкс при 20 МГц непосредственно полем ко- манды Изменяемый порт 11ТИ; 0,55 мкс при 20 МГц Защищенный режим CPL < IOPL Вывод в порт, определяемый 4 ТИ; 0,2 мкс при 20 МГц непосредственно в поле команды Изменяемый порт 5 ТИ; 0,25 мкс при 20 МГц Защищенный режим CPL > IOPL Вывод в порт, определяемый 24 ТИ; 1,2 мкс при 20 МГц непосредственнов поле команды Изменяемый порт 25 ТИ; 1,25 мкс при 20 МГц Режим "виртуальный 8086" Вывод в порт, определяемый 24 ТИ; 1,2 мкс при 20 МГц непосредственно в поле команды Изменяемый порт 25 ТИ; 1,25 мкс при 20 МГц Флаги Не устанавливаются. Исключительные ситуации в реальном режиме Такие же, как при команде ADD. Исключительные ситуации в защищеном режиме Если CPL > IOPL, то карта разрешения ввода-вывода должна до- пускать ввод-вывод во все байтовые порты. Исключительные ситуации в режиме "виртуальный 8086" Карта разрешения ввода-вывода должна допускать ввод-вывод на все байтовые порты. Остальные исключительные ситуации такие же, как при команде ADD. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД - 297 - ЙННННННННННННННННННННННННННННННННННННННННННННННН» єOUTSB/OUTSW/OUTSD Вывод строки данныхє ИНННННННННННННННННННННННННННННННННННННННННННННННј Формат ЪДДДДДДДДДДї і 0110111W і АДДДДДДДДДДЩ Функция PORT DX SOURCE вывод данных IF (ADRESS SIZE = 32) THEN изменение индекса источ- ника операнда ADYUST EST ELSE ADYUST SI address size = 16 (размер адреса) Описание Выводит операнд из "строки памяти" - источника в порт, опре- деляемый регистром DX, подразумевается, что строка-источник явля- ется массивом байтов, слов или двойных слов - (в зависимости от размера операнда в строке команды). После того, как вывод сделан индекс источника автоматически изменяется (увеличивается или уменьшается согласно DF) на величину, равную размеру операнда. Если размер адреса команды - двойное слово, то операнд "стро- ка-источник" - [ESI]. Иначе, операнд [SI]. Загрузка правильного значения индекса производится перед выполнением OUTS. Пример OUTSD вывод двойного слова в порт DX или REP OUTSD повторение OUTS до тех пор,по- ка не "кончиться" ECX (см. стр. 457) Т.к. регистр индекса источника должнен быть загружен при выполне- нии этой команды, от OUTSD/W/D часто встречается в циклах или ис- пользуется для нескольких итерации. Временные характеристики Реальный режим Без повторений 14 ТИ; 0,7 мкс при 20 МГц С повторениями 12+5n ТИ; (0,6 + 0,25n) мкс при 20 МГц Защищенный режим CPL < IOPL Без повторений 8 ТИ; 0,4 мкс при 20 МГц С повторениями 6+5n; (0,3 + 0,25 n) мкс при 20 МГц Защищенный режим CPL > IOPL Без повторений 28 ТИ; 1,4 мкс при 20 МГц С повторениями 26 + 5n ТИ; (1,3 + 0,25n) мкс при 20 МГц Режим "виртуальный 8086" Без повторений 28 ТИ; 1,4 мкс при 20 МГц С повторениями 26 + Sn TI; (1,3 + 0,25n) мкс при 20 МГц (n - число выполняемых итераций) Флаги Не устанавливается. Исполнительные ситуации в реальном режиме Такие же, как при команде ADD. Исполнительные ситуации в защищенном режиме Если CPL > IOPL, то карта разрешения ввода-вывода должна до- пустить ввод-вывод ко всем байтовым портам. Остальные исключи- тельные ситуации - такие же, как при команде ADD. Исключительные ситуации в режиме "виртуальный 8086" Карта разрешения ввода-вывода должна допустить ввод-вывод ко всем байтовым портам. Остальные исключительные ситуации такие же, как при команде ADD. |