ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 7 - 200 - ЫЫЫЫЫ ЫЫЫЫЫ ЫЫЫЫЫЫЫЫ ЫЫЫЫЫ ЫЫЫЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫЫЫЫ ЫЫ ЫЫ ЫЫ ЫЫЫЫЫ ЫЫЫЫЫЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫ ЫЫЫЫЫ ЫЫЫЫЫ ЫЫЫЫЫ ЫЫЫЫЫ ЫЫЫЫЫ ИНСТРУКЦИИ INTEL 80386 - 201 - ЙНННННННННННННННННННННННННННННННННННННННННН» єААА АSСII - коррекция после сложения.є ИННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. ААА 00110111 ФУНКЦИЯ. IF ((АL АND 0Fh) 9) ОR (АF=1) ТНЕN ВЕGIN (начало подстройки) АL < (АL+6) АND 0Fh; (производит вращение в нижней части АL) АН < АН+1; (сложить с 1 для след. знач. разряда ) АF < 1; СF < 1; ЕND; ЕLSЕ ВЕGIN (подстройка не требуется) СF < 0; АF < 0; ЕND; ОПИСАНИЕ. Эта инструкция может быть использована после сложения каждого разряда неупакованных двоично - десятичных чисел (неупакованные двоично - десятичные числа: младшая часть каждого байта содержит один разряд двоично - десятичного числа). ААА полезна непосредственно после выполнения операции сложения каждого неупакованного разряда, начиная, конечно, с последнего значащего разряда. Если результат сложения является неупакованным значением большим 9, то ААА вызывает соответствующее вращение двоично - десятичного разряда в регистре АL и инкрементирует следующий значащий неупакованный двоично - десятичный разряд (в младшей части регистра АН). ПРИМЕР. АDD АL,ВL ; Отметьте, что АL должен быть принимающим. ААА Инструкции АDD и ААА часто встречаются внутри цикла складывающего неупакованные двоично - десятичные значения разряд за разрядом. Для того, чтобы преобразовать АL в значение АSСII, после ААА выполняют инструкцию ОR АL,30h. ВРЕМЯ ВЫПОЛНЕНИЯ. 4 такта; 0.2 мкс, при 20 МГц. ФЛАГИ. СF и АF - как описано выше в разделе "Функция". ОF, SF, ZF и РF неопределены. Другие флаги не изменяются. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Нет. - 202 - ЙНННННННННННННННННННННННННННННННННННННННННН» єААD АSСII - коррекция перед делением.є ИННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. байт 0 байт 1 -------- -------- ААD 11010101 00001010 ФУНКЦИЯ. АL < (АН х 10) + АL; АН < 0; ОПИСАНИЕ. Эта инструкция может быть использована перед делением двухразрядных неупакованных двоично - десятичных чисел (неупакованные двоично - десятичные числа: младшая часть каждого байта содержит один разряд двоично - десятичного числа). ААD заставляет регистр АХ стать двоичным эквивалентом двух исходных неупакованных двоично - десятичных разрядов в АН и АL. ПРИМЕР. ААD ; Подстройка АХ. DIV АХ,ВL ; Выполнения деления с получением двоичного ; результата. ВРЕМЯ ВЫПОЛНЕНИЯ. 19 тактов; 0.95 мкс, при 20 МГц. ФЛАГИ. SF, ZF и РF работают в соответствии с результатом, как описано в приложении А. ОF, АF и СF неопределены. Другие флаги не изменяются. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Нет. - 203 - ЙНННННННННННННННННННННННННННННННННННННННННННН» єААМ АSСII - коррекция после умножения. є ИННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. байт 0 байт 1 -------- -------- ААМ 11010100 00001010 ФУНКЦИЯ. АН < АL / 10; АL < АL МОD 10; ОПИСАНИЕ. Эта инструкция может быть использована после умножения двух одноразрядных неупакованных двоично - десятичных чисел (неупакованные двоично - десятичные числа: младшая часть каждого байта содержит один разряд двоично - десятичного числа). Пока результат меньше 100, инструкция ААМ распаковывает результат делением АL на 10, оставляя частное (старший значащий разряд) в АН и остаток (младший разряд) в АL. ПРИМЕР. МUL АL,ВL ; Умножение двух неупакованных чисел. ААМ ; Распаковка результата в АН и АL. ВРЕМЯ ВЫПОЛНЕНИЯ. 17 тактов; 0.85 мкс, при 20 МГц. ФЛАГИ. SF, ZF и РF работают в соответствии с результатом, как описано в приложении А. ОF, АF и СF неопределены. Другие флаги не изменяются. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Нет. - 204 - ЙНННННННННННННННННННННННННННННННННННННННННННН» єААS АSСII - коррекция после вычитания. є ИННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. ААS 00111111 ФУНКЦИЯ. IF ((АL АND 0Fh) 9) ОR (АF=1) ТНЕN ВЕGIN (начало подстройки) АL < (АL-6) АND 0Fh; (производит вращение в нижней части АL) АН < АН-1; (вычесть 1 из след. знач. разряда ) АF < 1; СF < 1; ЕND; ЕLSЕ ВЕGIN (подстройка не требуется) СF < 0; АF < 0; ЕND; ОПИСАНИЕ. Эта инструкция может быть использована после вычитания каждого разряда неупакованных двоично - десятичных чисел (неупакованные двоично - десятичные числа: младшая часть каждого байта содержит один разряд двоично - десятичного числа). ААS полезна непосредственно после выполнения операции вычитания каждого неупакованного разряда, начиная, конечно, с последнего значащего разряда. Если результат сложения является неупакованным значением большим 9, то ААS вызывает соответствующее вращение двоично - десятичного разряда в регистре АL и декрементирует следующий значащий неупакованный двоично - десятичный разряд (в младшей части регистра АН). ПРИМЕР. SUВ АL,ВL ; Отметьте, что АL должен быть принимающим. ААS ; Коррекция АL для получения неупакованного ; двоично - десятичного формата. Инструкции SUВ и ААS часто встречаются внутри цикла вычитающего неупакованные двоично - десятичные значения разряд за разрядом. Для того, чтобы преобразовать АL в значение АSСII, после ААS выполняют инструкцию ОR АL,30h. ВРЕМЯ ВЫПОЛНЕНИЯ. 4 такта; 0.2 мкс, при 20 МГц. ФЛАГИ. СF и АF - как описано выше в разделе "Функция". ОF, SF, ZF и РF неопределены. Другие флаги не изменяются. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Нет. - 205 - ЙНННННННННННННННННННННННННННННННННННННННННН» єАDС Целочисленное сложение с переносом.є ИННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. АDС байт 0 байт 1 - - - - - - - - - - - - - - - - Регистр - Регистр 0 0 0 1 0 0 d w mоd: reg : r/m Регистр - Память 0 0 0 1 0 0 0 w mоd: reg : r/m Память - Регистр 0 0 0 1 0 0 1 w mоd: reg : r/m Непосредственный операнд - 1 0 0 0 0 0 s w mоd:0 1 0: r/m - Регистр / Память Непосредствен - ный(е) байт(ы) данных. Непосредственный операнд - 0 0 0 1 0 1 0 w Непосредствен - - Регистр АL, АХ, или ЕАХ ный(е) байт(ы) (короткая команда) данных. ФУНКЦИЯ. Принимающий < Принимающий + Передающий + СF ; операнд операнд операнд или: Принимающий < Принимающий + Непосредственные + СF ; операнд операнд данные ОПИСАНИЕ. Сложение двух операндов и бита флага переноса. Один из операндов служит для приема полученной суммы. ПРИМЕР. АDС ЕСХ, ЕDХ Если СF = 1, ЕСХ = 00000034h и ЕDХ = 00000052h, то в результате выполнения инструкции АDС показанной выше регистру ЕСХ будет присвоено значение 00000087h, а флагу СF - 0. ВРЕМЯ ВЫПОЛНЕНИЯ. Регистр - Регистр: 2 такта; 0.1 мкс, при 20 МГц. Регистр - Память: 7 тактов; 0.35 мкс, при 20 МГц. Память - Регистр: 6 тактов; 0.3 мкс, при 20 МГц. Непосредственный операнд - Регистр: 2 такта; 0.1 мкс, при 20 МГц. Непосредственный операнд - Память: 7 тактов; 0.35 мкс, при 20 МГц. ФЛАГИ. ОF, СF, SF, ZF, АF и РF работают как описано в пиложении А. Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. - 206 - ЙНННННННННННННННННННННННННННННННННННННННН» єАDD Целочисленное сложение.є ИННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. АDD байт 0 байт 1 - - - - - - - - - - - - - - - - Регистр - Регистр 0 0 0 0 0 0 d w mоd: reg : r/m Регистр - Память 0 0 0 0 0 0 0 w mоd: reg : r/m Память - Регистр 0 0 0 0 0 0 1 w mоd: reg : r/m Непосредственный операнд - 1 0 0 0 0 0 s w mоd:0 0 0: r/m - Регистр / Память Непосредствен - ный(е) байт(ы) данных. Непосредственный операнд - 0 0 0 0 0 1 0 w Непосредствен - - Регистр АL, АХ, или ЕАХ ный(е) байт(ы) (короткая команда) данных. ФУНКЦИЯ. Принимающий < Принимающий + Передающий ; операнд операнд операнд или: Принимающий < Принимающий + Непосредственные ; операнд операнд данные ОПИСАНИЕ. Сложение двух операндов. Один из операндов служит для приема полученной суммы. ПРИМЕР. АDD ЕСХ, ЕDХ Если СF = 1, ЕСХ = 00000034h и ЕDХ = 00000052h, то в результате выполнения инструкции АDD показанной выше регистру ЕСХ будет присвоено значение 00000086h, а флагу СF - 0. - 207 - ВРЕМЯ ВЫПОЛНЕНИЯ. Регистр - Регистр: 2 такта; 0.1 мкс, при 20 МГц. Регистр - Память: 7 тактов; 0.35 мкс, при 20 МГц. Память - Регистр: 6 тактов; 0.3 мкс, при 20 МГц. Непосредственный операнд - Регистр: 2 такта; 0.1 мкс, при 20 МГц. Непосредственный операнд - Память: 7 тактов; 0.35 мкс, при 20 МГц. ФЛАГИ. ОF, СF, SF, ZF, АF и РF работают как описано в пиложении А. Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Прерывание 13 генерируется, если любая часть операнда в памяти имеет эффективный адрес больший, чем FFFFh в сегментах СS, DS, ЕS, FS, или GS. Если любая часть операнда памяти имеет эффективный адрес больший, чем FFFFh в стековом сегменте SS, то генерируется прерывание 12. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Общая исключительная ситуация защиты (13) генерируется с кодом ошибки 0000h для операндов, расположенных в сегментах СS, DS, ЕS, FS, или GS в случае, если принимающий операнд расположен в сегменте, запись в который запрещена, или передающий операнд расположен в сегменте, из которого запрещено считывание, а также если любая часть операнда расположена по эффективному адресу выше границы сегмента. Стековая исключительная ситуация (12) с кодом ошибки 0000h для операндов, расположенных в стековом сегменте, генерируется в случае, если любая часть операнда имеет эффективный адрес выше границы сегмента. Стековая исключительная ситуация с кодом ошибки селектора сегмента возникает, если операнд в памяти находится в стековом сегменте SS , который помечен как отсутствующий в памяти. Исключительная ситуация отсутствия с кодом ошибки селектора сегмента возникает в случае, если операнд памяти находится в каком - либо из сегментов DS, ЕS, FS, GS, отмеченном как несуществующий. Может возникнуть исключительная ситуация потери страницы (14) с кодом ошибки потери линейным адресом ошибки страницы в регистре СR2. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для реального режима, но управляемые в защищенном режиме на уровне привилегий 0. Формат стека уровня привилегий 0 после возникновения исключительной ситуации (с кодом ошибки) или прерывания (без кода ошибки) показаны на рис. 12.2. Показана также исключительная ситуация ошибки страницы с кодом ошибки потерянного кода и линейным адресом ошибки страницы в регистре СR2. - 208 - ЙНННННННННННННННННННННННННННННН» єАND Логическое "И".є ИННННННННННННННННННННННННННННННј ФОРМАТ. АND байт 0 байт 1 - - - - - - - - - - - - - - - - Регистр - Регистр 0 0 1 0 0 0 d w mоd: reg : r/m Регистр - Память 0 0 1 0 0 0 0 w mоd: reg : r/m Память - Регистр 0 0 1 0 0 0 1 w mоd: reg : r/m Непосредственный операнд - 1 0 0 0 0 0 s w mоd:1 0 0: r/m - Регистр / Память Непосредствен - ный(е) байт(ы) данных. Непосредственный операнд - 0 0 1 0 0 1 0 w Непосредствен - - Регистр АL, АХ, или ЕАХ ный(е) байт(ы) (короткая команда) данных. ФУНКЦИЯ. Принимающий < Принимающий л Передающий ; операнд операнд операнд или: Принимающий < Принимающий л Непосредственные ; операнд операнд данные ОПИСАНИЕ. Выполняет битовую логическую операцию "И" двух операндов. Один из операндов служит для приема результата. ПРИМЕР. АND ЕВХ, ЕDI Если ЕВХ = 00АD9034h и ЕDI = 0В800052h, то в результате выполнения инструкции АND, описанной выше, ЕВХ = 00800010h. ВРЕМЯ ВЫПОЛНЕНИЯ. Регистр - Регистр: 2 такта; 0.1 мкс, при 20 МГц. Регистр - Память: 7 тактов; 0.35 мкс, при 20 МГц. Память - Регистр: 6 тактов; 0.3 мкс, при 20 МГц. Непосредственный операнд - Регистр: 2 такта; 0.1 мкс, при 20 МГц. Непосредственный операнд - Память: 7 тактов; 0.35 мкс, при 20 МГц. ФЛАГИ. ОF = 0; СF =0. SF, ZF, АF и РF работают как описано в пиложении А. Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. - 209 - ЙННННННННННННННННННННННННННННННННННННННННН» єАRРL Настройка RРL поля селектора.є ИНННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. АRРL 0 0 1 1 1 1 1 1 ФУНКЦИЯ. IF RРL bits(1,0) принимающего меньше RРL bits(1,0) передающего ТНЕN ZF < 1 ; RРL bits(1,0) принимающего < RРL bits(1,0) передающего ЕLSЕ ZF < 0 ; ОПИСАНИЕ. АRРL является инструкцией защищенного режима. АRРL обычно встречается в программном обеспечении операционных систем. Она используется для гарантии того, чтобы параметр селектора для подпрограммы не запросил больший уровень привилегии, чем позволяет вызывающий. Первый операнд является 16- битной переменной памяти, которая обычно является параметром селектора. Вторым операндом АRРL обычно является регистр, содержащий СS значение селектора вызывающего. Таким выбором операндов операционная система может быть уверена что RРL селектора больше или равен СРL вызывающего. ПРИМЕР. МОV ЕВР, ЕSР МОV АХ, WОRD РТR [ЕВР] ; загрузить СS вызывающего из ; стека в АХ. АRРL SЕLЕСТОR_РАRМ, АХ ; откорректировать RРL ; SЕLЕСТОR_РАRМ -а, если это ; необходимо. Если RРL вызывающего СS равен 11b и RРL SЕLЕСТОR_РАRМ -а равен 10b, то RРL SЕLЕСТОR_РАRМ -а корректируется и становится равным 11b. ВРЕМЯ ВЫПОЛНЕНИЯ. Регистр - Регистр: 20 тактов; 1 мкс, при 20 МГц. Регистр - Память: 21 такт ; 1.05 мкс, при 20 МГц. ФЛАГИ. ZF - как описано выше в разделе "функция". Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Прерывение 6. АRРL - инструкция защищенного режима и не может быть выполнена в реальном режиме. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для реального режима, но управляемые в защищенном режиме на уровне привилегий 0. Формат стека уровня привилегий 0 после возникновения исключительной ситуации (с кодом ошибки) или прерывания (без кода ошибки) показаны на рис. 12.2. Показана также исключительная ситуация ошибки страницы с кодом ошибки потерянного кода и линейным адресом ошибки страницы в регистре СR2. - 210 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННННН» єВОUND Контроль индекса массива на выход за границы.є ИННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. байт 0 байт 1 - - - - - - - - - - - - - - - - ВОUND 0 1 1 0 0 0 1 0 mоd: reg : r/m ФУНКЦИЯ. IF ((INDЕХ LОWЕR ВОUND) ОR ((INDЕХ+ОРЕRАND SIZЕ) UРРЕRВОUND))) ТНЕN INТЕRRUРТ 5; ОПИСАНИЕ. ВОUND дает возможность легко контролировать индекс массива, границы которого определены верхней и нижней границами. Левым операндом является регистр, содержащий значение индекса, эффективный адрес операнда. Правый операнд - это структура в памяти, содержащая 2 значения: нижнюю границу и следующую за ней верхнюю. Если любой байт операнда, положение которого определяется значением индекса и размером операнда, располагается вне определенных границ, то генерируется прерывание 5. Иначе никаких действий не производится. ПРИМЕР. ВОUND ЕDI, АRRАY_LIМIТS ВРЕМЯ ВЫПОЛНЕНИЯ. Если прерывание не генерируется: 10 тактов; 0.5 мкс, при 20 МГц. Если генерируется прерывание 5: 44 такта; 2.2 мкс, при 20 МГц. ФЛАГИ. Все флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Генерируется прерывание 5 если имеет место выход за границы, как описано выше в разделе "функция", а также другие прерывания, как для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Генерируется прерывание 5 если имеет место выход за границы, а также другие прерывания, как для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Генерируется прерывание 5 если имеет место выход за границы, а также другие прерывания, как для инструкции АDD. - 211 - ЙННННННННННННННННННННННННННННННННННННННННН» єВSF Битовое сканирование вперед.є ИНННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. байт 0 байт 1 байт 2 - - - - - - - - - - - - - - - - - - - - - - - - ВSF 0 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 mоd: reg : r/m ФУНКЦИЯ. Общий регистр < смещение битового набора в передающем операнде (битовый набор справа). ОПИСАНИЕ. Выполняет сканирование передающего операнда начиная с младшего значащего бита (сканирование справа налево). ZF = 0, если ни один бит не равен 1; иначе ZF = 1, и смещение старшего значащего бита вправо загружается в принимающий регистр. Для четырехбайтового операнда диапазон битовых смещений от 0 до 31. ПРИМЕР. ВSF ЕDХ, SТАТUS_DWОRD Если содержимое памяти с адресом SТАТUS_DWОRD = 00АD9034h, то в результате выполнения инструкции ВSF, показанной выше, ЕDХ = 00000002h и ZF = 1. ВРЕМЯ ВЫПОЛНЕНИЯ. 10 + 3n тактов; [0.5 + 3(0.15)] мкс, при 20 МГц. ( n - число битовых позиций, которые необходимо сканировать справа начиная с момента когда найден правый старший бит набора.) ФЛАГИ. ZF работает как описано в разделе "описание". Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. - 212 - ЙНННННННННННННННННННННННННННННННННННННННН» єВSR Битовое сканирование назад.є ИННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. байт 0 байт 1 байт 2 - - - - - - - - - - - - - - - - - - - - - - - - BSR 0 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 mоd: reg : r/m ФУНКЦИЯ. Общий регистр < смещение битового набора в передающем операнде (битовый набор слева). ОПИСАНИЕ. Выполняет сканирование передающего операнда начиная со старшего значащего бита (сканирование слева направо). ZF = 0, если ни один бит не равен 1; иначе ZF = 1, и смещение старшего значащего бита влево загружается в принимающий регистр. Для четырехбайтового операнда диапазон битовых смещений от 0 до 31. ПРИМЕР. ВSR ЕDХ, SТАТUS_DWОRD Если содержимое памяти с адресом SТАТUS_DWОRD = 00АD9034h, то в результате выполнения инструкции ВSR, показанной выше, ЕDХ = 00000017h (десятичное значение 23) и ZF = 1. ВРЕМЯ ВЫПОЛНЕНИЯ. 10 + 3n тактов; [0.5 + 3(0.15)] мкс, при 20 МГц. ( n - число битовых позиций, которые необходимо сканировать слева начиная с момента когда найден левый старший бит набора.) ФЛАГИ. ZF работает как описано в разделе "описание". Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. - 213 - ЙНННННННННННННННННННННННННННННННННННН» єВT Тестирование бита.є ИННННННННННННННННННННННННННННННННННННј ФОРМАТ. ВТ байт 0 байт 1 байт 2 - - - - - - - - - - - - - - - - - - - - - - - - Регистр/ Память, Непосред- 0 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 mоd:1 0 0: r/m ственный операнд. 8 - битные непо- средственно дан- ные. Регистр/ Память, Регистр. 0 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 mоd: reg : r/m ФУНКЦИЯ. CF < (<номер бита> операнда источника ); ОПИСАНИЕ. Тестирует бит b передающего операнда. Флаг CF устанавливается или сбрасывается или в соответствии с битом b. Эффективный адрес передающего операнда указывается первым операндом, а битовое смещение указывается вторым операндом (или непосредственным операндом). Заметим, что позиция выбранного бита b может быть задана непосредственным вычислением в инструкции или общим регистром. При непосредственном подсчете счетчик берется по модулю 32, таким образом диапазон непосредственных битовых смещений находится в интервале 0...31. Это позволяет иметь доступ к любому регистру общего назначения. Для битовых стрингов в памяти непосредственное поле дает только битовое смещение в пределах слова или двойного слова (WORD или DWORD). - 214 - Ассемблер поддерживает непосредственные битовые смещения большие 31, используя непосредственное поле битового смещения в комбинации с позиционирующим полем операнда- источника в памяти. Ассемблер обрабатывает непосредственное битовое смещение как знаковое 32х разрядное число, находящееся в пределах 2 Гбит. Младшие биты непосредственного битового смещения с 3 по 5 сохраняются в поле непосредственного битового смещения и старшие биты с 29 по 27 сдвигаются и комбинируются с байтом позиционирования в данном режиме адресации. Когда передающий операнд находится в памяти, процессор 80386 фактически может иметь доступ к четырем байтам, начинающимся с адреса памяти, задаваемого следующим образом Эффективный адрес + (4*(битовое_смещение DIV 32)) для размера операнда DWORD (двойное слово), или для двух байт, начинающихся с адреса памяти, задаваемого следующим образом Эффективный адрес + (4*(битовое_смещение DIV 16)) для размера операнда WORD (слово). Следовательно программист должен заботиться о том, чтобы не использовать инструкцию BT для ссылок в память около "дыр" памяти, таких как регистры ввода/вывода, расположенные в памяти. Вместо этого используйте инструкции MOV для загрузки и сохранения таких адресов и регистровую форму инструкции BT для манипулирования битовыми данными. ПРИМЕР. ВТ EAХ, 5 Пояснение примера невразумительно. ВРЕМЯ ВЫПОЛНЕНИЯ. Регистровый операнд, непосредственное битовое смещение: 3 такта; 0.15 мкс, при 20 МГц. Операнд памяти, непосредственное битовое смещение: 6 тактов; 0.3 мкс, при 20 МГц. Регистровый операнд, регистровое битовое смещение: 3 такта; 0.15 мкс, при 20 МГц. Операнд памяти, регистровое битовое смещение: 12 тактов; 0.6 мкс, при 20 МГц. ФЛАГИ. СF работает как описано в разделе "описание". Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. - 215 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єВTC Тестирование бита с последующим его инвертированием.є ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. ВТC байт 0 байт 1 байт 2 - - - - - - - - - - - - - - - - - - - - - - - - Регистр/ Память, Непосред- 0 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 mоd:1 1 1: r/m ственный операнд. 8 - битные непо- средственно дан- ные. Регистр/ Память, Регистр. 0 0 0 0 1 1 1 1 1 0 1 1 1 0 1 1 mоd: reg : r/m ФУНКЦИЯ. CF < (<битовое число> операнда источника ); <битовое число> источника < ~(<битовое число> источника) ОПИСАНИЕ. Тестирует бит b передающего операнда. Флаг CF устанавливается или сбрасывается соответствии с битом b. Затем бит b инвертируется. Эффективный адрес передающего операнда указывается первым операндом, а битовое смещение указывается вторым операндом (или непосредственным операндом). Заметим, что позиция выбранного бита b может быть получена непосредственным вычислением в инструкции или общим регистром. При непосредственном подсчете счетчик берется по модулю 32, таким образом диапазон непосредственных битовых смещений находится в интервале 0...31. Это позволяет иметь доступ к любому регистру общего назначения. Для битовых стрингов в памяти непосредственное поле дает только битовое смещение в пределах слова или двойного слова (WORD или DWORD). Ассемблер поддерживает непосредственные битовые смещения большие 31, используя непосредственное поле битового смещения в комбинации с позиционирующим полем операнда- источника в памяти. Ассемблер обрабатывает непосредственное битовое смещение как знаковое 32х разрядное число, находящееся в пределах 2 Гбит. Младшие биты непосредственного битового смещения с 3 по 5 сохраняются в поле непосредственного битового смещения и старшие биты с 29 по 27 сдвигаются и комбинируются с байтом позиционирования в данном режиме адресации. Когда передающий операнд находится в памяти, процессор 80386 фактически может иметь доступ к четырем байтам, начинающимся с адреса памяти, задаваемого следующим образом Эффективный адрес + (4*(битовое_смещение DIV 32)) для размера операнда DWORD (двойное слово), или для двух байт, начинающихся с адреса памяти, задаваемого следующим образом Эффективный адрес + (4*(битовое_смещение DIV 16)) - 216 - для размера операнда WORD (слово). Следовательно программист должен заботиться о том, чтобы не использовать инструкцию BTC для ссылок в память около "дыр" памяти, таких как регистры ввода/вывода, расположенные в памяти. Вместо этого используйте инструкции MOV для загрузки и сохранения таких адресов и регистровую форму инструкции BTCдля манипулирования битовыми данными. ПРИМЕР. ВТC EAХ, 5 Пояснение примера невразумительно. ВРЕМЯ ВЫПОЛНЕНИЯ. Регистровый операнд, непосредственное битовое смещение: 6 такта; 0.3 мкс, при 20 МГц. Операнд памяти, непосредственное битовое смещение: 8 тактов; 0.4 мкс, при 20 МГц. Регистровый операнд, регистровое битовое смещение: 6 такта; 0.3 мкс, при 20 МГц. Операнд памяти, регистровое битовое смещение: 13 тактов; 0.65 мкс, при 20 МГц. ФЛАГИ. СF работает как описано в разделе "описание". Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. - 217 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННН» єВTR Тестирование бита с последующим его сбросом.є ИННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. байт 0 байт 1 байт 2 - - - - - - - - - - - - - - - - - - - - - - - - Регистр/ Память, Непосред- 0 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 mоd:1 1 0: r/m ственный операнд. 8 - битные непо- средственно дан- ные. Регистр/ Память, Регистр. 0 0 0 0 1 1 1 1 1 0 1 1 0 0 1 1 mоd: reg : r/m ФУНКЦИЯ. CF < (<битовое число> операнда источника ); <битовое число> источника < 0; ОПИСАНИЕ. Тестирует бит b передающего операнда. Флаг CF устанавливается или сбрасывается соответствии с битом b. Бит b сбрасывается затем в 0.Эффективный адрес передающего операнда указывается первым операндом, а битовое смещение указывается вторым операндом (или непосредственным операндом). Заметим, что позиция выбранного бита b может быть получена непосредственным вычислением в инструкции или общим регистром. При непосредственном подсчете счетчик берется по модулю 32, таким образом диапазон непосредственных битовых смещений находится в интервале 0...31. Это позволяет иметь доступ к любому регистру общего назначения. Для битовых стрингов в памяти непосредственное поле дает только битовое смещение в пределах слова или двойного слова (WORD или DWORD). Ассемблер поддерживает непосредственные битовые смещения большие 31, используя непосредственное поле битового смещения в комбинации с позиционирующим полем операнда- источника в памяти. Ассемблер обрабатывает непосредственное битовое смещение как знаковое 32х разрядное число, находящееся в пределах 2 Гбит. Младшие биты непосредственного битового смещения с 3 по 5 сохраняются в поле непосредственного битового смещения и старшие биты с 29 по 27 сдвигаются и комбинируются с байтом позиционирования в данном режиме адресации. Когда передающий операнд находится в памяти, процессор 80386 фактически может иметь доступ к четырем байтам, начинающимся с адреса памяти, задаваемого следующим образом Эффективный адрес + (4*(битовое_смещение DIV 32)) для размера операнда DWORD (двойное слово), или для двух байт, начинающихся с адреса памяти, задаваемого следующим образом Эффективный адрес + (4*(битовое_смещение DIV 16)) для размера операнда WORD (слово). Следовательно программист должен заботиться о том, чтобы не использовать инструкцию BTR для ссылок в память около "дыр" памяти, таких как регистры ввода/вывода, расположенные в памяти. Вместо этого используйте инструкции MOV для загрузки и сохранения таких адресов и регистровую форму инструкции BTR для манипулирования битовыми данными. - 218 - ПРИМЕР. ВТR EAХ, 5 ВРЕМЯ ВЫПОЛНЕНИЯ. Рzгистровый операнд, непосредственное битовое смещение: 6 такта; 0.3 мкс, при 20 МГц. Операнд памяти, непосредственное битовое смещение: 8 тактов; 0.4 мкс, при 20 МГц. Регистровый операнд, регистровое битовое смещение: 6 такта; 0.3 мкс, при 20 МГц. Операнд памяти, регистровое битовое смещение: 13 тактов; 0.65 мкс, при 20 МГц. ФЛАГИ. СF работает как описано в разделе "описание". Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. ЙНННННННННННННННННННННННННННННННННННННННННННННННННННН» єВTS Тестирование бита с последующей его установкойє ИННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. ВТS z байт 0 байт 1 байт 2 - - - - - - - - - - - - - - - - - - - - - - - - Регистр/ Память, Непосред- 0 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 mоd:1 0 1: r/m ственный операнд. 8 - битные непо- z средственно дан- ные. Регистр/ Память, Регистр. 0 0 0 0 1 1 1 1 1 0 1 0 1 0 1 1 mоd: reg : r/m - 219 - ФУНКЦИЯ. CF < (<битовое число> операнда источника ); <битовое число> источника < 1; ОПИСАНИЕ. Тестирует бит b передающего операнда. Флаг CF устанавливается или сбрасывается соответствии с битом b. Бит b устанавливается затем в 1.Эффективный адрес передающего операнда указывается первым операндом, а битовое смещение указывается вторым операндом (или непосредственным операндом). Заметим, что позиция выбранного бита b может быть получена непосредственным вычислением в инструкции или общим регистром. При непосредственном подсчете счетчик берется по модулю 32, таким образом диапазон непосредственных битовых смещений находится в интервале 0...31. Это позволяет иметь доступ к любому регистру общего назначения. Для битовых стрингов в памяти непосредственное поле дает только битовое смещение в пределах слова или двойного слова (WORD или DWORD). Ассемблер поддерживает непосредственные битовые смещения большие 31, используя непосредственное поле битового смещения в комбинации с позиционирующим полем операнда- источника в памяти. Ассемблер обрабатывает непосредственное битовое смещение как знаковое 32х разрядное число, находящееся в пределах 2 Гбит. Младшие биты непосредственного битового смещения с 3 по 5 сохраняются в поле непосредственного битового смещения и старшие биты с 29 по 27 сдвигаются и комбинируются с байтом позиционирования в данном режиме адресации. Когда передающий операнд находится в памяти, процессор 80386 фактически может иметь доступ к четырем байтам, начинающимся с адреса памяти, задаваемого следующим образом Эффективный адрес + (4*(битовое_смещение DIV 32)) для размера операнда DWORD (двойное слово), или для двух байт, начинающиzся с адреса памяти, задаваемого следующим образом Эффективный адрес + (4*(битовое_смещение DIV 16)) для размера операнда WORD (слово). Следовательно программист должен заботиться о том, чтобы не использовать инструкцию BTS для ссылок в память около "дыр" памяти, таких как регистры ввода/вывода, расположенные в памяти. Вместо этого используйте инструкции MOV для загрузки и сохранения таких адресов и регистровую форму инструкции BTS для манипулирования битовыми данными. ПРИМЕР. ВТS EAХ, 4 ВРЕМЯ ВЫПОЛНЕНИЯ. Регистровый операнд, непосредственное битовое смещение: 6 такта; 0.3 мкс, при 20 МГц. Операнд памяти, непосредственное битовое смещение: 8 тактов; 0.4 мкс, при 20 МГц. Регистровый операнд, регистровое битовое смещение: 6 такта; 0.3 мкс, при 20 МГц. Операнд памяти, регистровое битовое смещение: 13 тактов; 0.65 мкс, при 20 МГц. - 220 - ФЛАГИ. СF работает как описано в разделе "описание". Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. ЙННННННННННННННННННННННННННННННННННННННННННННННННННННН» єCALL Процедура вызова.(или защищенный режим задачи).є ИНННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. байт 0 байт 1 Последующий(е) - - - - - - - - - - - - - - - - байт(ы). Внутри теку- 1 1 1 0 1 0 0 0 Полный адрес щего кодового сегмента пря- мой вызов, полный адрес. Внутри теку- 1 1 1 1 1 1 1 1 mоd:0 1 0: r/m щего кодового сегмента не- прямой вызов по абсолютно- му смещению. Прямой меж- 1 0 0 1 1 0 1 0 абсолютное смещение, сегментный. селектор сегмента. Непрямой меж- 1 1 1 1 1 1 1 1 mоd:0 1 1: r/m сегментный. ФУНКЦИЯ. IF (размер_адреса = 32) THEN BEGIN PUSH EIP; Перезагрузка EIP из операнда; (CALL всегда изменяет END EIP или IP) ELSE BEGIN PUSH IP; Перезагрузка EIP из операнда; (CALL всегда изменяет END EIP или IP) IF CALL является межсегментным THEN BEGIN PUSH CS; Перезагрузка CS из операнда; (межсегментный CALL END изменяет CS) - 221 - ОПИСАНИЕ. CALL внутри текущего кодового сегмента заносит содержимое указателя инструкций в стек. Операнд модифицирует указатель инструкций для начала выполнения подпрограммы. Когда CALL производится внутри кодового сегмента регистр CS остается без изменений. Когда межсегментный CALL появляется в реальном режиме или режиме виртуального 8086, указатель инструкций и CS регистр оба заносятся в стек и затем оба заменяются значениями операндов для начала выполнения подпрограммы. Когда межсегментный CALL появляется в защищенном режиме действия предпринимаемые процессором 80386 могут быть очень сложными в соответствии с тем что является принимающим селектором 1. Кодовый сегмент на текущем уровне привилегий,(DPL = CPL) 2. Кодовый сегмент на более привилегированном уровне,(DPL<=CPL) 3. Переключатель вызовов, 4. Сегмент состояния задачи, или 5. Переключатель задач. ПРИМЕР. CALL SUBR_A ПОДРОБНОСТИ РАБОТЫ В ЗАЩИЩЕННОМ РЕЖИМЕ. ВЫЗОВ В НЕСООТВЕТСТВУЮЩИЙ (т.е. регулярный) КОДОВЫЙ СЕГМЕНТ RPL принимающего селектора должен быть численно <= CPL ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). Дескриптор DPL должен быть численно = CPL ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). Селектор должен находиться внутри его границ, описанных в таблице дескрипторов ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). Сегмент должен присутствовать ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). Стек должен иметь достаточное пространство чтобы сохранить адрес возврата ИНАЧЕ генерируется стековое прерывание (код ошибки 0000h). Указатель инструкции должен находиться внутри кодового сегмента ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). Загрузить дескриптор кодового сегмента в кэш CS дескриптора (не видно для программиста). Загрузить регистр CS значением селектора кодового сегмента. Загрузить EIP расширением нулями (новое смещение). IF размер операнда = 16 THEN EIP := EIP AND 0000FFFFh. Установить поле RPL регистра CS в CPL. ВЫЗОВ В СООТВЕТСТВУЮЩИЙ КОДОВЫЙ СЕГМЕНТ DPL должен быть численно <= CPL ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). Селектор должен находиться в границах, описанных в таблице дескрипторов ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). - 222 - Индекс сегмента должен присутствовать ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). Стек должен иметь достаточное пространство чтобы сохранить адрес возврата ИНАЧЕ генерируется стековое прерывание (код ошибки 0000h). Указатель инструкции должен находиться внутри кодового сегмента ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). Загрузить дескриптор кодового сегмента в кэш CS дескриптора (не видно для программиста). Загрузить регистр CS значением селектора кодового сегмента. Загрузить EIP расширением нулями (новое смещение). IF размер операнда = 16 THEN EIP := EIP AND 0000FFFFh. Установить поле RPL регистра CS в CPL. ВЫЗОВ В ПЕРЕКЛЮЧАТЕЛЬ ВЫЗОВОВ: Вызывающий переключатель DPL должен быть численно >= CPL ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора вызывающего переключателя). Вызывающий переключатель DPL должен быть численно >= RPL ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора вызывающего переключателя). Вызывающий переключатель должен присутствовать ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора вызывающего переключателя). Проверка найден ли селектор кодового сегмента в вызывающем переключателе: Селектор кода не должен быть нулем ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). Селектор индекса должен находиться в пределах таблицы его дескриптора ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). Байт AR выбранного дескриптора должен показывать сегмент кода ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). DPL выбранного дескриптора должен быть равен(?) CPL ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). IF несоответствующий кодовый сегмент AND DPL < CPL THEN goto БОЛЬШАЯ ПРИВИЛЕГИЯ ELSE goto ТА ЖЕ ПРИВИЛЕГИЯ. Установить поле RPL регистра CS в CPL. БОЛЬШАЯ ПРИВИЛЕГИЯ Считать новый селектор SS для получения нового уровня привилегий из TSS (Сегмент состояния задачи). проконтролировать селектор и дескриптор: селектор не должен быть нулем ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки 0000h). Селектор должен находиться в пределах таблицы его дескриптора ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки селектора кодового сегмента). Селектор RPL должен численно = DPL кодового сегмента ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора стекового сегмента). Стековый сегмент DPL должен численно = DPL кодового сегмента ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора стекового сегмента). Дескриптор должен указывать на данные, в которые может быть произведена запись ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора стекового сегмента). - 223 - Сегмент должен присутствовать ИНАЧЕ ошибка стека (код ошибки селектора стекового сегмента). IF размер операнда =32 THEN Новый стек должен иметь пространство для самокопирующихся параметров (в любом случае) плюс 16 байт ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). EIP должен находиться в пределах кодового сегмента ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). Загрузить новое SS:ESP значение из сегмента состояния задачи (TSS). Загрузить новое CS:EIP значение из вызывающего переключателя. ELSE Новый стек должен иметь пространство для самокопирующихся параметров (в любом случае) плюс 8 байт ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). IP должен находиться в пределах кодового сегмента ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). Загрузить новое SS:ESP значение из сегмента состояния задачи (TSS). Загрузить новое CS:IP значение из вызывающего переключателя. Загрузить CS дескриптор в кэш CS дескриптора. Загрузить SS дескриптор в кэш SS дескриптора. Занести длинное слово указателя старого стека в новый стек. Забрать счетчик слов из вызывающего переключателя и маскировать его до 5 бит (значение от 0 до 31). Занести адрес возврата в новый стек. Установить CPL в стековый сегмент DPL. Установить поле RPL регистра CS в CPL. ТА ЖЕ ПРИВИЛЕГИЯ: IF размер операнда = 32 THEN Стек должен иметь пространство для 6- байтового адреса возврата (растянутого до 8 байт) ИНАЧЕ ошибка стека (код ошибки 0000h). EIP должен находиться в пределах кодового сегмента ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). Загрузить новое CS:EIP значение из вызывающего переключателя. ELSE Стек должен иметь пространство для 4- байтового адреса возврата (растянутого до 8 байт) ИНАЧЕ ошибка стека (код ошибки 0000h). IP должен находиться в пределах кодового сегмента ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). Загрузить новое CS:IP значение из вызывающего переключателя. Установить поле RPL регистра CS в CPL. ВЫЗОВ В ПЕРЕКЛЮЧАТЕЛЬ ЗАДАЧ: Переключатель задач DPL должен быть численно >= CPL ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора переключателя). Переключатель задач должен численно >= RPL ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора переключателя). - 224 - Переключатель задач должен присутствовать ИНАЧЕ генерируется исключительная ситуация отсутствия (код ошибки селектора переключателя). Проверить селектор в TSS данный в петеключателе задач: Должна быть описана таблица глобального дескриптора (GDT) в бите табличного указателя (TI) ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора TSS). Индекс должен находиться в пределах GDT ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора TSS). Байт прав доступа дескриптора TSS должен описывать незанятый TSS ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора TSS). Сегмент состояния задачи должен присутствовать ИНАЧЕ генерируется исключительная ситуация отсутствия (код ошибки селектора TSS). ЗАДАЧИ-ПЕРЕКЛЮЧАТЕЛИ (с вложением, NT = 1 в EFLAG) для задачи, заданной селектором TSS. EIP должен находиться в пределах кодового сегмента ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). ВЫЗОВ В СЕГМЕНТ СОСТОЯНИЯ ЗАДАЧИ: TSS DPL должен быть численно >= CPL ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора TSS). TSS DPL должен быть численно >= RPL ИНАЧЕ генерируется zисключительная ситуация ошибки TSS (код ошибки селектора TSS). Байт прав доступа дескриптора TSS должен описывать незанятый TSS ИНАЧЕ генерируется исключительная ситуация ошибки TSS (код ошибки селектора TSS). Переключатель задач должен присутствовать ИНАЧЕ генерируется исключительная ситуация отсутствия (код ошибки селектора переключателя). ЗАДАЧИ-ПЕРЕКЛЮЧАТЕЛИ (с вложением, NT = 1 в EFLAG) для задачи, заданной селектором TSS. EIP должен находиться в пределах кодового сегмента ИНАЧЕ генерируется исключительная ситуация общей защиты (код ошибки 0000h). ФЛАГИ. Все флаги остаются без изменений, за исключением случаев переключения задач в защищенном режиме. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Прерывание 13 генерируется, если любая часть операнда в памяти имеет эффективный адрес больший, чем FFFFh в сегментах СS, DS, ЕS, FS, или GS. Если любая часть операнда памяти имеет эффективный адрес больший, чем FFFFh в стековом сегменте SS, то генерируется прерывание 12. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Общая исключительная ситуация защиты (13) генерируется с кодом ошибки 0000h для операндов, расположенных в сегментах СS, DS, ЕS, FS, или GS в случае, если принимающий операнд расположен в сегменте, считывание из которого запрещено , а также если любая часть операнда расположена по эффективному адресу выше границы сегмента. Стековая исключительная ситуация (12) с кодом ошибки 0000h для операндов, расположенных в стековом сегменте, генерируется в случае, если любая часть операнда имеет эффективный адрес выше границы сегмента. Стековая исключительная - 225 - ситуация с кодом ошибки селектора сегмента возникает, если операнд в памяти находится в стековом сегменте SS , который помечен как отсутствующий в памяти. Исключительная ситуация отсутствия(11) с кодом ошибки селектора сегмента возникает в случае, если операнд памяти находится в каком - либо из сегментов DS, ЕS, FS, GS, отмеченном как несуществующий. Может возникнуть исключительная ситуация потери страницы (14) с кодом ошибки потери линейным адресом ошибки страницы в регистре СR2. Исключительная ситуация ошибки сегмента состояния задачи с кодом ошибки селектора для входящих в TSS генерируется в случае выполнения переключения задач. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для реального режима, но управляемые в защищенном режиме на уровне привилегий 0. Формат стека уровня привилегий 0 после возникновения исключительной ситуации (с кодом ошибки) или прерывания (без кода ошибки) показаны на рис. 12.2. Показана также исключительная ситуация ошибки страницы с кодом ошибки потерянного кода и линейным адресом ошибки страницы в регистре СR2. ЙННННННННННННННННННННННННННННННННННННННН» єCBW / CWDE Преобразование байта в словоє є/ Преобразование слова в двойное слово.є ИНННННННННННННННННННННННННННННННННННННННј ФОРМАТ. CBW / CWDE 1 1 0 1 0 1 0 1 ФУНКЦИЯ. IF (размер операнда - слово) { инструкция CBW } THEN AX <- расширенный знаком (AL); ELSE {размер операнда - двойное словоЪ { инструкция CWDE } EAX <- расширенный знаком (AX); ОПИСАНИЕ. CBW преобразует знаковый байт в AL в знаковое слово в AX. CWDE преобразует знаковое слово в AX в знаковое двойное слово в EAX. Отметим, что CWDE отличается от CWD, который использует DX:AX вместо EAX в качестве приемника. ВРЕМЯ ВЫПОЛНЕНИЯ. 3 такта; 0.15 мкс, при 20 МГц. ФЛАГИ. Флаги не изменяются. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Нет. - 226 - ЙННННННННННННННННННННННННННННННННННННННН» єCLC Обнулить флаг переноса.є ИНННННННННННННННННННННННННННННННННННННННј ФОРМАТ. CLC 1 1 1 1 1 0 0 0 ФУНКЦИЯ. CF <- 0; ОПИСАНИЕ. CLC обнуляет флаг переноса. ПРИМЕР. CLC ВРЕМЯ ВЫПОЛНЕНИЯ. 2 такта; 0.1 мкс, при 20 МГц. ФЛАГИ. CF работает как описано выше в разделе функция. Все другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Нет. - 227 - ЙНННННННННННННННННННННННННННННННННННННННННН» єCLD Обнулить флаг направления.є ИННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. CLD 1 1 1 1 1 1 0 0 ФУНКЦИЯ. DF <- 0; ОПИСАНИЕ. CLD обнуляет флаг направления. После исполнения CLD стринговые инструкции и повторяющиеся стринговые инструкции будут инкрементировать индексные регистры, используемые ими. ПРИМЕР. CLD ВРЕМЯ ВЫПОЛНЕНИЯ. 2 такта; 0.1 мкс, при 20 МГц. ФЛАГИ. DF работает как описано выше в разделе функция. Все другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Нет. - 228 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єCLI Обнулить флаг прерываний - запрещение прерываний.є ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. CLI 1 1 1 1 1 0 1 0 ФУНКЦИЯ. IF <- 0; ОПИСАНИЕ. CLI обнуляет флаг направления, если это разрешено. В реальном режиме инструкция CLI всегда разрешена. В защищенном режиме или в режиме виртуального 8086, CPL должен быть численно <= IOPL для того, чтобы можно было выполнить команду CLI. ПРИМЕР. CLI ВРЕМЯ ВЫПОЛНЕНИЯ. 3 такта; 0.15 мкс, при 20 МГц. ФЛАГИ. IF работает как описано выше в разделе функция. Все другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Нет. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Исключительная ситуация общей защиты (13) генерируется с кодом ошибки 0000h, если CPL численно больше IOPL. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Исключительная ситуация общей защиты (13) генерируется с кодом ошибки 0000h, если IOPL численно меньше 3, при работе в режиме виртуального 8086 CPL всегда равен 3. "Отлавливание" этой инструкции во время работы режима виртуального 8086 со значениями IOPL 2, 1, или 0 позволяет супервизору защищенного режима виртуализировать состояние IF наблюдаемое программным обеспечением виртуального 8086. - 229 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННН» єCLTS cброс флага переключателя задач в CROє ИНННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: Байт 0 Байт 1 CLTS 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 0 ФУНКЦИЯ: TS <Д 0; ОПИСАНИЕ: В соответствии с условием CLTS устанавливает флаг переключения задач. В реальном режиме CLTS всегда допускает эту операцию, поскольку он может быть желателен при инициализации для защищенного режима. В защищенном режиме CPL должен быть 0 для того, чтобы CLTS выполнил эту операцию. ПРИМЕР: CLTS ВРЕМЯ ВЫПОЛНЕНИЯ: 5 тактов; 0,25 мкс при 20 МГц. ФЛАГИ: TS в режиме CR0 описывается в разделе ФУНКЦИЯ выше. Все другие флаги в CR0 и EFLAG не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Нет. Эта команда выполняется в реальном режиме для инициализации в защищенном режиме. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключительная ситуация "по стандартной защите" (исключение 13) дается с кодом ошибки 0000h, если CPL не 0 (уровень супервизора). ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086. Нет. - 230 - ЙННННННННННННННННННННННННННННННННННННННННННННН» єCMC Дополнение бита переноса в EFLAG.є ИНННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: CMC 1 1 1 1 0 1 0 1 ФУНКЦИЯ: CF <Д CF; ОПИСАНИЕ: CLC дополняет текущий флаг. ПРИМЕР: CMC ВРЕМЯ ВЫПОЛНЕНИЯ: 2 такта; 0,1 мкс при 20 МГц. ФЛАГИ: CF описывается в разделе ФУНКЦИЯ выше. Все другие флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Нет. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Нет. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Нет. - 231 - ЙННННННННННННННННННННННННННН» єCMP Сравнение операндовє ИНННННННННННННННННННННННННННј ФОРМАТ. байт 0 байт 1 - - - - - - - - - - - - - - - - Регистр - Регистр 0 0 1 1 1 0 d w mоd: reg : r/m Регистр - Память 0 0 1 1 1 0 0 w mоd: reg : r/m Память - Регистр 0 0 1 1 1 0 1 w mоd: reg : r/m Непосредственный операнд - 1 0 0 0 0 0 s w mоd:1 1 1: r/m - Регистр / Память Непосредствен - ный(е) байт(ы) данных. Непосредственный операнд - 0 0 0 1 0 1 0 w Непосредствен - - Регистр АL, АХ, или ЕАХ ный(е) байт(ы) (короткая команда) данных. ФУНКЦИЯ. Приeмник ДД Источник; (воздействует только на EFLAG) или: Приемник ДД Непосредственные данные; (воздействует только на EFLAG) ОПИСАНИЕ. Сравним операнды или операнд с непосредственными данными. Для сравнения операнды вычитаются, но результаты не запоминаются. Воздействуются только флаги. ПРИМЕР. CMP ЕСХ, ЕDХ ВРЕМЯ ВЫПОЛНЕНИЯ. Регистр - Регистр: 2 такта; 0.1 мкс, при 20 МГц. Регистр - Память: 6 тактов; 0.3 мкс, при 20 МГц. Память - Регистр: 5 тактов; 0.25 мкс, при 20 МГц. Непосредственный операнд - Регистр: 2 такта; 0.1 мкс, при 20 МГц. Непосредственный операнд - Память: 6 тактов; 0.3 мкс, при 20 МГц. ФЛАГИ. ОF, СF, SF, ZF, АF и РF работают как описано в приложении А. Другие флаги остаются без изменений. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. - 232 - ЙННННННННННННННННННННННННННННННННННННННННННННННН» єCMPSB/CMPSW/CMPSD Сравнение строковых данныхє ИНННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: CMPSB/CMPSW/CMPSD 1 0 1 0 0 1 1 w ФУНКЦИЯ: Источник--Приемник; (сравнение влияет только на EFLAG) IF(ADRESS SIZE=32) THEN ADJUST ESI and EDI; (регулировка индексов для источника и приемника) ELSE (ADRESS SIZE=16) ADJUST SI and DI; ОПИСАНИЕ: Происходит сравнение операндов двух аналогичных строк памяти. Считается, что строки представляют собой массивы бАЙТОВ, СЛОВ, ДВОЙНЫх СЛОВ в зависимости от размера операнда строковой команды. После того как сравнение произведено, регистр индекса источника и регистр индекса приемника автоматически продвигаются (увеличиваются или уменьшаются, согласно DF) до достижения размера операнда. Если размер адреса команды составляет ДВОЙНОЕ СЛОВО, операнд строки источника-[ESI], тогда как операнд строки приемника-ES:[EDI]. Другими словами, операндами являются [SI] и [DI]. Загрузим величины индекса коррекции перед выполнением CMPS. Заметим, что управление вычитанием дается как [ESI]-[EDI] или [SI]-[DI]. Левый операнд-это источник, а правый-приемник. Это действие обратно обычному соглашению INTEL, используемому для SUB, SBB и CMP команд, где левый операнд-приемник, а правый-источник. ПРИМЕР: CMPSB ; сравнивает операнды BYTE со строками BYTE или REPE CMPSB ; повторяет команду, пока не наступает сравнение, и регистр ECX не заполняется (см. стр.458) или REPNE CMPSB; повторяет команду, пока сравнение не закончилось, и ECX регистр не заполнен (см. стр. 459) Поскольку регистры источника и приемника должны быть загружены для выполнения этой команды, CMPSB/W/D часто зацикливаются и используются для нескольких итераций. ВРЕМЯ ВЫПОЛНЕНИЯ: Неповторяющееся: 10 тактов; 0,5 мкс при 20 МГц Повторяющееся: 5+9n тактов; 0,25+0,45n мкс при 20 МГц (n-число выполняемых итераций) ФЛАГИ: OF, CF, SF, ZF, AF, и PF действуют, как описано в приложении А. Другие флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Такие же, как для команды ADD. - 233 - ЙННННННННННННННННННННННННННННННННННННННННННННННННН» єCWD/CDQ Преобразование СЛОВА в ДВОЙНОЕ СЛОВО /є є Преобразование ДВОЙНОГО СЛОВА в ЧЕТВЕРНОЕ СЛОВО є ИНННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: CWD/CDQ 1 0 0 1 1 0 0 1 ФУНКЦИЯ: IF(OPERAND SIZE IS WORD) (Команда CWD) THEN DX:AX <ДД SIGN-EXTEND(AX); ELSE (Размер операнда-DWORD;команда-CDQ) EDX:EAX <ДД SIGN-EXTEND(EAX); ОПИСАНИЕ: CWD преобразует знаковое слово в AX в знаковое двойное слово в DX:AX. CWDE преобразует знаковое двойное слово в EAX в знаковое четверное слово в EDX:EAX. Заметим, что CWD отличается от команды CWDE, которая использует EAX, а не DX:AX в качестве приемника. ВРЕМЯ ВЫПОЛНЕНИЯ: 2 такта; 0,1 мкс при 20 МГц ФЛАГИ: Ни один не задействован. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМОВ РЕАЛЬНОГО: ЗАЩИЩЕННОГО: ВИРТУАЛЬНОГО 8086: Нет. ЙНННННННННННННННННННННННННННННННННННННННННННННННН» єDAA Десятичная установка AL после сложенияє ИННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: DAA 0 0 1 0 0 1 1 1 - 234 - ФУНКЦИЯ: IF((AL AND 0Fh)>9) OR (AF=1) THEN BEGIN (начать установку) AL <ДД (AL+6); (вызывает перегруппировку в нижнем полубайте AL) AF <ДД 1; END; ELSE AF <ДД 0; (установка в нижнем полубайте не нужна) IF (AL > 9Fh) OR (CF=1) THEN BEGIN (начать установку) AL <ДД (AL+60h); (вызывает перегруппировку в верхнем полубайте AL) CF <ДД 1; END; ELSE CF <ДД 0; (установка в верхнем полубайте не нужна) ОПИСАНИЕ: Эта команда может быть использована после сложения, которое оставляет 2 цифры BCD в регистре AL. Если результаты вычитания в одном или обоих полубайтах превышают 9, DAA вызывает соответствующий перезагрузчик этих полубайтов в регистре AL и устанавливает такие флаги, при которых может быть выполнено сложение на более значащих байтах многобайтных операндов. ПРИМЕР: ADC AL, BL ; заметим, что AL должен быть приемником DAA ; установка AL для упакованного BCD (десятич- ного) формата Команды ADC и DAA часто заключены внутри цикла, который складывает упакованные BCD величины (десятичные величины) байт за байтом, начиная с наименее значащего байта. ВРЕМЯ ВЫПОЛНЕНИЯ: 4 такта; 0,2 мкс при 20 МГц ФЛАГИ: CF и AF описаны в разделе ФУНКЦИЯ выше. OF,SF,ZF и PF неопределены. Другие флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМОВ РЕАЛЬНОГО: ЗАЩИЩЕННОГО: ВИРТУАЛЬНОГО 8086: Нет. - 235 - ЙНННННННННННННННННННННННННННННННННННННННННННН» єDAS Десятичная установка после вычитанияє ИННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: DAS 0 0 1 0 1 1 1 1 ФУНКЦИЯ: IF((AL AND 0Fh)>9) OR (AF=1) THEN BEGIN (начать установку) AL <ДД (AL-6); (вызывает перегруппировку в нижнем полубайте AL) AF <ДД 1; END; ELSE AF <ДД 0; (установка в нижнем полубайте не нужна) IF (AL > 9Fh) OR (CF=1) THEN BEGIN (начать установку) AL <ДД (AL-60h); (вызывает перегруппировку в верхнем полубайте AL) CF <ДД 1; END; ELSE CF <ДД 0; (установка в верхнем полубайте не нужна) ОПИСАНИЕ: Эта команда может быть использована после вычитания, которое оставляет 2 цифры BCD в регистре AL. Если результаты вычитания в одном или обоих полубайтах превышают 9, DAS вызывает соответствующий перезагрузчик этих полубайтов в регистре AL и устанавливает такие флаги, при которых может быть выполнено вычитание на более значащих байтах многобайтных операндов. ПРИМЕР: SBB AL, BL ; заметим, что AL должен быть приемником DAS ; установка AL для упакованного BCD (десятич- ного) формата Команды SBB и DAS часто заключены внутри цикла, который вычитает упакованные BCD величины (десятичные величины) байт за байтом, начиная с наименее значащего байта. ВРЕМЯ ВЫПОЛНЕНИЯ: 4 такта; 0,2 мкс при 20 МГц ФЛАГИ: CF и AF описаны в разделе ФУНКЦИЯ выше. OF,SF,ZF и PF неопределены. Другие флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМОВ РЕАЛЬНОГО: ЗАЩИЩЕННОГО: ВИРТУАЛЬНОГО 8086: Нет. - 236 - ЙННННННННННННННННННННННННННННННННН» єDEC Уменьшение на 1є ИНННННННННННННННННННННННННННННННННј ФОРМАТ: DEC байт 0 байт 1 Регистр/Память 1 1 1 1 1 1 1 w mod: 0 0 1 : r/m Регистр (WORD или DWORD) (короткое кодирование) 0 1 0 0 1 : reg ФУНКЦИЯ: Приемник <ДД Приемник-1 ОПИСАНИЕ: DEC вычитает 1 из операнда. DEC, однако, не воздействует на CF. Чтобы воздействовать также и на CF, используется команда SUB с непосредственной величиной 1. ПРИМЕР: DEC EBX Если EBX=FFAD9034h, то в результате описанной выше команды DEC EBX приписывается значение FFAD9033h. ВРЕМЯ ВЫПОЛНЕНИЯ: Уменьшение Регистра: 2 такта; 0,1 мкс при 20 МГц Уменьшение Памяти: 6 тактов; 0,3 мкс при 20 МГц ФЛАГИ: OF, CF, SF, ZF, AF, и PF действуют, как описано в приложении А. Другие флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Такие же, как для команды ADD. - 237 - ЙННННННННННННННННННННННННННННННННННННННННННН» єDIV Незнаковое делениеє ИНННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: DIV Байт 0 Байт 1 AL|AX|EAX регистром- 1 1 1 1 0 1 1 w mod: 1 1 0 r/m памятью ФУНКЦИЯ: AL|AX|EAX <ДД AX|DX:AX|EDX:EAX / SOURCE; (частное незнакового деления) AH|DX|EDX <ДД REMAINDER; ОПИСАНИЕ: DIV выполняет деление без знака. Операнд называется делитель. В зависимости от размера операнда, т.е. BYTE, WORD или DWORD, команда DIV использует регистр(ы) AX|DX:AX|EDX:EAX как источник делимого, и регистр AL|AX|EAX для частного. Регистр AH|DX|EDX содержит остаток деления. ПРИМЕР: DIV ECX Если EDX=000005D2h и EAX=60F40000h, а ECX=00BC5200h, тогда в результате команды DIV EAX=00075A00h (частное), EDX=00000000h (остаток). ECX неизменяется. ВРЕМЯ ВЫПОЛНЕНИЯ: Количество времени, требуемое для выполнения команды, зависит от размера делимого. 16-битовое делимое: 19 тактов; 0,95 мкс при 20 МГц 32-битовое делимое: 27 тактов; 1,35 мкс при 20 МГц 62-битовое делимое: 43 такта; 2,15 мкс при 20 МГц ФЛАГИ: OF и CF действуют, как описано в приложении А. SF,ZF,AF и PF неопределены. Другие флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Прерывание 0, если частное слишком большое, чтобы соответствовать регистру, обозначенному AL|AX|EAX. Другие исключения такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключение деления (исключение 0), если частное слишком большое, чтобы соответствовать регистру, обозначенному AL|AX|EAX. Для исключения 0 код ошибки не засылается в стек. Другие исключения такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086. См. исключения защищенного режима. - 238 - ЙНННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єENTER Установка стековой рамки для параметров процедурыє ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: ENTER 1 1 0 0 1 0 0 0 16-битовое смещение 8-битовый уровень ФУНКЦИЯ: LEVEL <ДД LEVEL MOD 32 IF OPERAND SIZE=16 THEN PUSH(BP) ELSE PUSH(EBP); FRAME POINTER <ДД ESP; IF LEVEL > 0 THEN BEGIN FOR I=1 TO (LEVEL-1) DO IF OPERAND SIZE=16 THEN BEGIN BP <ДД BP-2; PUSH(BP); END ELSE BEGIN EBP <ДД EBP-4; PUSH(EBP); END END PUSH(FRAME POINTER); END IF (OPERAND SIZE=16) THEN BP <ДД FRAME POINTER; ELSE EBP <ДД FRAME POINTER; IF ADRESS SIZE=16 THEN SP <ДД SP-FIRST OPERAND; ELSE ESP <ДД ESP-FIRST OPERAND; ОПИСАНИЕ: ENTER создает рамку стека, требуемую большинством языков высокого уровня с блочной структурой. Первый операнд отличается количеством байтов динамической памяти, расположенной в стеке для входных программ. Второй операнд дает лексический вложенный уровень (0-31) программы внутри источника кода языка высокого уровня. Это определяет число точек стековой рамки, копируемых в новую рамку стека из предыдущей рамки стека. BP (или EBP, если признак размера операнда 32 бита)-текущий указатель рамки стека. - 239 - Если признак размера операнда-16 бит, процессор использует BP как указатель рамки, а SP как указатель стека. Если размер операнда 32 бита, процессор использует EBP для указателя рамки, а ESP как указатель на стек. Если второй операнд-0, ENTER засылает указатель рамки (BP или EBP) на стек. ENTER тогда вычитает первый операнд из указателя стека и устанавливает указатель рамки на текущее значение указателя стека. ПРИМЕР: ENTER 12,0 Например, процедура 12-ю байтами локальной переменной будет означать ENTER 12 команды 0 (или приведет ENTER 12 команды 0) в точку входа и LEAVE-команды перед каждым RET. 12 локальных байтов будут означать отрицательное смещение из указателя рамки. ВРЕМЯ ВЫПОЛНЕНИЯ: 5 тактов; 0,2 мкс при 20 МГц ФЛАГИ: Ни один не задействован. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Нет. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключение 0, если частное слишком большое, чтобы соответствовать регистру, обозначенному AL|AX|EAX. Для исключения 0 код ошибки не засылается в стек. Другие исключения такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086. Исключительная ситуация "по стандартной защите" (исключение 13) идет с кодом ошибки 0000h. HLT является привилегированной командой, которая может быть выполнена только при приоритете 0. В режиме виртуальном 8086 80386 работает с уровнем привилегии 3. - 240 - ЙНННННННННННННННННННННННННННННННННН» єHLT Остановка до прерыванияє ИННННННННННННННННННННННННННННННННННј ФОРМАТ: HALT 1 1 1 1 0 1 0 0 ФУНКЦИЯ: Процессор приходит в состояние останова. ОПИСАНИЕ: Никаких других команд не выполняется до тех пор, пока не получено прерывание или до тех пор, пока процессор не установлен. Маскируемое прерывание (вывод INTR) должен быть узнаваем. Немаскируемое прерывание всегда узнаваемо. ПРИМЕР: HLT HALTы 80386 останавливаются неопределенно до тех пор, пока прерывание не распознается. Команда обычно используема только когда не существует другой работы, которую система может выполнять до тех пор, пока не наступит внешнее прерывание. ВРЕМЯ ВЫПОЛНЕНИЯ: 5 тактов; 0,25 мкс при 20 МГц. ФЛАГИ: Ни один не задействован. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Нет. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключительная ситуация "по стандартной защите" идет с кодом ошибки 0000h, если текущий уровень привилегии не 0. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086. Исключительная ситуация "по стандартной защите" (исключение 13) идет с кодом ошибки 0000h. HLT является привилегированной командой, которая может быть выполнена только при приоритете 0. В режиме виртуальном 8086 80386 работает с уровнем привилегии 3. - 241 - ЙНННННННННННННННННННННННННННННННННННННННННН» єIDIV Целое (знаковое) делениеє ИННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: IDIV Байт 0 Байт 1 1 1 1 1 0 1 1 w mod: 1 1 0 r/m ФУНКЦИЯ: AL|AX|EAX <ДД AX|DX:AX|EDX:EAX / SOURCE; (частное знакового деления) AH|DX|EDX <ДД REMAINDER; ОПИСАНИЕ: IDIV выполняет знаковое деление. Операнд называется делитель. В зависимости от размера операнда, т.е. BYTE, WORD или DWORD, команда IDIV использует регистр(ы) AX|DX:AX|EDX:EAX как источник делимого, и регистр AL|AX|EAX для частного. Регистр AH|DX|EDX содержит остаток деления. ПРИМЕР: IDIV ECX Если EDX=000005D2h и EAX=60F40000h, а ECX=00BC5200h, тогда в результате команды IDIV EAX=00075A00h (частное), EDX=00000000h (остаток). ECX не изменяется. ВРЕМЯ ВЫПОЛНЕНИЯ: Количество времени, требуемое для выполнения команды, зависит от размера делимого. 16-битовое делимое: 19 тактов; 0,95 мкс при 20 МГц 32-битовое делимое: 27 тактов; 1,35 мкс при 20 МГц 62-битовое делимое: 43 такта; 2,15 мкс при 20 МГц ФЛАГИ: OF и CF действуют, как описано в приложении A. SF,ZF,AF и PF неопределены. Другие флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Прерывание 0, если частное слишком большое, чтобы соответствовать регистру, обозначенному AL|AX|EAX. Для исключения 0 код ошибки не засылается в стек. Другие исключения такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключение деления (исключение 0), если частное слишком большое, чтобы соответствовать регистру, обозначенному AL|AX|EAX. Для исключения 0 код ошибки не засылается в стек. Другие исключения такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086. См. исключения защищенного режима. - 242 - ЙНННННННННННННННННННННННННННННННННННННННННННН» єIMUL Целое знаковое умножениеє ИННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ. IMUL байт 0 байт 1 байт 2 - - - - - - - - - - - - - - - - - - - - - - - Регистр- Регистр/Память 0 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1 mоd: reg : r/m AL|AX|EAX c Регистр/Память 1 1 1 1 0 1 1 w mоd: 1 1 0 r/m (короткое кодирование) Регистр/Память 0 1 1 0 1 0 s 1 mоd: reg : r/m Непосредственный операнд в Регистр Непосредствен - ный(е) байт(ы) данных. ФУНКЦИЯ. DESTINATION <ДД DESTINATION * SOURCE; (знаковое умножение) или: DESTINATION <ДД DESTINATION * IMMEDIATE DATA; (знаковое умножение) ОПИСАНИЕ. IMUL выполняет знаковое умножение. Различные формы команды существуют, как показано в ФОРМАТ выше. ПРИМЕР. IMUL ЕСХ, ЕDХ Если ECX=00000034h, а EDX=FFFFFF52h, тогда в результате команды IMUL ECX присваивается FFFFDCA8h. ВРЕМЯ ВЫПОЛНЕНИЯ. IMUL использует алгоритм раннего окончания. Обычно количество циклов, требуемое для завершения выполнения команды, зависит от позиции значащего бита в оптимизирующем умножителе. Регистр - Регистр: 9-41 тактов; 0.45-2.05 мкс, при 20 МГц. Регистр - Память: 12-44 тактов; 0.6-2.2 мкс, при 20 МГц. Память - Регистр: 12-44 тактов; 0.6-2.2 мкс, при 20 МГц. Непосредственный операнд - Регистр: 9-38 тактов; 0.45-1.9 мкс, при 20 МГц. Непосредственный операнд - Память: 12-41 тактов; 0.6-2.05 мкс, при 20 МГц. ФЛАГИ. OF и CF действуют, как описано в приложении A. SF,ZF,AF и PF неопределены. Другие флаги не изменяются. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ ЗАЩИЩЕННОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧЕНИЯ ДЛЯ РЕЖИМА ВИРТУАЛЬНОГО 8086. Те же, что и для инструкции АDD. - 243 - ЙНННННННННННННННННННННННННННННННННННН» єIN Вход из адреса Ввод/Выводє ИННННННННННННННННННННННННННННННННННННј ФОРМАТ: IN Из непосредственного 1 1 1 0 0 1 0 w 8-битовый номер порта порта (00-FFh) Из порта, названного DX 1 1 1 0 1 1 0 w (0000-FFFFh) ФУНКЦИЯ: [PORT DX] <ДД SOURCE; (входные данные) ОПИСАНИЕ: Операнд вводится из порта, названного DX регистром или полем непосредственных данных. Операнд вводится в AL|AX|EAX в зависимости от размера операнда команды строки: BYTE, WORD, DWORD. Команда всегда доступна в реальном режиме. В защищенном режиме эта команда всегда разрешена, когда CPL < IOPL. Когда CPL > IOPL в защищенном режиме, разрешение ввода/вывода битового массива ограничивается, если команда разрешена. Все соответствующие биты битового массива разрешения ввода/вывода должны быть 0 для продолжения ввода/вывода. В режиме виртуальном 8086 разрешение ввода/вывода битового массива всегда определено, если команда IN разрешена. ПРИМЕР: IN ; вводится операнд из порта - 244 - ВРЕМЯ ВЫПОЛНЕНИЯ: Реальный режим: Непосредственный порт: 12 тактов; 0,6 мкс при 20 МГц Переменный порт: 13 тактов; 0.65 мкс при 20 МГц Защищенный режим, CPL < IOPL Непосредственный порт: 6 тактов; 0.3 мкс при 20 МГц Переменный порт: 7 тактов; 0.35 мкс при 20 МГц Защищенный режим, CPL > IOPL Непосредственный порт: 26 тактов; 1.3 мкс при 20 МГц Переменный порт: 27 тактов; 1.35 мкс при 20 МГц Режим виртуальный 8086: Непосредственный порт: 26 тактов; 1.3 мкс при 20 МГц Переменный порт: 17 тактов; 1.35 мкс при 20 МГц ФЛАГИ: Ни один не задействован. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Если CPL > IOPL, разрешение ввода/вывода битового массива должно позволять ввод/вывод всех задействованных байтовых портов. Другие исключения такие же как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Разрешение ввода/вывода битового массива должно позволять ввод/вывод всех задействованных байтовых портов. Другие исключения такие же как для команды ADD. - 245 - ЙННННННННННННННННННННННННННННННННН» єINC Увеличение на 1є ИНННННННННННННННННННННННННННННННННј ФОРМАТ: INC байт 0 байт 1 Регистр/Память 1 1 1 1 1 1 1 w mod: 0 0 0 : r/m Регистр (WORD или DWORD) (короткое кодирование) 0 1 0 0 0 : reg ФУНКЦИЯ: Приемник <ДД Приемник+1 ОПИСАНИЕ: INC добавляет 1 к операнду. INC, однако, не воздействует на CF. Чтобы воздействовать также и на CF, используется команда ADD с непосредственной величиной 1. ПРИМЕР: INC EBX Если EBX=FFAD9034h, то в результате описанной выше команды INC EBX приписывается значение FFAD9035h. ВРЕМЯ ВЫПОЛНЕНИЯ: Увеличение Регистра: 2 такта; 0,1 мкс при 20 МГц Увеличение Памяти: 6 тактов; 0,3 мкс при 20 МГц ФЛАГИ: OF, CF, SF, ZF, AF, и PF действуют, как описано в приложении А. Другие флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Такие же, как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Такие же, как для команды ADD. - 246 - ЙННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» єINSB/INSW/INSD Вход строковых данных из адреса Ввод/Выводє ИНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: INSB/INSW/INSD 1 0 1 0 0 1 1 w ФУНКЦИЯ: [PORT DX] <ДД [SOURCE]; (входные данные) IF (ADRESSSIZE = 32) THEN ADJUST EDI; ELSE (adresssize = 16) ADJUST DI; ОПИСАНИЕ: Операнд вводится из порта, названного DX регистром, в строку памяти приемника. Считается, что строка источника должна быть массивом BYTE, WORD, DWORD, в зависимости от размера оеранда команды строки. После того, как ввод произведен, индексный регистр приемника автоматически продвигается (уменьшается или увеличивается согласно DF) на число, равное размеру операнда. Если размер адреса команды - ДВОЙНОЕ СЛОВО, операнд строки приемника - ES:[EDI]. В противном случае операнд ES:[DI]. Загрузка правильных индексных чисел происходит перед выполнением INS. ПРИМЕР: INS ; вводятся операнды ДВОЙНЫХ.СЛОВ из порта DX или REP INSD ; повторение INS до тех пор, пока ECX не окончен Поскольку индексный регистр источника должен быть загружен для использования этой команды, INSB/W/D часто зацикливают и используют для нескольких итераций. ВРЕМЯ ВЫПОЛНЕНИЯ: Реальный режим: Неповторяющийся: 15 тактов; 0,75 мкс при 20 МГц Повторяющийся: 13+6n тактов; 0.65+0.3n мкс при 20 МГц Защищенный режим, CPL < IOPL Неповторяющийся: 9 тактов; 0,45 мкс при 20 МГц Повторяющийся: 7+6n тактов; 0.35+0.3n мкс при 20 МГц Защищенный режим, CPL > IOPL Неповторяющийся: 29 тактов; 1,45 мкс при 20 МГц Повторяющийся: 27+6n тактов; 1.35+0.3n мкс при 20 МГц Режим виртуальный 8086: Неповторяющийся: 29 тактов; 1,45 мкс при 20 МГц Повторяющийся: 27+6n тактов; 1.35+0.3n мкс при 20 МГц n - число выполняемых итераций. ФЛАГИ: Ни один не задействован. ИСКЛЮЧЕНИЯ ДЛЯ РЕАЛЬНОГО РЕЖИМА. Те же, что и для инструкции АDD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Если CPL > IOPL, разрешение ввода/вывода битового массива должно позволять ввод/вывод всех задействованных байтовых портов. Другие исключения такие же как для команды ADD. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086: Разрешение ввода/вывода битового массива должно позволять ввод/вывод всех задействованных байтовых портов. Другие исключения такие же как для команды ADD. - 247 - ЙННННННННННННННННННННННННННННННННННННННННННННН» єINT 3 Прерывание 3 (точка прерывания)є ИНННННННННННННННННННННННННННННННННННННННННННННј ФОРМАТ: INT 3 1 1 0 0 1 1 0 0 ФУНКЦИЯ: Прерывание 3. ОПИСАНИЕ: INT 3 вызывает прерывание 3. Следующая выполняемая команда является входной точкой программы прерывания 3. В защищенном режиме команда программного прерывания INT n чувствительна к IOPL. Однако, эта отдельная команда программного прерывания INT 3 всегда доступна; она не чувствительна к IOPL. Однобайтная команда INT 3 пригодна для генерации точек прерывания при реализации программ отладки (отладочных программ). ПРИМЕР: INT 3 ;прерывание 3; контрольная точка прерывания ДЕТАЛИ ЗАЩИЩЕННОГО РЕЖИМА: См. команду INT n. ВРЕМЯ ВЫПОЛНЕНИЯ: 33 такта; 1,65 мкс при 20 МГц. ФЛАГИ: Флаги не задействованы. Все флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Нет. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Исключение типа "отказ страницы" (исключение 14) идет с кодом ошибки отказа кода, а отказ страницы является линейным адресом в регистре CR2. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086. См. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА. - 248 - ЙНННННННННННННННННННННННННННННННННННННННННННННН» єINTO Прерывание 4, если переполнениеє ИННННННННННННННННННННННННННННННННННННННННННННННј Формат: INTO 1 1 0 0 1 1 1 0 ФУНКЦИЯ: IF ( OF=1) THEN INTERRUPT 4; ОПИСАНИЕ: INTO допускает текущее прерывание в случае переполнения. Если OF=1, то INTO выполняется, и действие не производится. INTO не чувствительна к IOPL, поэтому всегда доступна; она может быть включена в прикладную программу для выявления текущего переполнения. ПРИМЕР: INTO ; прерывание 4, если флаг переполнения установлен. ДЕТАЛИ ЗАЩИЩЕННОГО РЕЖИМА: См. команду INT n. ВРЕМЯ ВЫПОЛНЕНИЯ: Если прерывание не генерируется: 3 такта; 0.15 мкс при 20 МГц Если прерывание 4 генерируется: 35 тактов; 0.5 мкс при 20 МГц ФЛАГИ: Флаги не задействованы. Все флаги не изменяются. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕАЛЬНОГО РЕЖИМА: Прерывание 4, если OF=1. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА: Прерывание 4, если OF=1. Исключение типа "отказ страницы" (исключение 14) идет с кодом ошибки отказа кода, а отказ страницы является линейным адресом в регистре CR2. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ РЕЖИМА ВИРТУАЛЬНОГО 8086. См. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ ЗАЩИЩЕННОГО РЕЖИМА. - 249 - ЙННННННННННННННННННННННННННННННН» єINT n Прерывание nє ИНННННННННННННННННННННННННННННННј ФОРМАТ: INT n Байт 0 Байт 1 0 1 1 0 0 0 1 0 n ФУНКЦИЯ: PUSH EFLAGS; PUSH CS; PUSH EIP; RELOAD EIP FROM OPERAND; (вектор или переключатель n) RELOAD CS FROM OPERAND; (вектор или переключатель n) CLEAR INTERRUPT FLAG IN EFLAG REGISTER; ОПИСАНИЕ: Когда INT n имеет место в реальном режиме или в режиме виртуальном 8086, указатель команды и регистр кода сегмента загружаются в стек. Флаг прерывания в регистре флага ясен, поэтому последующие прерывания не распознаются. Как указатель команды, так и регистр кода сегмента в этом случае заменяются векторными величинами в векторе прерывания для того, чтобы начать выполнение обслуживающей программы. В случае, когда INT n имеет место взащищенном режиме, действия, выполняемые 80386, могут быть довольно сложными в соответствии с одним из 3 состояний селектора приемника: 1) переключатель вызова на сегмент кода при уровне текущей привилегии (DPL=CPL); 2) переключатель вызова на сегмент кода при большей привилегии (DPL |