ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 6

			    - 170 -
		 Список исключительных ситуаций
		      ДДДДДДДДДДДДДДДДДДД
    В этой главе описывается каждый тип исключительных ситуаций в
отдельности. Описание каждой ситуации содержит шесть пунктов:
    - описание,
    - режимы 80386, в которых эта ситуация может иметь место,
    - код ошибки, записываемый в стек,
    - возможность  повторного запуска - либо она желательна, либо
возможна, и сценарий восстановления в наихудшем случае,
    - все тонкие отличия от 8086/88,
    - комментарии - информация о любых других понятиях, связанных
с данной ситуацией, или полезные советы.
Ситуация 0: ошибка деления
   -Описание:эта ситуация, квалифицируемая как ошибка,	обнаружи-
вается,  когда команда DIV или IDIV пытается выполнить деление на
ноль, или когда результат DIV или IDIV переполняет  предназначен-
ный  для  него операнд. Т.к. ситуация квалифицируется как ошибка,
счетчик команд указывает на неудачную команду деления.
   -Активные режимы:действительный, защищенный, виртуального 8086
В действительном режиме используется вектор 0 и таблица  векторов
прерывания действительного режима. В защищенном режиме или режиме
виртуального 8086 используется переключатель 0 в таблице дескрип-
торов прерывания защищенного режима (IDT).
   -Код ошибки, записываемый в стек в защищенном режиме: нет
   -Перезапускаемость: команда, послужившая причиной этой  ситуа-
ции,  может быть повторена. Конечно, повторный запуск команды бу-
дет снова вызывать исключительную ситуацию, если операнды команды
деления  не  изменены.	Т.о.,  хорошей стратегией в этой ситуации
должно быть сообщение об ошибке и прекращение неудачной  програм-
мы.
   -Отличия от 80886/8088: в 8086/8088 эта ситуация  квалифициру-
ется  как  ловушка.  Т.о. в 8086/8088 счетчик команд указывает на
следующую команду. Определение этой ситуации  в  80286/80386  как
ошибки	дает программе обработки ситуации  больше полезной инфор-
мации, т.к. счетчик команд указывает на саму неправильную  коман-
ду. Такая ситуация случается нечасто, так что изменения внесенные
с  целью улучшения в 80286/80386 для обработки этой ситуации при-
водят к незначительной несовместимости или отсутствию несовмести-
мости.
Ситуация 1: отладка
   -Описание: эта ситуация имеет  место,  когда  инициализируется
точка прерывания при отладке (во время выполнения команды, перек-
лючения  данных  или задачи) или если TF (одношаговый) флаг уста-
новлен. Ситуация квалифицируется как  ошибка  при  прерывании  во
время  выполнения команды, но определяется как ловушка при преры-
вании по адресу данных, переключения задачи и прерывании при  ус-
тановленном флаге внутреннего прерывания (TF).
    Отладочный регистр состояния, отладочный регистр 6 (DR6) поз-
воляют программе обработки ситуации при отладке легче определить,
почему	она возникла. Отладочный регистр состояния содержит одно-
битные флаги для каждого типа возможных событий,  вызывающих  эту
ситуацию.  Заметим, что некоторые из этих событий - ошибки (ситу-
ация возникает немедленно перед выполнением команды, которая слу-
жит причиной исключительной ситуации при отладке), в то время как
другие события - ловушки (ситуация возникает после команды, кото-
рая служит причиной исключительной ситуации при отладке).
			    - 171 -
    Программа обработки отладочных исключительных ситуаций  может
быть вызвана в результате одного из следующих событий, как
указано в регистре DR6:
   1. Отладочный регистр 0 (DRO) точка прерывания, возникает как
ошибка, если это точка прерывания программы, и как ловушка,  если
это точка прерывания по адресу данных.
    2. Отладочный регистр 1 (DR1) точка прерывания, возникает как
ошибка, если это точка прерывания программы, и как ловушка,  если
это точка прерывания по адресу данных.
    3. Отладочный регистр 2 (DR2) точка прерывания, возникает как
ошибка, если это точка прерывания программы, и	как  ловушка,если
это точка прерывания по адресу данных.
    4.	Отладочный  регистр  3 (DR3). Точка прерывания, возникает
как ошибка, если это точка прерывания программы, и  как  ловушка,
если это точка прерывания по адресу данных.
    5. Прерывание одношаговой инструкции, служащее причиной уста-
новки  TF  бита  в  EFLAG, возникает как ловушка после выполнения
каждой команды.
    6. Прерывание переключения задач, служащее причиной установки
T бита в TSS задачи, возникает как ловушка в контексте	следующей
задачи.
    7.	Ошибка	благодаря попытке чтения или записи в любой отла-
дочный регистр во время, когда	 GD в DR7=1. Это  указывает,  что
внутрисхемный  эмулятор, такой как ICE-386, в настоящее время ис-
пользует отладочные регистры в своих целях.
   Для более полной информации об  использовании  отладочных  ре-
гистров 80386 см. главу 17.
  -Активные   режимы:  действительный,	защищенный,  виртуального
8086. В действительном режиме используется  вектор  1  в  таблице
векторов  прерывания действительного режима. Защищенный режим или
режим виртуального 8086  использует  переключатель  1  в  таблице
дескрипторов прерывания защищенного режима.
   -Код ошибки, записываемый в стек в защищенном режиме: нет.
   -Перезапускаемость: все случаи этой ситуации имеют возможность
повторного  запуска.  RF (флаг возобновления) позволяет команде с
адресом точки прерывания быть повторно запущенной без немедленной
выработки другой отладочной ситуации ошибки.
   -Отличие от 8086/8088: поведение TF, когда в одношаговом режи-
ме выполняется команда INT3, INTn, INTO  или  BOUND,  различно	в
80286/80386   и   8086/8088.   Когда   выполняются  эти  команды,
80286/80386 сбрасывает TF после того, как первоначальное содержи-
мое EFLAG загружается в стек; это предохранительное свойство, ко-
торое предотвращает выполнение пошагового режима прикладной прог-
раммы  через программу обработки прерываний операционной системы.
8086/8088 не сбрасывает TF для этих команд. Вывод: отладчик,  на-
писанный  для  8086/8088,  но пропускаемый на 80286 или 80386, не
будет работать в пошаговом режиме во время выполнения подпрограм-
мы обработки прерываний; скорее всего он выполнится полностью  во
время  подпрограммы и во время следующей команды главной програм-
мы. Чтобы исправить это, отладчик  80286/80386,  использующий  TF
для  поддержки	пошагового  режима, должен воспроизвести действие
любой команды прерывания, которая встретилась.	Эмуляция  требует
построения  стека   ловушки  как  при команде прерывания и взятия
следующей команды из точки входа в подпрограмму обработки  преры-
вания.
			    - 172 -
   -Комментарии:  используя отладочные регистры 80386 для ловушек
по данным, используйте свойство прерывания по адресу данных,  за-
тем  обеспечьте использование свойства точного соответствия точке
прерывания, чтобы гарантировать, что будет произведено прерывание
по точке.
Ситуация 3: команда останова
   -Описание: эта  ситуация  возникает,  если  выполняется  одно-
байтная  команда INT3 (код операции СС). Вектор для программы об-
работки ситуации считается частью  команды  INT3.  Следовательно,
эта ситуация считается ловушкой, и счетчик команд продолжает ука-
зывать на команду, следующую за INT3.
   -Активные режимы: действительный, защищенный режим виртуально-
го 8086. В действительном режиме используется  вектор  3  таблицы
векторов  прерывания  действительного режима. В защищенном режиме
или режиме виртуального 8086 используется переключатель 3  в  IDT
защищенного режима.
   -Код ошибки, записываемый в стек в защищенном режиме: нет.
   -Перезапускаемость:	т.к.  эта ситуация возникает как ловушка,
команда INTO уже завершена. Программа может быть  возобновлена	с
команды, следующей за INT3.
   -Отличие от 8086/8088: нет.
   -Комментарии:  эта  ситуация - единственный путь для выработки
прерывания выполняемой команды в 8086/8088 или 80286. В этой  си-
туации	обеспечивается	совместимость для существующих отладчиков
8086/8088 или 80286, пропускаемых на 80386.
Ситуация 4: команда INTO, если установлен  флаг переполнения (OF)
   -Описание: эта ситуация возникает, если при выполнении команды
INTO бит OF установлен в 1. Вектором программы обработки ситуации
считается часть команды INTO. Следовательно, ситуация  квалифици-
руется	как ловушка, и счетчик команд продолжает указывать на ко-
манду, следующую за INTO.
   -Активные  режимы:  действительный,	защищенный,  виртуального
8086.  В  действительном  режиме используется вектор 4 из таблицы
векторов прерывания действительного режима. В  защищенном  режиме
или режиме виртуального 8086 используется переключатель 4 в IDT.
   -Код ошибки, записываемый в стек в защищенном режиме: нет.
   -Перезапускаемость:	т.к. эта ситуация квалифицируется как ло-
вушка, команда INTO уже завершена. Программа может быть возобнов-
лена с команды, следующей за INTO.
Ситуация 5: команда BOUND при обнаружении выхода за границы
   -Описание: эта ситуация имеет место, когда выполняется команда
BOUND, и обнаруживается состояние  выхода  за  границы.  Вектором
программы  обработки ситуации считается часть команды BOUND. Сле-
довательно, ситуация квалифицируется как ловушка, и  счетчик  ко-
манд продолжает указывать на команду, следующую за BOUND.
   -Активные  режимы:  действительный , защищенный и режим вирту-
ального 8086. В действительном режиме используется  вектор  5  из
таблицы  векторов прерывания действительного режима. В защищенном
режиме или режиме виртуального 8086 используется переключатель	5
в IDT.
			    - 173 -
   -Код ошибки, записываемый в стек в защищенном режиме: нет.
   -Перезапускаемость:	т.к.  эта ситуация возникает как ловушка,
команда BOUND уже завершена. Программа может быть возобновлена	с
команды, следующей за BOUND.
Ситуация 6: недопустимая команда
   -Описание: эта ситуация возникает, если процессор начинает вы-
полнять какую-либо команду, не являющуюся законной. Причина может
заключаться  в	недопустимом коде операции, [mod r/m] или [s-i-b]
байте (байтах) (см. гл.3 Формат команд). Обычно причина  заключа-
ется  в том, что ошибочная программа пытается вызвать данные. По-
пытка использования префикса LOCK там, где он не может	быть  ис-
пользован,  также  служит  причиной  исключительной ситуации (см.
разрешенные виды команд ниже). В  действительном  режиме  попытка
выполнения команд  защищенного	режима ARPL, LLDT, LTR, LAR, LSL,
SLDT, STR, VERR или VERW также служит причиной исключительной си-
туации.
   -Активные  режимы:  действительный,	защищенный,  режим вирту-
ального 8086. В действительном режиме используется вектор 6  таб-
лицы векторов прерываний действительного режима. В защищенном ре-
жиме  или режиме виртуального 8086 используется переключатель 6 в
IDT.
   -Код ошибки, записываемый в стек в защищенном режиме: нет.
   -Перезапускаемость: состояние процессора сохраняется, так  что
рестарт может быть произведен, допуская, что повторный запуск не-
законной команды имеет какой-нибудь смысл. Наилучшей стратегией в
этом  случае будет являться сообщение об ошибке и завершение оши-
бочной программы.
Отличие от 8086/8088: такой исключительной ситуации не существует
в 8086/8088, который расценивает незаконную команду как NOP  (ни-
чего не происходит, кроме инкрементации счетчика команд).
Отличие  от 8086/8088 и 80286: добавление возможности перемещения
страниц в 80386 сделало необходимым ограничить использование пре-
фикса LOCK для для небольшого набора команд, где защелкивание мо-
жет действительно быть гарантировано. Ситуация недопустимого кода
операции (ситуация 6) вырабатывается  иначе.  Это  ограничение	и
исключительная	ситуация  применяется  во  всех режимах 80386, не
считая, возможно ли перемещение страниц или желательно.
    Префикс LOCK законно может предшествовать только определенным
командам, в особенности тем, которые обменивают регистры данных с
памятью, и некоторые из тех, которые выполняют операции пересылки
в память. Эти виды команд:
    XCHG  , genreg	 обмен памяти с регистром 80286 и
				 80386 авто LOCK эту инструкцию
    XCHG  genreg, 	 обмен регистра с памятью 80286 и
				 80386 авто  эту инструкцию
    ADD  , genreg	 сложение с операндом из памяти
    ADC  , genreg	 сложение с использованием флага
				 переноса
    SUB , genreg	 вычитание    операнда из памяти
    SBB , genreg	 вычитание с использованием
				 флага переноса (заема)
			    - 174 -
    NEG 		 умножение операнда из памяти
				 на -1
    OR	, genreg	 ИЛИ с операндом из памяти
    AND , genreg	 И с операндом из памяти
    XOR , genreg	 исключающее ИЛИ с операндом
				 из памяти
    NOT 		 отрицание операнда из памяти
    BTC 		 дополнение битов операнда из
				 памяти
    BTR 		 сброс битов операнда из памяти
    BTS 		 установка битов операнда из
				 памяти
    Т.к. перемещение страниц поддерживается 80386,  80386  должен
быть более ограниченным по отношению к префику LOCK, чем 8086 или
80286. В страничной среде, которой может быть обеспечен 80386 нет
путей,	чтобы  быть  уверенным, например, в успешном защелкивании
повторяющейся строковой команды. Например, ОС может вмешаться для
обслуживания отказа страницы, прервав предположительно	защелкну-
тую команду. См. стр.	 для большей информации о префиксе LOCK.
Ситуация 7: арифметический сопроцессор недоступен.
   -Описание:  эта  ситуация вырабатывается как ошибка, если про-
цессор начинает выполнять команду сопроцессора,  когда	EM  и  МР
флаги указывают, что сопроцессор либо недоступен, либо недоступен
для текущей задачи.
    Биты ЕМ и НП полностью контролируются программным обеспечени-
ем. ЕМ бит должен быть установлен, а МР бит - сброшен, когда эму-
лируется  сопроцессор. ЕМ бит должен быть сброшен, а МР бит - ус-
тановлен, когда сопроцессор действительно в системе.
    TS бит автоматически устанавливается в 1, когда 80386  выпол-
няет  переключение  задач (см. стр.    ). В этом случае следующая
команда сопроцессора приходящей задачи вырабатывает ситуацию  не-
доступности  сопроцессора  (ситуация 7). Обрабатывающая программа
этой ситуации, вероятно, перекачивает  состояние  сопроцессора	в
новую задачу, сбрасывая TS флаг (возможно использованием CLTS ко-
манды), и возвращается к команде сопроцессора. Т.к. флаг TS сбро-
шен,  арифметическая команда теперь выполняется без вызова исклю-
чительной ситуации.
   -Активные  режимы:  действительный,	защищенный,  виртуального
8086.  В действительном режиме используется вектор 7 таблицы век-
торов прерывания действительного режима. В  защищенном	режиме	и
режиме виртуального 8086 используется переключатель 7 в IDT.
Код ошибки, загружаемый в стек в защищенном режиме: нет.
   -Перезапускаемость:	все  происходящее в этой ситуации переза-
пускаемо.
Отличие от 8086/8088: такой ситуации не существует  в  8086/8088,
который  не  обеспечивает  критической	ситуации для эмулирования
сопроцессора. В 8086/8088 эмуляция сопроцессора может быть завер-
шена, когда необходимо, заменой или вставкой в об`ектный код явно
заданной команды INTn для каждой команды сопроцессора.
			    - 175 -
Флаг, уста-і			     і
новленный  і Вырабатывается ситуация і Вырабатывается ситуация
 в CRO	   і   7 при команде WAIT    і 7 при команде сопроцес-
ДДДВДДДВДДДґ			     і		сора
EM іMP іTS і			     і
ДДДЕДДДЕДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДД
0  і1  і0  і	     Нет	     і		Нет
0  і1  і1  іДа, позволяют  сопроцес- і Да, позволяет сопроцес-
   і   і   ісору  контекстное  пере- і сору контекстное пере-
   і   і   іключение,  которое будет і ключение, которое будет
   і   і   івыполнено  обработчиком  і выполнено обработчиком
   і   і   іситуации 7		     і ситуации 7
1  і0  і0  іНет,  нет  необходимости і Да, т.к. команда сопро-
   і   і   іэмулировать команду WAIT,і цессора может быть сэ-
   і   і   ікогда сопроцессор не при-і мулирована обработчиком
   і   і   ісутствует		     і ситуации 7
1  і0  і1  іНет,  нет  необходимости і Да, т.к. команда сопро-
   і   і   іэмулировать     команду  і цессора может быть сэ-
   і   і   іWAIT,  когда  сопроцес-  і мулирована обработчиком
   і   і   ісор  не  присутствует    і ситуации 7
Ситуация 8: двойная ошибка.
   -Описание:  эта  ситуация  возникает,  если	обнаружена  любая
исключительная ситуация, когда процессор пытается передать управ-
ление обработчику для предыдущей исключительной ситуации 0,10,11,
12 или 13.
   -Активные режимы:защищенный. В защищенном режиме используется
переключатель 8 в IDT.
Код ошибки, записываемый в стек в защищенном режиме: да,  но код
ошибки - все нули.
   -Перезапускаемость:	 команда,  служащая  причиной  предыдущей
исключительной ситуации не может быть  провторно  запущена,  т.к.
обнаружение  второй исключительной ситуации препятствует сохране-
нию состояния прерванной программы и загрузке информации о  вход-
ной  точке  обработчика  исключительной  ситуации. Т.к. в цепочке
исключительных ситуаций некоторая первоначальная информация теря-
ется, повторный  запуск  далее	невозможен.  Это  причина  особой
исключительной	ситуации,  ситуации  8, предназначенной для таких
условий.
Отличие от 80086/8088: такая ситуация не существует в 8086/8088.
   -Комментарии: чтобы избежать этой ситуации, нужно  обеспечить,
чтобы точки входа в обработчики ситуаций 0, 10, 11, 12 и 13 могли
быть  достигнуты  без причин для будущей исключительной ситуации.
Чтобы обработать ситуацию 8, нужно обеспечить правильный  TSS для
обработчика ситуации 8 обработкой его в различных задачах.  Чтобы
это  сделать,  нужно разместить переключатель задач в позиции 8 в
IDT.
			    - 176 -
Ситуация 9: нарушение границы сегмента операнда сопроцессора
   -Описание: эта ситуация возникает, если процессор обнаруживает
исключительную ситуацию, пока он вовлекается в передачу  операнда
для  сопроцессора. Эта	ситуация может иметь место только при ус-
ловии "завертывании" операнда вокруг 4 Гбайтного сегмента.
   -Активные режимы: защищенный. В защищенном режиме используется
переключатель 9 в IDT.
   -Код ошибки, записываемый в стек в защищенном режиме: нет.
   -Перезапускаемость: команда арифметического сопроцессора, слу-
жащая  причиной  этой ситуации, не является перезапускаемой, т.к.
она уже начала выполняться и изменила состояние сопроцессора в то
время, когда 80386 была обнаружена эта исключительная ситуация.
   -Отличие от 8086/8088: такой ситуации не существует в 8086/808
8.
   - Комментарии: этой ситуации можно избежать, не разрешшая  опе
ранду  сопроцессора "заворачиваться" вокруг конца 4-Гбайтных сег-
ментов.
Ситуация 10: недопустимый сегмент состояния задачи
   -Описание: эта ситуация возникает во время операции переключе-
ния задач, если процессор обнаруживает, что сегмент состояния за-
дачи слишком мал, чтобы содержать фиксированную  порцию  TSS  или
если  TSS содержит противоречивую информацию. Эта ситуация сигна-
лизирует как ошибка в контексте уходящей задачи, если TSS  уходя-
щей задачи оказывается недопустимым или если TSS приходящей зада-
чи несуществует. Ситуация квалифицируется как ловушка в контексте
приходящей задачи, если TSS приходящей задачи имеет будущие проб-
лемы.
   -Активные режимы: защищенный. В защищенном режиме используется
переключатель 10 в IDT.
Код ошибки, записываемый в стек в защищенном режиме: записывается
код  ошибки,  показанный на рис. 16.2. Индекс селектора, содержа-
щийся в коде ошибки, зависит от условий обнаружения, как показано
ниже:
   -Перезапускаемость: эта ситуация перезапускаема, если не явля-
ется  причиной того факта, что часть фиксированной порции TSS на-
ходится в несуществующей странице. Поэтому следует избегать нару-
шения границ внутри фиксированной порции TSS.
 -Отличие от 8086/8088: такой ситуации не существует в 8086/8088.
   -Комментарии: чтобы гарантировать правильность TSS  при  обра-
ботке ситуации, обработчик ситуации 10 должен быть задачей, вызы-
ваемой через переключатель задач в позиции 10 TDT. В любой систе-
ме  рекомендуется  создавать  только допустимые дескрипторы TSS с
установкой ограничения дескриптора TSS большего, чем  достаточное
для  того,  чтобы  содержать во всяком случае фиксированную часть
TSS и допустимое содержимое самого TSS.
			    - 177 -
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 Код ошибки  іУсловие, из-за которого	іПроверяетсяіПроверяется
 ситуации 10 ікаждый TSS, вовлеченный в іTSS уходя- іTSS прихо-
	     іпроцессе переключения за- іщей задачи ідящей зада-
	     ідач является недопустимым і	    і	 чи
ДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДД
TSS индекс + іДескриптор TSS неправиль- і    Да     і	 Да
EXT бит      іный (ошибочный тип дес-	і	    і
	     ікриптора или не поддаю-	і	    і
	     іщийся расшифровке)	і	    і
TSS индекс + іJMP, CALL, INT3, INTn,	і    Да     і	 Да
EXT бит      іINTO или BOUNDS команда	і	    і
	     іслужит причиной пере-	і	    і
	     іключения задач, но TSS	і	    і
	     іприходящей задачи уже	і	    і
	     іотмечен как занятый	і	    і
	     і(В=1)			і	    і
TSS индекс + іКоманда IRET служит при-	і    Да     і	 Да
EXT бит      ічиной переключения задач	і	    і
	     іна приходящую задачу, в	і	    і
	     ікоторой текущая задача,	і	    і
	     івероятно, вложена, но	і	    і
	     іприходящая задача отме-	і	    і
	     ічена как незанятая	і	    і
	     і(В=0)			і	    і
TSS индекс + іОграничение в 32-битном	і    Да     і	 Да
EXT бит      ідескрипторе TSS меньше	і	    і
	     і103 (десятичное) байтов,	і	    і
	     ітребуемых для фиксиро-	і	    і
	     іванной порции TSS (или	і	    і
	     іменьше, чем 43 десятич-	і	    і
	     іное для 16-битного дес-	і	    і
	     ікриптора TSS)		і	    і
LDT индекс + іНедопустимый дескриптор	і   Нет     і	 Да
EXT бит      іLDT или дескриптор LDT	і	    і
	     іотмечен как несуществу-	і	    і
	     іющий			і	    і
SS индекс +  іСелектор сегмента стека	і   Нет     і	 Да
EXT бит      івне ограничения таблицы	і	    і
	     ідескриптора		і	    і
SS индекс +  іСелектор сегмента стека	і   Нет     і	 Да
EXT бит      іне ссылается на сегмент	і	    і
	     ізаписи данных		і	    і
SS индекс +  іDPL сегмента стека не	і   Нет     і	 Да
EXT бит      ісоответствует новому CPL	і	    і
	     і(указанному RPL селек-	і	    і
	     ітора новой программы)	і	    і
SS индекс +  іRPL селектора сегмента	і   Нет     і	 Да
EXT бит      істека больше или меньше	і	    і
	     інового DPL		і	    і
			    - 178 -
	     і				і	    і
ДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДД
CS индекс +  іСелектор сегмента про-	і   Нет     і	 Да
EXT бит      іграммы вне ограничения	і	    і
	     ітаблицы дескриптора	і	    і
CS индекс +  іСелектор сегмента про-	і   Нет     і	 Да
EXT бит      іграммы не ссылается на	і	    і
	     ісегмент программы 	і	    і
CS индекс +  іDPL несогласующегося сег- і   Нет     і	 Да
EXT бит      імента программы больше	і	    і
	     іили меньше нового CPL	і	    і
CS индекс +  іDPL согласующегося сег-	і   Нет     і	 Да
EXT бит      імента программы больше	і	    і
	     інового CPL		і	    і
DS,ES,FS,GS  іСелектор сегмента DS,ES,	і   Нет     і	 Да
индекс +     іFS или GS вне ограничения і	    і
EXT бит      ітаблицы дескриптора	і	    і
S,ES,FS,GS   іСелектор сегмента DS,ES,	і   Нет     і	 Да
индекс +     іFS или GS не ссылается на і	    і
EXT бит      ісегмент данных		і	    і
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Замечание:" + " имеет дополнительное значение операции булевского
	   ИЛИ, используемого в формате кода ошибки, см. рис.
	   16.2.
Ситуация 11: сегмент не существует.
    Описание: эта ситуация возникает, если процессор  обнаружива-
ет,  что  бит наличия во всех дескрипторах для CS, DS, ES, FS, GS
или LDT, или в переключателе  ловушек,	переключателе  прерываний
или  переключателе задач. Эта ситуация квалифицируется как ошибка
при попытке загрузки селектора несуществующего дескриптора в  ре-
гистре	сегмента. Эта ситуация квалифицируется как ошибка при по-
пытке использования  селектора	несуществующего  переключателя	в
межсегментном JMP, межсегментном CALL, межсегментном RET, межсег-
ментном  RETn,	INT3,  INTn, INTO, BOUND, IRET, MOV в DS/ES/FS/GS
или LDS/LES/LFS/LGS.
 Особое рассмотрение для обнаружения ситуации несуществования во
      время переключания задач: ситуация наихудшего случая
    Если ситуация обнаруживается во время переключения задач, та-
кая ситуация квалифицируется как ловушка в  контексте  приходящей
задачи.  Во время переключения задач 80386 во-первых устанавлива-
ет, что TSS приходящей задачи существует и что его LDT (какой-ли-
бо) существует, загружжает все регистры из  нового  TSS  и  затем
один  за  другим  считывает дескрипторы, указывающие на селекторы
для каждого  регистра  сегмента.  Если	какой-нибудь  необходимый
дескриптор не существует, немедленно возникает исключительная си-
туация	(ловушка) в контексте новой задачи. (Об`яснение: переклю-
чение задач происходит, но первая команда новой  задачи,  однако,
не  выполняется .  Поскольку  это  происходит,	оставшиеся  кэш и
дескрипторов  не  могут  быть  изменены  содержимым  необходимого
дескриптора.  Существует два пути чтобы скопировать их в обработ-
чик ситуации несуществования (ситуации 11):
			    - 179 -
    1. Обработка этой ситуации с отдельной задачей (переключатель
задач в позиции 11 IDT). Задача переключается обратно на прерван-
ную задачу, что послужит причиной того, что процессор  перезагру-
зит  регистры  и кэши дескрипторов для прерванной задачи. Попытка
переключения может, однако, обнаружить будущую исключительную си-
туацию, которая будет  векторизована  соответственно.  Когда  все
исключительные ситуации, вызванные переключением задач, обработа-
ны, обратное переключение на прерванную задачу происходит гладко.
    2.	Обработка этой ситуации внутри текущей задачи (переключа-
тель ловушек в позиции 11 в IDT) и гарантия того, что обрабатыва-
ющая подпрограмма сделает все кэши дескрипторов согласующимися	с
величинами  селектора тех, которые были загружены во время перек-
лючения задач. Следовательно,  подпрограмма  должна  загрузить	в
стек  и  затем	считать из стека все селекторы регистра сегмента.
Операция POP послужит причиной того, что 80386	считает необходи-
мый дескриптор и изменит  соответствующий  кэш	дескриптора.  Из-
вестно,что каждая такая команда POP внутри обработчика может пос-
лужить	причиной  какой-либо  другой ситуации несуществования или
какой-либо другой исключительной ситуации.  Следовательно,  обра-
ботчик этой ситуации должен допускать возможность повторного вхо-
да (все его временные изменения должны быть сохранены в стеке об-
работчика).
    Активные режимы: защищенный. В защищенном режиме используется
вентиль 11 в IDT.
Код  ошибки, записываемый в стек в защищенном режиме: код ошибки,
как на рис. 16.2, записывается в стек. Индексная область ссылает-
ся на селектор несуществующего дескриптора или	на  селектор  или
IDT  индекс несуществующего переключателя. Бит I установлен, если
код ошибки ссылается на элемент IDT, являюшийся результатом, нап-
ример, команды INTn, ссылающейся на несуществующий переключатель,
или аппаратного прерывания, ссылающегося на несуществующий перек-
лючатель (EXT бит также устанавливается в этом случае).
    Перезапускаемость: все происходящее в этой	ситуации  переза-
пускаемо. Если обработчик ситуации 11 делает сегмент или переклю-
чатель	существующим  (Р=1)  и выполняет IRET, будет возобновлено
выполнение прерванной программы.
Отличие от 8086/8088: такой ситуации не существует в 8086/8088.
Ситуация 12: ошибка стека.
    Описание: эта ситуация возникает, когда не существует сегмент
стека происходит превышение ограничения сегмента стека.
    Ситуация квалифицируется как ошибка, если она обнаружена, по-
тому что нарушено ограничение, при этом счетчик команд	указывает
на неудачную команду.
    Ситуация  квалифицируется  как ошибка, когда команда пытается
загрузить селектор несуществующего  дескриптора  в  SS	(сегмента
стека)	регистр. Это может произойти при межуровневом CALL, межу-
ровневом RET, межуровневом RETn, межуровневом INTn,  межуровневом
IRET, команде LSS или MOV или POP в SS.
   Особое рассмотрение для обнаружения стековой заключительной
 ситуации во время переключения задач: ситуация наихудшего случая
    Если  обнаружено,  что  стек не существует, в него невозможна
запись или некорректный уровень привилегий во время  переключения
задач,	такая  ситуация  квалифицируется  как ловушка в контексте
приходящей задачи. Во время переключения  задач  80386	во-первых
устанавливает, что TSS приходящей задачи существует, что LDT (ес-
			    - 180 -
ли  несколько) существует, загружает все регистры из нового TSS и
затем один за другим считывает дескрипторы, указанные  селектором
в каждом регистре сегмента. Если обнаружено, что SS дескриптор не
существует, такая исключительная ситуация немедленно квалифициру-
ется  как ловушка в контексте новой задачи. (Об`яснение: переклю-
чение задач происходит, но первая команда новой задачи еще не вы-
полнена). Поскольку это происходит, оставшиеся кэши  дескрипторов
не  могут  быть изменены содержимым необходимого дескриптора. Су-
ществует два пути, чтобы скопировать их в обработчик ситуации 12:
    1. Обработка этой ситуации с отдельной задачей (переключатель
задач IDT). Переключение задачи обработки в прерванную задачу бу-
дет являться  причиной того, что процессор перезагрузит  регистры
и  кэш дескрипторов для прерванной задачи. При попытке переключе-
ния задач может, однако, возникнуть исключительная ситуация,  ко-
торая  будет  соответственно  векторизована.  Когда  все исключи-
тельные ситуации, вызванные переключением задач, будут	обработа-
ны, обратное переключение на прерванную задачу происходит гладко.
    2.	Обработка этой ситуации внутри текущей задачи (переключа-
тель ловушек в позиции 12 IDT) и гарантия того,  что  обрабатыва-
ющая  подпрограмма  сделает все кэш дескрипторов согласующимися с
величинами селектора тех, которые были загружены во время  перек-
лючения задач. Следовательно подпрограмма должна загрузить в стек
и затем считать из стека все селекторы регистра сегмента.  Опера-
ция  POP  послужит  причиной  того, что 80386 считает необходимый
дескриптор и изменит соответствующий кэш  дескриптора.	Известно,
что  каждая  такая команда POP внутри обработчика может послужить
причиной какой-либо другой ситуации несуществования (ситуации 11)
или некоторой другой ситуации. В будущем ситуация 12  может  про-
изойти, однако, обработчик ситуции 12 может допускать возможность
повторного входа.
    Активные  режимы:  действительный,	защищенный,  виртуального
8086. В действительном режиме используется вектор 12 таблицы век-
торов прерывания действительного режима. В защищенном режиме  ис-
пользуется  переключатель 12 в IDT. Эта ситуация обычно не проис-
ходит в действительном режиме, но может  быть  вызвана	созданием
ситуации,  когда  операнд стека окажется частично за ограничением
64-битного сегмента действительного режима при использовании пре-
фикса размера адреса, для создания 32-битного адреса стека, выхо-
дящего за ограничение 64 К сегмента действительного режима.
Код ошибки, записываемый в стек в защищенном  режиме: код ошибки,
записываемый в стек, если исключительная  ситуация  вызвана  тем,
что сегмент стека не существует. Если ситуация возникает благода-
ря  тому,  что	нарушено ограничение сегмента стека, код ошибки -
все нули.
    Перезапускаемость:	все  происходящее в этой ситуации переза-
пускаемо. Если обработчик ситуации 12 делает  сегмент  стека  су-
ществующий (Р=1) или расширяет его границы как требуется и выпол-
няет IRET, прерванная программа будет снова выполняться.
Отличие  от  8086/8088: такой ситуации не существует в 8086/8088.
Тот факт, что ситуация 12 может быть вызвана в действительном ре-
жиме или режиме виртуального  8086  (при  нарушении  ограничения)
практически не имеет отношения к программному обеспечению 8086.
			    - 181 -
Ситуация 13: общая защита.
    Описание: эта ситуация возникает, если процессор обнаруживает
нарушение защиты, не покрываемое другими исключительными ситуаци-
ями. Возможные причины заключаются в попытке выполнения одного из
следующих действий:
    В случаях 1-6 в стек записывается  код  ошибки, показанный на
рис. 16.2.
    1. Передача управления к невыполняемому сегменту, если селек-
тор CS не приходит из приходящей задачи во время переключения за-
дач, т.к. в этом случае имеет место ситуация 10.
    2.	Загрузка  SS  регистра	из  сегмента  только для чтения с
дескриптора выполняемого сегмента, если селектор SS  не  приходит
из  приходящей	задачи	во  время переключения задач, т.к. в этом
случае имеет место ситуация 10.
    3. Загрузка SS, DS, ES, FS или GS регистров дескриптора  сег-
мента  системы, если SS селектор не приходит из приходящей задачи
во время переключения задач, т.к. в этом случае имеет место ситу-
ация 10.
    4. Загрузка DS, ES, FS или GS с дескриптора выполняемого сег-
мента, который также не читаемый.
    5. Передача управления сегменту или  через	переключатель,	в
котором  нарушены правила привилегий, или загрузка SS, DS, ES, FS
или GS из сегмента, в котором нарушены правила привилегий.
    6. Загрузка регистров CS, SS, DS, ES, FS или GS с  селектора,
на  который ссылается LDT (селектор с IT=1, когда LDTR был загру-
жен с пустого селектора (LDT неопределен).
    В случаях 7-15 в стек записывается код ошибки в виде всех ну-
лей.
    7. Загрузка SS регистра с пустого селектора, если  пустой  SS
селектор  не  приходит из приходящей задачи во время переключения
задач, т.к. в этом случае имеет место ситуация недопустимого  TSS
(ситуация 10).
    8. Превышение ограничения сегмента, когда используется CS, DS
ES, FS или GS.
    9.	Превышение ограничения таблицы, когда ссылающаяся таблица
дескрипторов GDT, LDT или IDT.
    10. Запись в сегмент данных только для чтения или  в  сегмент
программы  (в  сегмент программы никогда не производится запись в
защищенном режиме).
    11. Считывание из сегмента программы только  для  выполнения.
    12. Выборка из памяти через DS, ES, FS или GS, когда  регистр
сегмента содержит пустой селектор.
    13. Загрузка CRO с PG=1 и PE=0 (т.е. попытка сделать  возмож-
ным страничный действительный режим).
    14. Векторизация прерывания или исключительной ситуации через
переключатель ловушек или переключатель прерываний из режима вир-
туального  8086  на  уровень привилегий, отличный от 0. Уровень 0
требуется для того, чтобы был  установлен  определенный  уровень,
таким  образом	IRET  команда в конце обрабатывающей подпрограммы
может установить VM бит в 1, как требуется для возвращения в  ре-
жим виртуального 8086.
    15. Превышение максимальной разрешеной длины команды 15 байт,
включая  байты префиксов (это может произойти только при намерен-
ном использовании чрезмерных префиксов перед командой).
  Особое рассмотрение для обнаружения ситуации общей защиты во
      время переключения задач: ситуация наихудшего случая
    Если обнаружение происходит во время переключения задач,  си-
туация	квалифицируется как ошибка в контексте приходящей задачи.
			    - 182 -
Во время переключения задач 80386  во-первых  устанавливает,  что
TSS  приходящей  задачи существует и что его LDT (если несколько)
существует,загружает все регистры из нового TSS и затем  один  за
другим	считывает  дескрипторы, указанные селекторами для каждого
регистра  сегмента.  Если  обнаружено,	что   любой   необходимый
дескриптор  не существует немедленно возникает исключительная си-
туация, квалифицируемая как ловушка, в	контексте  новой  задачи.
(Пояснение:  переключение задач происходит, но первая команда но-
вой задачи еще не выполнена). Поскольку это происходит,  оставши-
еся кэши дескрипторов не могут быть заменены содержимым необходи-
мого дескриптора. Существует два пути, чтобы скопировать их в об-
работчик ситуации 13:
    1. Обработка этой ситуации с отдельной задачей (переключатель
задач в позиции 13 IDT). Переключение задачи обратно в прерванную
задачу	будет  являться причиной того, что процессор перезагрузит
регистры и кэши дескрипторов для прерванной задачи.  При  попытке
переключения задач может, однако, возникнуть исключительная ситу-
ация,  которая	будет  соответственно  векторизована.  Когда  все
исключительные ситуации, вызванные переключением задач, будут об-
работаны, обратное переключение на прерванную  задачу  происходит
гладко.
    2.	Обработка этой ситуации внутри текущей задачи (переключа-
тель ловушек в позиции 13 IDT) и гарантия того,  что  обрабатыва-
ющая  подпрограмма сделает все кэши дескрипторов согласующимися с
величинами селектора тех, которые были загружены во время  перек-
лючения  задач.  Следовательно,  подпрограмма  должна загрузить в
стек и затем считать из стека все  селекторы  регистра	сегмента.
Операция  POP послужит причиной того, что 80386 считает необходи-
мый дескриптор и изменит  соответствующий  кэш	дескриптора.  Из-
вестно, что каждая такая команда  POP  внутри  обработчика  может
послужить  причиной  другой  ситуации общей защиты или какой-либо
другой ситуации. Следовательно, обработчик этой  ситуации  должен
допускать  возможность	повторного входа (все его временные пере-
менные должны быть сохранены в стеке обработчика).
    Активные  режимы:  действительный,	защищенный,  виртуального
8086. В действительном режиме используется вектор 13 таблицы век-
торов прерывания действительного режима. В защищенном режиме  или
режиме виртуального 8086 используется переключатель 13 в IDT. Эта
ситуация  обычно  не происходит в действительном режиме, но может
быть вызвана созданием ситуации, где операнд частично выходит  за
ограничение 64К сегмента действительного режима при использовании
префикса размера адреса, который создает 32-битный адрес, выходя-
щий за ограничение 64К сегмента действительного режима.
Код  ошибки, записываемый в стек в защищенном режиме: код ошибки,
показанный на рис. 16.2 записывается в стек, если  ситуация  воз-
никла в результате загрузки селектора (пункты 1-6). Если ситуация
возникла  по  другой  причине (пункты 7-15), в стек  записывается
код ошибки из всех нулей.
    Перезапускаемость: все происходящее в этой	ситуации  переза-
пускаемо.
Отличия  от  8086/8088: такой ситуации не существует в 8086/8088.
Факт, что ситуация 13 может возникнуть	в  действительном  режиме
или  режиме  виртуального 8086 (намеренное нарушение ограничения)
практически не касается программного обеспечения 8086.
			    - 183 -
Ситуация 14: отказ страницы.
    Описание: эта ситуация возникает, если выполняющаяся програм-
ма запрашивает страницу, отмеченную как несуществующую	или  если
она  пытается  использовать  страницу способом, ограничивающим ее
права выборки. Эта ситуация всегда возникает как ошибка.
    Обширная информация об ошибках повышает  эффективность  алго-
ритмов	обработчика. Код ошибки, показанный на рис. 16.3, записы-
вается в стек, и системный регистр CR2 содержит  лимитный  адрес,
который служит причиной отказа страницы.
    Активные  режимы:  защищенный,  виртуального 8086. В действи-
тельном режиме используется вектор 14 таблицы векторов прерывания
действительного режима. В защищенном  режиме  или  режиме  вирту-
ального 8086 используется переключатель 14 в IDT.
Код  ошибки,  записываемый в стек в защищенном режиме: код ошибки
при отказе страницы, показанный на рис. 16.3, уникален	для  этой
ситуации. Он указывает,произошел ли отказ страницы благодаря коду
ошибки при отказе страницы, или при нарушении правил выборки, за-
даваемых уровнем привилегий, при котором происходит отказ страни-
цы, и говорить было ли причиной нарушения чтения или запись.
    Перезапускаемость: все происходящее в этой ситуации  повторно
запускаемо,  т.к.  ситуация  квалифицируется  как  ошибка,  адрес
возврата, записанный в стек обработчика,  указывает  на  команду,
которая должна быть повторена. Это команда, которая служит причи-
ной исключительной ситуации.
Отличия от 8086/8088:  такой  ситуации не существует в 8086/8088.
    Комментарии: когда инициализируется стек нулевого уровня, ко-
торый  необходим  обработчику отказа страницы, гарантируется, что
отказ страницы не послужил причиной того, что процессор использу-
ет недопустимый указатель  стека  SS:ESP.  Если  инициализируется
стек нулевого уровня в страничной системе, когда возможно замеще-
ние страниц, не используется последовательность двух команд:
		       MOV   SS, AX
		       MOV   ESP, STAK	 TOP
    Причина  того, что следует избегать этой последовательности в
том, что т.к. вторая команда должна быть выбрана из памяти и  об-
ращается  к  памяти, возможно получить отказ страницы после того,
как SS изменено, но перед тем, как SP примет соответствующие  из-
менения.  Отказ  страницы  в этом случае будет причиной того, что
обработчик отказа страниц (который также на уровне 0)  использует
непоследовательный стек, возможно вызывающий крах системы.
    Вместо этого программное обеспечение, которое выполняется  на
том  же самом уровне привилегий, что и обработчик отказа страниц,
должно использовать единственную новую	LSS  команду  лучше,  чем
приведенную  выше пару команд. В нормальном случае, в котором об-
работчик  отказа  страниц  выполняется	на  уровне   0,   область
действий,  требуемая для LSS, ограничивается программой уровня 0,
которая обычно является ОС. Однако новая команда LSS рекомендует-
ся  для  загрузки  SS:ESP на привилегированном уровне. Приведеная
выше последовательность двух команд устарела.
Ситуация 16: ошибка арифметического сопроцессора
    Описание: эта ситуация возникает, если контакт ERROR #  80386
активен,  когда  80386	пытается  инициализировать другую команду
			    - 184 -
сопроцессора. Когда процессор готовится начать команду	сопроцес-
сора  опрашивается вход ERROR #, и, если он оказывается активным,
возникает ситуация 16 как ловушка по отношению к  команде  сопро-
цессора, вызвавшей арифметическую ошибку.
    Активные  режимы:  действительный,	защищенный,  виртуального
8086. В действительном режиме используется вектор 16 таблицы век-
торов прерывания действительного режима. В защищенном режиме  или
режиме виртуального 8086 используется переключатель 16 в IDT.
Код ошибки записываемый в стек в защищенном режиме: нет.
    Перезапускаемость:	все  происходящее в этой ситуации переза-
пускаемо с точки зранения 80386, но состояние сопроцессора  изме-
няется командой сопроцессора,  вызывающей ошибку, и следовательно
повторно не запускаемо. Хорошей стратегией для обработчика  явля-
ется  выдача сообщения об ошибке и по возможности завершение оши-
бочной программы.
Отличие от 8086/8088: такой ситуации не существует  в  8086/8088,
который  полагается  на  сигнал  аппаратного прерывания при любой
арифметической ошибке. Архитектура РС, например, использует  вход
NMI  для сигнализации об арифметической ошибке сопроцессора. Этот
подход может при желании поддерживаться системой 80386, но сигнал
должен держаться не активным, пока арифметический сопроцессор за-
нят.
     Одновременные прерывания и исключительные ситуации
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
    Прерывания распознаются только на границах	команд.  Исключи-
тельные  ситуации  также возникают только на границах команд,либо
как ошибка немедленно перед неверной командой, либо  как  ловушка
немедленно после неверной команды. Возможно, что несколько преры-
ваний  и исключительных ситуаций могут быть активизированы на од-
ной и той же границе  команд.  Например,  аппаратное  прерывание,
исключительная	ситуация,  возникающая	как ловушка из предыдущей
команды и исключительная ситуация, возникающая как  ошибка  перед
следующей командой могут быть активизированы одновременно.
    Одновременная  активизация	прерываний и исключительных ситу-
аций ставит проблему арбитража, обрабатываемую логикой	на  чипе.
Логика арбитража обеспечивает, что определенные события направля-
ются перед другими, производя установку приоритетов для обработки
возможных событий.
    Однако  большинство  подробных  описаний  приводят намеченную
последовательность проверок, выполняемых 80386 на каждой  границе
команд.  Это  действие	может быть понято как последовательность,
которая подразделяет границу команд на серию шагов. На каждом ша-
ге различные типы активных прерываний и  исключительных  ситуаций
распознаются.  Эта  последовательность	приоритетов, определенная
аппаратурой на кристалле, обрабатывает все возможные случаи  неп-
рерывных событий в порядке, показанном в таблице 16.3.
			    - 185 -
						     Таблица 16.3
Подробная последовательность контроля прерываний и исключительных
	    ситуаций в 80386 на каждой границе команд
 Шаг і			  Ф у н к ц и я
ДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 1.  іПроверка на исключительную ситуацию 1 - ловушку (из поша-
     ігового режима через флаг ловушки или точку прерывания по
     іадресу данных в отладочных регистрах), выработанную преды-
     ідущей командой. Если она активна, то ситуация 1 квалифици-
     іруется как ловушка
 2.  іПроверка внешнего NMI. Если активен, то имеет место преры-
     івание 2
 3.  іПроверка внешнего INTR. Если активен, то считывается век-
     ітор прерывания, и происходит прерывание n (0 < h <255)
 4.  іПроверка на ситуацию 1 - ошибку (из точки прерывания выпол-
     інения команды в отладочных регистрах), возможно выработан-
     іную следующей командой. Если активен, то возникает ситуа-
     іция 1 как ошибка
 5.  іПроверка на ошибку сегментации, возможно выработанную при
     івыборке следующей команды. Если ошибка обнаружена, то воз-
     іникает исключительная ситуация (11 или 13) как ошибка
 6.  іПроверка на отказ страницы, возможно возникающий при выбор-
     іке следующей команды. Если отказ обнаружен, возникает  ис-
     іключительная ситуация 14 как ошибка
 7.  іПроверка на ошибки, возможно возникающие при дешифрации
     іследующей команды. Это будет ситуация 6, если незаконный
     ікод операции или если имеет место команда защищенного ре-
     іжима, недоступная в действительном режиме; это будет ситу-
     іация 13, если в команде более 15 байтов или если команда
     ітребует больших привилегий в защищенном режиме (т.е. IOPL
     іили PL не 0, как требуется). Если ошибка обнаружена, воз-
     іникает исключительная ситуация как ошибка
 8.  іЕсли код следующей команды - WAIT, проверяется TS=1 и
     іMP=1 в CRO. Если так,то возникает исключительная ситуация
     і7 как ошибка
 9.  іЕсли код следующей команды - код команды для арифметиче-
     іского сопроцессора, проверяется EM=1 или TS=1. Если так,
     іто возникает исключительная ситуация 7 как ошибка
10.  іЕсли код следующей команды - WAIT или код команды для
     іарифметического сопроцессора, опрашивается ERROR# вход из
     іарифметического сопроцессора. Если он активен, возникает
     іситуация 16  как ловушка (с точки зрения команды сопро-
     іцессора, которая выработала арифметическую ошибку)
11.  іПроверяется порядок для каждого обращения к памяти, тре-
     ібуемого командой:
     і	 а) проверка на ошибки сегментации, которые препятст-
     івуют передаче целого операнда памяти. Если ошибка имеет
     іместо, возникает ситуация 11, 12 или 13 как ошибка
     і	 б) проверка на отказ страницы, который препятствует
     іпересылке целого операнда памяти. Если отказ имеет мес-
     іто, возникает исключительная ситуация 14 как ошибка
			    - 186 -
Заметим,  что  такой  порядок  поддерживает положение о том, что
страничный механизм - под механизмом сегментации. Для  обращений
к памяти исключительные ситуации, связанные с ошибками сегмента-
ции,  если ситуаций несколько, будут вырабатываться перед любыми
исключительными ситуациями, связаными с отказом страницы.
			  ГЛАВА 17
		    ОСОБЕННОСТИ ОТЛАДКИ
		    ДДДДДДДДДДДДДДДДДДД
    Принципиальные  возможности отладки, поддерживаемые в 80386,
обеспечиваются с помощью выделенных для этой цели отладочных ре-
гистров. Эти программируемые  регистры	действительно  облегчают
использование внутрисистемных эмуляторов 80386, таких как ICE-368
которые дают намек на большие отладочные возможности этих  новых
регистров.
    Отладочные	регистры  поддерживают	прерывания  для команд и
данных. В общем точка прерывания адресуется установкой	триггера
отладочной  исключительной  ситуации,  когда программа выполняет
код или выборку данных, сохраненных по адресу прерывания. Преры-
вание команды позволяет обнаружить выполнение команды по  любому
заданному  линейному  адресу. Прерывание команды позволяет уста-
новку точки прерывания даже ROM-основанном коде.  Прерывания  по
адресу	данных - важное новшество, т.к. они могут указать точки,
когда любой заданный операнд данных выбирается или записывается,
по какой бы то ни было неизвестной причине.
    Предыдущие процессоры семейства 8086 имели только  пошаговую
исключительную	ситуацию и прерывание по коду операции, оба этих
средства также доступны для 80386.
	       Встроенные отладочные возможности
	       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
    В общем, всесторонние отладочные возможности, заложены в ап-
паратуру каждого 80386. Особенности отладки в  80386  предлагают
четыре типа отладочных возможностей:
    1.	Отладочные регистры 0-3, которые определяют четыре неза-
висимых адреса прерываний, которые могут быть индивидуально  ис-
пользованы для прерывания команд и прерывания по адресу данных.
    2. TF (флаг ловушки) бит в регистре EFLAG, который позволяет
программе выполняться в пошаговом режиме.
    3. Команда прерывания (код CC), однобайтная команда, которая
может быть вставлена в код (в памяти, допускающей запись) по лю-
бому  адресу),	чтобы выработать прерывание команды по заданному
адресу.
    4. T (ловушка) бит в 32-битном TSS, который позволяет немед-
ленно возникнуть ловушке при включении любой  32-битной  задачи,
отмеченной установкой бита T в TSS.
			    - 187 -
    Отладочные	средства действуют как ловушка, чтобы обнаружить
условия, интересующие программиста. Тогда возникает такое  усло-
вие,  соответствующее средство отладки инициируется, вырабатывая
исключительную ситуацию (ситуация 1), чтобы включить подпрограм-
му обработки прерываний. Все средства отладки вырабатывают ситу-
ацию 1 при инициализации, кроме элемента 3, указанного выше, ко-
манды прерывания, которая вызывает прерывание в точке  (прерыва-
ние 3).
    Все  средства, указанные выше, доступны в операциях защищен-
ного режима; только  средства  1,2  и  3  доступны  в  операциях
действительного режима. Свойство 4, конечно, недоступно в опера-
циях действительного режима.
		    Отладочные регистры
		    ДДДДДДДДДДДДДДДДДДД
    Отладочные регистры 80386 состоят из шести 32-битных регист-
ров, показанных на рис. 17.1. Они включают:
    - четыре регистра точек прерывания; каждый содержит линейный
адрес  точки прерывания, которая сможет использоваться как точка
прерывания команды или прерывания по адресу данных.
    - один управляющий отладочный регистр, используемый для  оп-
ределения  и дает возможность четырем точкам прерывания быть за-
данными в регистрах точек прерывания.
    - один отладочный регистр состояния, который, когда возника-
ет  отладочная	исключительная	ситуация,  указывает,  какое  из
средств отладки была инициализировано.
Используя  новые  команды  для этих целей, эти регистры доступны
для чтения и записи в действительном режиме и на нулевом  уровне
привилений защищенного режима.
		     ОТЛАДОЧНЫЕ РЕГИСТРЫ
		     ___________________
31		23		15		7		0
ЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДЕ
і	 РЕГИСТР ЛИНЕЙНОГО АДРЕСА ТОЧКИ ОСТАНОВА -0-  і і і і і і DR0
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і і і іРЕГИСТР ЛИНЕЙНОГО АДРЕСА ТОЧКИ ОСТАНОВА -1-  і і і і і і
 DR1
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і і і іРЕГИСТР ЛИНЕЙНОГО АДРЕСА ТОЧКИ ОСТАНОВА -2-  і і і і і і
 DR2
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і і і і іРЕГИСТР ЛИНЕЙНОГО АДРЕСА ТОЧКИ ОСТАНОВА -3-  і і і і і і
 DR3
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
31		23		15		7		0
ЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДЕ
і і і і і і і і і і і і і і і і  ВіВіВі і і і і   і і і іВіВіВіВі
і0і0і0і0і0і0і0і0і0і0і0і0і0і0і0і0іTіSіDі0і0і0і0і0і0і0і0і0і3і2і1і0і
 DR6
ГДБДБДБДБДБДБДБДЕДБДБДБДБДБДБДБДЕДБДБДБДБДБДБДБДЕДБДБДБДБДБДБДБДґ
іLENіRіWіLENіRіWіLENіRіWіLENіRіWі і і і і і іGіL GіLіGіLіGіLіGіLі
і 3 і3і3і 2 і2і2і 1 і1і1і 0 і0і0і0і0і0і0і0і0іEіEі3і3і2і2і1і1і0і0і
 DR7
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
 Рис.17.1 80386 регистры  отладки.
    DRO-DR3,  регистры	точек прерывания, каждый содержит следу-
ющую область.
    Линейный адрес точки прерывания - 32-битный  линейный  адрес
который идентифицирует зону точки прерывания.
    Регистры  DR4  и  DR5 не реализованы в 80386. Они могут быть
реализованы в будущих процессорах.
			    - 188 -
    DR7, управляющий отладочный регистр, содержит несколько  об-
ластей для будущего определения размера области прерывания, что-
бы определить тип доступа, который может инициализировать каждое
прерывание, и дает возможность произойти каждому прерыванию. Об-
ласти  DR6 повторяются четырежды, по одной для каждой из четырех
точек прерывания. Следующее  описание  применяется  для  четырех
идентичных областей в регистре DR6:
						    Таблица 17.1
		     Расшифровка области LEN
НННННННННННННННННСННННННННСННННННННННННННННННННННННННННННННННННН»
 Расшифровка LEN і Размер і	    Зона прерывания		є
ДДДДДДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¶
       00	 і 1 байт і  По любому линейному адресу 	є
       01	 і 2 байтаі  Выравненная по границе слова	є
       10	 і не определено, не используется		є
       11	 і 4 байтаі  Выравненная по границе двойного	є
		 і	  і  слова				є
НННННННННННННННННПННННННННПНННННННННННННННННННННННННННННННННННННј
    1. Область LEN (длина) указывает размер зоны прерывания, ко-
торая может составлять 1, 2 или 4 байта. Область LEN расшифровы-
ваться в таблице 17.1.
    Каждая область LEN управляет размером соответствующей облас-
ти  прерывания, управляя всеми младшими битами регистра прерыва-
ния, используемыми для обнаружения точки прерывания.  Двухбитные
точки прерывания используют бит 0 линейного адреса, в результате
имеем выравненную по границе слова зону прерывания.Четырехбитные
точки  прерывания  игнорируют биты 0 и 1 линейного адреса, в ре-
зультате имеем выравненную по границе двойного слова зону преры-
вания.
    2. RW (чтение запись) определяет тип доступа, который  может
инициализировать зону прерывания. Область RW определена в табли-
це 17.2.
    3.	G и L, глобальные возможности или локальные возможности,
два бита разрешения для каждого прерывания. Если по крайней мере
один из битов разрешения установлен в 1, соответствующее  преры-
вание  возможно. Нет совершенно никаких различий в функциях бит,
различные наименования только намекают на принятые  наименования
в мультизадачных системах, где один из бит разрешения может быть
установлен  глобальной	отладочной  программой,  а  другой - ло-
кальной отладочной подпрограммой.
    4. GE и LE, глобальная точность или локальная точность,  два
бита  точности,  затрачивающие прерывания по адресу данных. Если
по крайней мере один из обоих бит установлен в 1, о любом преры-
вании по адресу данных будет сообщено точно после завершения ко-
манды, которая послужила причиной пересылки (0 прерывании коман-
ды всегда сообщается точно, независимо от GE и LE бит). Если  не
выбрано  точное совпадение прерывания по адресу данных, о преры-
вании по адресу данных не может быть сообщено до времени  выпол-
нения  нескольких  последующих команд - или может даже вообще не
быть сообщения. Если вы хотите несомненно отловить все	прерыва-
ния по адресу данных, вы должны установить один из этих бит точ-
ности, пока идет отладка. Точность сообщения обеспечивается тем,
что  исполняющее устройство 80386 вынуждено ждать завершения лю-
бой передачи операнда данных перед началом выполнения  следующей
команды.  Это  будет  немного  замедлять  выполнение  программы
80386.
			    - 189 -
		       Расшифровка области RW	    Таблица 17.2
 RW расшифровкаі  Тип доступа, который может инициализировать
	       і		прерывание
ДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
      00       і       Только выполнение команды
      01       і       Только запись данных
      10       і       Неопределено, не используется
      11       і       Только чтение или только запись
    DR6,  отладочный регистр состояния, содержит несколько облас-
тей, обнаруживающих причину отладочной	исключительной	ситуации,
когда  она  возникает.	Каждая	область  - однобитный флаг, соот-
ветствующий одной из возможностей отладки, каждый из которых  мо-
жет  быть  автоматически установлен 80386 как вектор подпрограммы
исключительной ситуации 1. Эти биты никогда не сбрасываются авто-
матически, однако подпрограмма исключительной  ситуации  1  несет
ответственность за сброс этих флагов.
    1.	BO, B1, B2 и B3, точки прерываний 0, 1, 2 и 3, если уста-
новлены в 1, указывают, что связанное с этими точками  прерывание
было инициализировано.
    2.	BD, отладочные регистры 1, используемые ICE-386, если ус-
тановлены в 1, указывают, что попытка чтения или записи  получает
отказ,	 т.к.  ICE  386  внутрисхемный	эмулятор  использует  эти
средства. Таким образом, во время операций ICE-386  для  отладки,
программные отладчики не могут быть использованы одновременно.
    3.	BS, отладочная ситуация благодаря пошаговому режиму, если
установлен в 1, указывает, что исключительная ситуация 1 была вы-
работана, поскольку TF (флаг одношаговый работы) был установлен в
регистре EFLAG. Когда отладчик находится в пошаговом режиме через
целевую программу, ожидается, что BS установлен.
    4. BT, отладочная ситуация благодаря ловушке  переключения	-
задач, если установлен в 1, указывает, что была выработана исклю-
чительная ситуация 1, поскольку переключения задач активизировала
задачу, в которой бит T (ловушка) 32-битного TSS установлен в 1.
    Если команда, начинающаяся с адреса точки прерывания близка к
выполнению,  возникает условие прерывания и, если прерывание воз-
можно, немедленно возникает ситуации 1 как ошибка перед тем,  как
команда выполнится.
    Заметим,  что  только  предвыборка	команды не инициализирует
прерывание: команда может действительно быть близка к  выполнению
во время того, когда происходит прерывание.
      Прерывания по адресу данных с отладочными регистрами
      ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
    Прерывание	по  адресу  данных может быть установлено записью
линейного адреса точки прерывания в отладочный регистр. Для  пре-
рывания по адресу данных RW область должна быть 01 (только запись
данных) или 11 (запись или чтение данных). LEN область	может за-
давать	любую  определенную величину: (00, 10 или 11 (для 1-, 2-,
или 4 байтной зоны прерывания).
    Если выборка данных полностью или  частично  попадает  внутрь
зоны прерывания по адресу данных, возникает условие прерывания по
адресу	данных, и, если прерывание возможно, исключительная ситу-
ация 1 возникает как ловушка после того, как происходит выборка.
			    - 190 -
			Флаг перезапуска
			ДДДДДДДДДДДДДДДД
    Тонкой чертой, которая усовершенствует действие  средств  от-
ладки 80386, является RF (флаг перезапуска) бит в EFLAG. RF бит в
EFLAG,	когда  он  установлен в 1, может запретить прерывание ко-
манд, когда обработчик исключительной ситуации 1  возвращается	к
той же самой команде, которая до сих пор является точкой прерыва-
ния команды.
    80386  автоматически  устанавливает  RF в изображении EFLAG в
стеке, когда EFLAG записывается в стек, когда 80386 входит в  лю-
бой  обработчик  ошибки.  Однако команда IRET в конце обработчика
ошибки, которая выталкивает изображение EFLAG из стека, будет ус-
танавливать RF в регистре EFLAG, выполнение будет  возобновлено с
адреса прерывания без выработки другого прерывания по ошибке.
    Если, после ошибки отладки, RF установлен в  1  и  обработчик
повторит  ошибочную команду, возможно, что повторение команды вы-
зовет другие ошибки. Т.к. любой обработчик  ошибки  устанавливает
RF  флаг, повторение команды после этих ошибок будет также выпол-
няться с RF=1, так что точка прерывания при отладке для этой  од-
ной  команды будет продолжать игнорироваться. Процессор автомати-
чески очищает RF только после успешного завершения команды.
    Заметим, что программист не нуждается в явной  установке  или
сброс  RF  для корректных операций. Процессор автоматически уста-
навливает RF в 1, чтобы запретить повторение  отладочной  искючи-
тельной  ситуации. Когда команда повторяется. Процессор автомати-
чески сбрасывает RF в 0 при успешном завершении команды, так  что
прерывание команд не будет запрещено для будущих команд.
			    - 191 -
	      СРЕДСТВА ОТЛАДКИ СОВМЕСТИМЫЕ С 8086
	       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
		      Пошаговая прогонка.
		       ДДДДДДДДДДДДДДДДДД
    Если бит TF  (флаг	пошаговой  прогонки)  установлен  в  1,
ловушка  исключительной  ситуации  1  будет  срабатывать   после
исполнения каждой следующей  инструкции.  На  практике,  обычно,
отладчик устанавливает бит TF  образа  регистра  EFLAG	в  стеке
отладчика, а  затем  передает  управление  целевой  программе  и
загружает образ регистра EFLAG с помощью единственной инструкции
IRET.  Пошаговая  ловушка  срабатывает	после  выполнения  одной
инструкции целевой программы.
    Когда  появляется  исключительная  ситуация  1  в  качестве
ловушки, CS:EIP  заносятся  в  стек  отладчика,  указывающий  на
следующую  неисполненную  инструкцию   отлаживаемой   программы.
Обработчик  исключительной  ситуации  1  может	 таким	 образом
эффективно осуществлять  пошаговую  прогонку  целевой  программы
заканчивающейся просто инструкцией IRET.
    Инструкция контрольной точки (Breakpoint instruction).
     ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
    Однобайтовым кодом операции контрольной точки является  код
ССh. Код операции контрольной  точки  генерирует  исключительную
ситуацию ловушки 3.Инструкция контрольной точки  кодируется  как
однобайтовая инструкция, поэтому она может быть помещена в любую
позицию без перезаписи более, чем  одной  команды.  Однобайтовая
инструкция  контрольной   точки   является   заменителем   общей
инструкции программного прерывания INT n, где n равно 3.  Однако
инструкция контрольной точки (код операции ССh)  нечувствительна
к IOPL, в то время как INT n чувствительна к IOPL  в  защищенном
режиме и в режиме виртуального 8086.
    Обычно отладчик может  выработать  однобайтовую  инструкцию
контрольной  точки  на	 всех	требуемых   контрольных   точках
исполняемых инструкций. Инструкции контрольных	точек  не  могут
быть временно записаны в постоянную память, такую как ROM. Также
отметим, что инструкция контрольной точки не может  обеспечивать
возможность  прерываний  по  данным.  Такие  короткие	переходы
уничтожаются  при   использовании   отладочных	 регистров   для
выполнения точек прерывания инструкций как описано выше.
			  ПРИЛОЖЕНИЕ А
		ФЛАГОВЫЙ РЕГИСТР И КОДЫ УСЛОВИЙ.
		 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
     32 битный флаговый регистр состоит из 8 полей состояния и 5
полей управления. Неопределенные биты считываются как нули (  за
исключением бита 1, который считывается как 1 )  и  игнорируются
при записи в них информации. Младшие 16  бит  регистра	ЕFLАG  (
расширенного регистра FLАG ) могут также быть доступны как FLАG
регистр для 16 битных операций.
		 Таблица А.1. Флаговый регистр.
31 30	18 17 16 15 14	    11 10  9  8  7  6  5  4  3	2  1  0
ГДЕДЕД..ЕДЕДДЕДДЕДДЕДДЕДДДДЕДДЕДДЕДДЕДДЕДДЕДДЕДДЕДДЕДДЕДДЕДДЕДДґ
і0і0і	 0іVMіRFі 0іNTіIOPLіOFіDFіIFіTFіSFіZFі 0іAFі 0іPFі 1іCFі
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
     Флаговые поля регистра ЕFLАG, определенные ниже,  описывают
их поведение во время выполнения инструкций, которые  влияют  на
эти флаги. Существуют, конечно,  некоторые  инструкции,  которые
оставляют  флаги  полностью  без  изменений.  В   приложении   В
инструкции рассмотрены в деталях.
			    - 192 -
     СF - флаг переноса, бит 0.
     СF  устанавливается  в  1,  если  в   результате	операции
производится перенос старшего бита (сложение) или заем в старший
бит (вычитание). В противном случае СF = 0. Для 8, 16, 32 битных
операций он устанавливается для переноса или заема для битов  7,
15, 31 соответственно.
     РF - флаг паритета, бит 2.
     РF = 1, если 8 младших  бит  результата  операции	содержат
четное число единиц ( четный паритет ). РF = 0, если  8  младших
бит имеют нечетное количество единиц ( нечетный  паритет  ).  РF
является функцией только младших 8  бит  независимо  от  размера
операнда.
     АF - вспомогательный флаг переноса, бит 4.
     Вспомогательный флаг  переноса  применяется  для  упрощения
сложения и вычитания двоично- десятичных чисел. АF = 0,  если  в
результате операции происходит перенос	бита  3  (сложение)  или
заем в	бит  3	(вычитание).  Иначе  АF  =  0.	АF  работает  на
перенос/заем  битов  только  для  бита	3  независимо  от  длины
операнда.
     ZF - флаг нуля, бит 6.
     ZF = 1, если все биты результата - нули.
     SF - флаг знака, бит 7.
     SF = 1, если старший бит результата равен 1. Иначе - 0. Для
8, 16, 32 битных операций SF отражает состояние битов 7, 15,  31
соответственно.
     ТF - флаг ловушки, бит 8.
     ТF разрешает пошаговую прогонку. Когда ТF устанавливается в
1 процессор 80386 генерирует исключительную ситуацию  ловушки  1
после  исполнения  следующей   инструкции.   Когда   ТF   =   0,
исключительная ситуация 1 генерируется только другими средствами
отладки, обеспечиваемыми отладочными регистрами.
     IF - флаг разрешения прерываний, бит 9.
     Когда бит IF установлен в	1,  он	разрешает  распознавание
внешних  прерываний,  вызываемых   сигналом   на   выводе   INТR
микросхемы. Когда IF сброшен в 0, внешние сигналы, подаваемые на
вывод  INТR,  не  распознаются.  IОРL  показывает   максимальное
значение СРL при котором IF бит может быть изменен, когда  новые
значения  передаются  из  стека  в  ЕFLАG  (или  FLАG)	регистр.
Переключатели задач могут  всегда  изменять  IF  бит  как  новое
состояние ЕFLАG, загруженное из сегмента состоямия задачи (ТSS).
     DF - флаг направления, бит 10.
     DF  определяет  как  ЕSI  и/или  ЕDI   индексные	регистры
декрементируются  или  инкрементируются  после	каждой	итерации
стринговых инструкций. Они инкрементируются, если DF = 0 (стринг
обрабатывается слева направо). Постдекремент  производится  если
DF = 1 (стринг обрабатывается справа налево).
     ОF - флаг переполнения, бит 11.
     ОF = 1, если в результате операции происходит  переполнение
числа  со  знаком.  Знаковое  переполнение  возникает  когда   в
результате  операции  происходит  перенос/заем	в  знаковый  бит
результата,  но  не  является  результатом   переноса/заема   из
знакового бита или наоборот. Для 8, 16 и 32 битных  операций  ОF
устанавливается в соответствии со знаковым битом в разря дах  7,
15 и 31.
			    - 193 -
     IОРL - уровень привлегии ввода - вывода, биты 12 - 13.
     Это  двухбитное  флаговое	поле  применяется  в  защищенном
режиме. IОРL численно показывет максимальное  значение	СРL  при
котором ввод/вывод может  производиться  безусловно.  При  любом
большем  значении  СРL	карта  битов   разрешения   ввода/вывода
автоматически принимается во  внимание	процессором.  Этот  флаг
также показывает максимальное значение СРL разрешая изменение IF
(разрешения прерываний)  флагового  бита  когда  новые	значения
извлекаются из стека в	ЕFLАG.	Инструкции  РОРF  и  IRЕТ  могут
изменить IОРL флаг только когда СРL равен 0. Переключатели задач
всегда изменяют IОРL поле, т.к. новый образ ЕFLАG загружается из
сегмента состояния задачи (ТSS).
     NТ - вложенная задача, бит 14.
     Этот  флаг  используется  в  защищенном  режиме.  Этот  бит
устанавливается  автоматически	процессором   80386   во   время
переключения  задач.  NТ  устанавливается   процессором,   чтобы
показать, что выполнение текущей задачи вложено  в  родительскую
задачу. Если NТ  =  1,	он  показывает,  что  сегмент  состояния
текущей задачи	содержит  значащий  селектор  обратной	связи  с
родительской задачей. Значение NТ тестируется  инструкцией  IRЕТ
для того, чтобы определить как она должна выполнять  межзадачный
возврат в задачу, указанную обратной связью (NТ  =  1)	или  она
должна выполнить нормальный возврат (NТ =  0).	Инструкции  РОРF
или  IRЕТ  могут  влиять  на  установку  NТ  в	соответствии   с
извлекаемым из стека образом регистра ЕFLАG при любом СРL.
     RF - флаг резюме, бит 16.
     RF использован в сочетании с  точками  прерываний	регистра
отладки.  Он  проверяет  границы  инструкций  перед   обработкой
обработкой контрольной точки (Вreаkроint).
     Когда  RF	=  1,  он  вызывает  какое  -  либо   отладочное
прерывание  (контрольная  точка  выполнения  инструкции),  чтобы
игнорировать  следующую  инструкцию.  Затем   RF   автоматически
сбрасывается   при   успешном	завершении   каждой   инструкции
(благополучность     завершения     индицируется     отсутствием
исключительных	ситуаций),  за	исключением   инструкции   IRЕТ,
инструкции РОРF  и  инструкций,  вызывающих  переключение  задач
(JМР,  САLL,  INТ  3,  INТ  n,	INТО,  ВОUNDS,	или  IRЕТ).  Эти
инструкции устанавливают RF в соответствии с загрузкой	регистра
ЕFLАG. Например в конце программы обслуживания контрольных точек
(исключительная ситуация 1), инструкция IRЕТ  может  извлечь  из
стека образ регистра ЕFLАG, имея бит  RF  =  1	и  в  результате
выполнения   программы	 по   адресу   контрольной   точки   без
генерирования прерывания другой  контрольной  точки  на  той  же
самой инструкции.
     VМ - Режим виртуального 8086, бит 17.
     Бит VМ обеспечивает режим виртуального  8086  в  защищенном
режиме. Если этот  бит	установливается  при  работе  процессора
80386 в защищенном режиме,  то	процессор  начинает  работать  в
режиме	виртуального  8086,  поддерживая   загрузки   сегментных
регистров как в реальном  режиме,  но  генерируя  исключительную
ситуацию 13 на привилегированных кодах операций.  Бит  VМ  может
быть установлен только в защищенном режиме инструкцией IRЕТ если
СРL = 0, или переключателем задач на  любом  уровне  привилегий.
Флаг VМ неизменяется инструкцией РОРF. РUSНF  всегда  заносит  в
стек 0 в этом бите, даже если выполняется в режиме  виртуального
8086. Образ регистра ЕFLАG, записанный в стек во время обработки
прерывания  или сохрененный во время переключения задач,  будет,
однако, содержать 1 в этом флаге, если код прерывания исполнялся
как виртуальная задача 8086.
			    - 194 -
			 Приложение В.
			  ДДДДДДДДДДДД
		  Набор инструкций в деталях.
		   ДДДДДДДДДДДДДДДДДДДДДДДДДД
     Это  приложение  анализирует  по  порядку	все   инструкции
доступные для исполнения процессором 80386, раз`ясняя в  деталях
их назначение, то, каким образом они действуют на флаги,  и  как
они могут быть использованы применительно  к  различным  режимам
адресации. Режимы адресации обсуждены детально в главах 4 и 7.
     Таблица В.1 резюмирует категории инструкций, и обеспечивают
быстрый обзор инструкций, доступных  во  всех  рабочих	режимах.
Вообще	 говоря,   большинство	 инструкций   всегда	доступны
программисту,  но  специальные	инструкции,  которые   управляют
системными  регистрами	ограничены  уровнем   привилегий   0   в
защищенном режиме. В защищенном режиме	инструкции  ввода/вывода
ограничены уровнем, указывемым IОРL в противоположность  битовой
карте разрешений, разрешающей ввод/вывод по  данному  адресу  на
всех уровнях привилегий. В режиме  виртуального  8086  инстукции
ввода/вывода ограничены битовой картой разрешения ввода/вывода.
     Таблица В показывает также  влияние  каждой  инструкции  на
предвыборку  кода  80386.   Большинство   инструкций   позволяют
предвыборному устройству продолжать  беспрепятственно,	пока  не
будет  достигнут  конец  сегмента  или	 не   будет   достигнута
несуществующая	или  неиспользуемая  страница	памяти.   Однако
инструкции	  безусловнной	      передачи	      управления
(САLL,INТ,JМР,RЕТ,IRЕТ)  и  инструкция	НLТ  вызывают  остановку
предвыборщика до тех  пор,  пока  последующие  адреса  не  будут
непосредственно выполнены и продолжится предвыборка тех адресов,
которые не будут, следовательно, использовать всю  ширину  шины.
Условный  переход  не  останавливает  предвыборщик.   Инструкции
подобные LООРсс останавливают  устройство  предвыборкии  поэтому
предпочтительны  для   получения   максимальной   скорости   при
выполнении итерационных циклов, где  тестовое  условие	наиболее
часто будет истинно (т.е. передача управления будет  происходить
наиболее часто.
			    - 195 -
	Таблица В.1. Подробный список инструкций 80386.
ЙНННННННННСННННННННННННННННННННННННННСННННСНННННННННННННННННННННН
ННННН»
є	  і			     і	  і	Наличие в 80386       є
єМнемоникаі   Описание инструкции    іКлючіреалізащ.івиртіпредвыі
стра-є
є	  і			     і	  іреж.іреж.і8086іборка.іницы є
ЗДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДЕДДДДЕДДДДЕДДДДЕДДДДДДЕ
ДДДДД¶
є  1.AAA  іASII-коррекция сложения   і	86іда  іда  іда  іпродолі 
201 є
є  2.AAD  іASII-коррекция деления    і	86іда  іда  іда  іпродолі 
202 є
є  3.AAM  іASII-коррекция умножения  і	86іда  іда  іда  іпродолі 
203 є
є  4.AAS  іASII-коррекция вычитания  і	86іда  іда  іда  іпродолі 
203 є
є  5.ADC  іСложение с переносом      і	86іда  іда  іда  іпродолі 
205 є
є  6.ADD  іСложение		     і	86іда  іда  іда  іпродолі 206 є
є  7.AND  іЛогическое "и"            і  86іда  іда  іда  іпродолі
 208 є
є  8.ARPL іНастройка RPL поля селек- іPROTінет;іда  інет;іпродолі
 209 є
є	  ітора(уровень привилегий)  і	  і    і    і	 і	і     є
є  9.BOUNDіПроверка границ массива   і 186іда  іда  іда  іпродолі
 210 є
є 10.BSF  іСканирование битов вперед і 386іда  іда  іда  іпродолі
 211 є
є 11.BSR  іСканирование битов назад  і 386іда  іда  іда  іпродолі
 212 є
є 12.BT   іПроверка бита	     і 386іда  іда  іда  іпродолі 213 є
є 13.BTC  іПроверка бита с инверсией і 386іда  іда  іда  іпродолі
 215 є
є 14.BTR  іПроверка бита со сбросом  і 386іда  іда  іда  іпродолі
 217 є
є 15.BTS  іПроверка бита с установкойі 386іда  іда  іда  іпродолі
 218 є
є 16.CALL іВызов подпрограммы/задачи і	86іда  іда  іда  і стоп і 
220 є
є 17.CBW  іПреобразование байта в слоі	86іда  іда  іда  іпродолі 
225 є
є   /CWDE іво/слова в двойное слово  і	  і    і    і	 і	і     є
є 18.CLC  іСброс флага переноса      і	86іда  іда  іда  іпродолі 
226 є
є 19.CLD  іСброс флага направления   і	86іда  іда  іда  іпродолі 
226 є
є 20.CLI  іСброс флага прерывания    і	86іда  іIOPLіIOPLіпродолі 
227 є
є	  і			     і	  і    і    і =3 і	і     є
є 21.CLTS іСброс флага переключателя іPROTіда; іда  іда; іпродолі
 229 є
є	  і  задач		     і	  і    і    і	 і	і     є
є 22.CMC  іИнверсия флага переноса   і	86іда  іда  іда  іпродолі 
230 є
є 23.CMP  іСравнение операнда	     і	86іда  іда  іда  іпродолі 23
0 є
є 24.CMPSВіСравнение строки байт     і	86іда  іда  іда  іпродолі 
231 є
є 25.CMPSWіСравнение строки слов     і	86іда  іда  іда  іпродолі 
231 є
є   /CMPSDі/строки двойных слов      і	  і    і    і	 і	і     є
є 26.CWD  іПреобразование слова в    і	86іда  іда  іда  іпродолі 
233 є
є   /CDQ  іДвойное слово/двойного    і	  і    і    і	 і	і     є
є 27.DAA  іДесятичная коррекция послеі	86іда  іда  іда  іпродолі 
233 є
є	  і   сложения		     і	  і    і    і	 і	і     є
є 28.DAS  іДесятичная коррекция послеі	86іда  іда  іда  іпродолі 
235 є
є	  і	 вычитания	     і	  і    і    і	 іжаетсяі     є
є 29.DEC  іУменьшение на 1	     і	86іда  іда  іда  іпродолі 236 є
є 30.DIV  іДеление беззнаковое	     і	86іда  іда  іда  іпродолі 2
37 є
є 31.ENTERіУстановка набора парамет- і 186іда  іда  іда  іпродолі
 238 є
є	  іров для входа в процедуру і	  і    і    і	 і	і     є
є 32.HLT  іОстанов		     і	86іда  іLe- інет/і стоп і 239 є
є	  і			     і	  і    іvel0і	 і	і     є
є 33.INDIVіДеление знаковое	     і	86іда  іда  іда  іпродолі 240 
є 34.IMUL іУмножение знаковое	     і	86іда  іда  іда  іпродолі 24
2 є
є 35.IN   іВвод операнда из внешних  і	86іда  іIOPLіBIT іпродолі 
243 є
є	  і	устройств	     і	  і    і/BITі	 і	і     є
є 36.INC  іУвеличение на 1	     і	86іда  іда  іда  іпродолі 244 є
є 37.INSB іВвод байта из внешних     і 186іда  іIOPLіBIT іпродолі
 245 є
є	  і    устройств	     і	  і    і/BITі	 і	і     є
є 38.INSW іВвод слова из внешних уст-і 186іда  іIOPLіBIT іпродолі
 245 є
є	  іройств/двойного слова из  і	  і    і/BITі	 і	і     є
є   /INSD івнешних устройств	     і	  і    і    і	 і	і     є
є 39.INT 3іПрерывание 3 	     і	86іда  іда  іда  і стоп і 247 є
є 40.INTO іПрерывание 4,если перепол-і	86іда  іда  іда  і стоп і 
248 є
є	  інение		     і	  і    і    і	 і	і     є
є 41.INT nіПрерывание n 	     і	86іда  іда  іIOPLі стоп і 249 є
є	  і			     і	  і    і    і =3 і	і     є
			    - 196 -
є 42.IRET іВозврат из прерывания     і	86іда  іда  іIOPLі стоп і 
253 є
є   /IRETDіВозврат из задачи	     і	  і    і    і =3 і	і     є
є 43.JCC  і			     і	86іда  іда  іда  іпродолі 259 є
є 44.JCXZ іПереход если регистр СХ=0 і	86іда  іда  іда  іпродолі 
260 є
є   /JECXZіПереход,если регистр ЕСХ=0і	  і    і    і	 і	і     є
є 45.JMP  іБезусловный переход	     і	86іда  іда  іда  і стоп і 2
61 є
є 46.LANF іЗагрузка регистра АН из   іPROTінет;іLe- інет;іпродолі
 265 є
є	  ірегистра EFLAG	     і	  і    іvel0і	 і	і     є
є 47.LAR  і			     і	86іда  іда  іда  іпродолі 266 є
є 48.LEA  іЗагрузка адреса в регистр і	86іда  іда  іда  іпродолі 
268 є
є 49.LEAVEіВыход из процедуры	     і 186іда  іда  іда  іпродолі 2
69 є
є 50.LGDT іЗагрузка таблицы глобаль- іPROTіда; іLe- інет/іпродолі
 269 є
є	  іных дескрипторов	     і	  і    іvel0і	 і	і     є
є 51.LIDT іЗагрузка таблицы дескрип- іPROTіда; іLe- інет/іпродолі
 271 є
є	  іторов прерываний	     і	  і    іvel0і	 і	і     є
є 52.LDS  іЗагрузка указателя в      і	86іда  іда  іда  іпродолі 
272 є
є	  ірегистр D		     і	  і    і    і	 і	і     є
є 53.LES  іЗагрузка указателя в      і	86іда  іда  іда  іпродолі 
272 є
є 54.LFS  іЗагрузка указателя в      і 386іда  іда  іда  іпродолі
 272 є
є	  ірегистр сегмента F	     і	  і    і    і	 і	і     є
є 55.LGS  іЗагрузка указателя в      і 386іда  іда  іда  іпродолі
 272 є
є	  ірегистр сегмента G	     і	  і    і    і	 іжаетсяі     є
є 56.LSS  іЗагрузка указателя в      і 386іда  іда  іда  іпродолі
 272 є
є	  ірегистр сегмента S (стек) і	  і    і    і	 і	і     є
є 57.LLDT іЗагрузка регистра таблицейіPROTінет;іLe- інет;іпродолі
 274 є
є	  і локальных дескрипторов   і	  і    іvel0і	 і	і     є
є 58.LMSW іЗагрузка регистра слово   іPROTіда; іLe- іда; іпродолі
 275 є
є	  ісостоянием машины (СR0)   і	  і    іvel0і	 і	і     є
є 59.LODSBіЗагрузка байта	     і	86іда  іда  іда  іпродолі 276 є
є 60.LODSWіЗагрузка слова	     і	86іда  іда  іда  іпродолі 276 є
є   /LODSDіЗагрузка двойного слова   і	  і    і    і	 і	і     є
є 61.LOOP іВыполнить цикл и уменьшитьі	86іда  іда  іда  іпродолі 
277 є
є	  ірегистр ЕСХ		     і	  і    і    і	 і	і     є
є 62.LOOPEіЦикл если равно	     і	86іда  іда  іда  іпродолі 278 є
є   /LOPZ іЦикл,если равно 0	     і	  і    і    і	 і	і     є
є 63.LSL  іЗагрузка ограничителя     іPROTінет;іда  інет;іпродолі
 280 є
є	  ісегмента в регистр	     і	  і    і    і	 і	і     є
є 64.LTR  іЗагрузка регистра задачи  іPROTінет;іLe- інет;іпродолі
 282 є
є	  і			     і	  і    іvel0і	 і	і     є
є 65.MOV  іПереслать в/из регистра   і	86іда  іда  іда  іпродолі 
283 є
є	  іобщего назначения	     і	  і    і    і	 і	і     є
є	  іПереслать в/из регистра   і	86іда  іда  іда  іпродолі 285 є
є	  ісегмента		     і	  і    і    і	 і	і     є
є	  іПереслать в/из системного і 386іда  іLe- інет/іпродолі 286 є
є	  ірегистра		     і	  і    іvel0і	 і	і     є
є 66.MOVSBіПересылка байта	     і	86іда  іда  іда  іпродолі 288 є
є 67.MOVSWіПересылка слова	     і	86іда  іда  іда  іпродолі 288 є
є * /MOVSDіПересылка двойного слова  і	  і    і    і	 і	і     є
є 68.MOVSXіПересылка данных со знако-і	86іда  іда  іда  іпродолі 
289 є
є	  івым расширением	     і	  і    і    і	 і	і     є
є 69.MOVZXіПересылка данных с нулевымі	86іда  іда  іда  іпродолі 
290 є
є	  ірасширением		     і	  і    і    і	 і	і     є
є 70.MUL  іУмножение без учета знака і	86іда  іда  іда  іпродолі 
291 є
є 71.NEG  іИнвертирование	     і	86іда  іда  іда  іпродолі 292 є
є 72 NOP  іНет операции 	     і	86іда  іда  іда  іпродолі 293 є
є 73.NOT  іЛогическое дополнение     і	86іда  іда  іда  іпродолі 
293 є
є 74.OR   іЛогическое "или"          і  86іда  іда  іда  іпродолі
 294 є
є 75.OUT  іВывод		     і	86іда  іIOPLіBIT іпродолі 296 є
є	  і			     і	  і    і/BITі	 і	і     є
є 76.OUTSBіВывод байта данных	     і 186іда  іIOPLіBIT іпродолі 2
97 є
є	  і			     і	  і    і/BITі	 і	і     є
є 77.OUTSWіВывод слова данных	     і 186іда  іIOPLіBIT іпродолі 2
97 є
є   /OUTSDіВывод двойного слова      і	  і    і/BITі	 і	і     є
			    - 197 -
є 78.POP  іВыталкивание данных из    і	86іда  іда  іда  іпродолі 
299 є
є	  істека в регистр	     і	  і    і    і	 і	і     є
є 79.POPA іВыталкивание данных из    і 186іда  іда  іда  іпродолі
 300 є
є   /POPADістека во все 16/32 битные і	  і    і    і	 і	і     є
є	  ірегистры общего назначенияі	  і    і    і	 і	і     є
є 80.POPF іВыталкивание данных из    і	86іда  іда  іIOPLіпродолі 
302 є
є   /POPFDістека в FLAG/EFLAG	     і	  і    і    і =3 іжаетсяі   
  є
є 81.PUSH іПоместить в стек	     і	86іда  іда  іда  іпродолі 304 
є 82.PUSHAіПоместить в стек все 16/32і 186іда  іда  іда  іпродолі
 305 є
є  /PUSHADібитные регистры	     і	  і    і    і	 і	і     є
є 83.PUSHFіПоместить регистр FLAG/   і	86іда  іда  іIOPLіпродолі 
307 є
є  /PUSHFDіEFLAG в стек 	     і	  і    і    і =3 і	і     є
є 84.RCL  іСдвиг влево		     і	86іда  іда  іда  іпродолі 308 є
є   /RCR  іСдвиг вправо 	     і	  і    і    і	 і	і     є
є 85.RET  іВозврат из программы      і	86іда  іда  іда  і стоп і 
310 є
є 86.ROL  іЦиклический сдвиг влево   і	86іда  іда  іда  іпродолі 
315 є
є   /ROR  іЦиклический сдвиг вправо  і	  і    і    і	 і	і     є
є 87.SAHF іПереслать регистр АН в    і	86іда  іда  іда  іпродолі 
316 є
є	  ірегистр EFLAG	     і	  і    і    і	 і	і     є
є 88.SAL  іАрифметический сдвиг влевоі	86іда  іда  іда  іпродолі 
317 є
є   /SAR  і/вправо		     і	  і    і    і	 і	і     є
є 89.SBB  іВычитание с заемом	     і	86іда  іда  іда  іпродолі 31
9 є
є 90.SCASBіСканирование строки байт  і	86іда  іда  іда  іпродолі 
320 є
є 91.SCASWіСканирование строки слова і	86іда  іда  іда  іпродолі 
320 є
є   /SCASDі/двойного слова	     і	  і    і    і	 і	і     є
є 92.SETССіУстановка байта равного   і 386іда  іда  іда  іпродолі
 321 є
є	  ікоду условия 	     і	  і    і    і	 і	і     є
є 93.SGDT іЗаписать в память регистр іPROTіда; іда  іда; іпродолі
 323 є
є	  іглобального дескриптора   і	  і    і    і	 і	і     є
є 94.SHL  іЛогический сдвиг влево    і	86іда  іда  іда  іпродолі 
324 є
є   /SHR  і/вправо		     і	  і    і    і	 і	і     є
є 95.SHLD іСдвиг двойной точности    і 386іда  іда  іда  іпродолі
 326 є
є   /SHRD івлево/вправо 	     і	  і    і    і	 і	і     є
є 96.SIDT іЗаписать в память дескрип-іPROTіда; іда  іда; іпродолі
 328 є
є	  ітор таблицы прерываний    і	  і    і    і	 і	і     є
є 97.SLDT іЗаписать регистр локальнойіPROTінет;іда  інет;іпродолі
 329 є
є	  ітаблицы дескрипторов      і	  і    і    і	 і	і     є
є 98.SMSW іЗаписать в регистр слово  іPROTіда; іда  іда; іпродолі
 330 є
є	  ісостояние машины	     і	  і    і    і	 і	і     є
є 99.STC  іУстановить флаг переноса  і	86іда  іда  іда  іпродолі 
330 є
є100.STD  іУстановить флаг	     і	86іда  іда  іда  іпродолі 331 є
є	  інаправления		     і	  і    і    і	 і	і     є
є101.STI  іУстановить флаг разрешенияі	86іда  іIOPLіIOPLіпродолі 
332 є
є	  іпрерываний		     і	  і    і    і =3 і	і     є
є102.STOSBіЗаписать в память строко- і	86іда  іда  іда  іпродолі 
333 є
є	  івую информацию (байт)     і	  і    і    і	 і	і     є
є103.STOSWіЗаписать в память строко- і	86іда  іда  іда  іпродолі 
333 є
є   /STOSDівую информацию слово/     і	  і    і    і	 і	і     є
є	  ідвойное слово	     і	  і    і    і	 і	і     є
є104.STR  іЗаписать регистр задачи   іPROTінет;іда  інет;іпродолі
 334 є
є105.SUB  іВычитание		     і	86іда  іда  іда  іпродолі 336 є
є106.TEST іПроверить операнд	     і	86іда  іда  іда  іпродолі 335
 є
є107.VERR іПроверка сегмента для**   іPROTінет;іда  інет;іпродолі
 337 є
є	  ічтения		     і	  і    і    і	 і	і     є
є108.VERW іПроверка сегмента для     іPROTінет;іда  інет;іпродолі
 337 є
є	  і  записи		     і	  і    і    і	 і	і     є
є109.WAIT іОжидание неактивного сос- і	86іда  іда  іда  іпродолі 
339 є
є	  ітояния вывода BUSY	     і	  і    і    і	 і	і     є
є110.XCHG іОбмен содержимым регистра/і	86іда  іда  іда  іпродолі 
340 є
є	  іпамяти с регистром	     і	  і    і    і	 і	і     є
є111.XLATВіПросмотр таблицы переко-  і	86іда  іда  іда  іпродолі 
341 є
є	  ідирования		     і	  і    і    і	 і	і     є
є112.XOR  іЛогическое исключающее    і	86іда  іда  іда  іпродолі 
342 є
є	  і	 "или"               і    і    і    і    і      і     є
ИНННННННННПННННННННННННННННННННННННННПННННПННННПННННПННННПННННННП
НННННј
			    - 198 -
		     Статус ( Stаtus Кey ).
		      ДДДДДДДДДДДДДДДДДДДДД
     86  Инструкция процессоров 8086/8088.  Она  присутствует  в
	 наборах инстукций всех процессоров серии  86:	8086/88,
	 80186/80188, 80286 и 80386.
    186  Инструкция впервые введена в процессоре  80186/80188  и
	 присутствует также в 80286 и 80386.
   РRОТ  Инструкция  была  введена  для  поддержки   защищенного
	 режима процессоров 80286 и 80386.
    386  Инструкция процессора 80386.
		Доступность ( Аvаilаbility Кey ).
		 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
     да  Инструкция или функция всегда доступна в  этом  режиме.
    да;  Эта инструкция доступна в реальном режиме для установки
	 в защищенный режим. Бывает, что она также доступна и  в
	 режиме  виртуального	8086,	хотя   она   обычно   не
	 встречается в коде процессора 8086.
  нет;	 В   реальном	режиме	 инструкция   недоступна.   Если
	 предпринимается   попытка    ее    использования,    то
	 генерируется исключительная ситуация  6.  То  же  самое
	 справедливо для режима виртуального 8086.
			    - 199 -
    Таблица В.2. Подробный список префиксов инструкций 80386.
є	  і			     і	  і	Наличие в 80386
є	  і			     і	  ГДДДДВДДДДВДДДДВДДДДДДВДДДДД
єМнемоникаі   Описание инструкции    іКлючіреалізащ.івиртіпредвыі
стра-
є	  і			     і	  іреж.іреж.і8086іборка.іницы
МНННННННННШННННННННННННННННННННННННННШННННШННННШННННШННННШННННННШ
ННННН
єa  USE16 іПрефикс размера адреса    і 386і да і да і да і ДДДД і
є  /USE32 і			     і	  і    і    і	 і	і
єb  USE16 іПрефикс размера операнда  і 386і да і да і да і ДДДД і
є  /USE32 і			     і	  і    і    і	 і	і
єc  CS:   іПрефикс сегмента программ і	86і да і да і да і ДДДД і
єd  DS:   іПрефикс сегмента данных   і	86і да і да і да і ДДДД і
єe  ES:   іПрефикс сегмента данных   і	86і да і да і да і ДДДД і
єf  FS:   іПрефикс сегмента данных   і 386і да і да і да і ДДДД і
єg  GS:   іПрефикс сегмента данных   і 386і да і да і да і ДДДД і
єh  SS:   іПрефикс сегмента стека    і 386і да і да і да і ДДДД і
єi  REP   іПовторение (инструкций    і	86і да і да і да і ДДДД і
є	  іINS,OUTS и STOS)	     і	  і    і    і	 і	і
єj  REPE  іПовторение при равно,для  і	86і да і да і да і ДДДД і
є	  іинструкций CMPS и SCAS    і	  і    і    і	 і	і
єk  REPNE іПовторение при не равно,  і	86і да і да і да і ДДДД і
є	  ідля инструкций CMPS и SCASі	  і    і    і	 і	і
єl  LOCK  іПрефикс блокировки шины   і	86і да і да і да і ДДДД і
IОРL/ВIТ В защищенном  режиме  инструкция  доступна  на  уровнях
	 привилегий выше или равных IОРL (т.е. СРL  IОРL),  если
	 битовая  карта  разрешений  ввода/вывода  не  разрешает
	 ввод/вывод в  адреса,	требуемые  этой  инструкцией.  В
	 противном   случае   при   попытке   ее   использования
	 генерируется исключительная ситуация 13.
   IОРL  В защищенном  режиме  инструкция  доступна  на  уровнях
	 привилегий выше или равных  IОРL  (т.е.  СРL  IОРL).  В
	 противном   случае   при   попытке   ее   использования
	 генерируется исключительная ситуация 13.
Level_0  В защищенном режиме такая инструкция доступна только на
	 уровне  привилегий  0	(т.е.	СРL   =   0),	наиболее
	 привилегированном. В противном случае	при  попытке  ее
	 использования генерируется исключительная ситуация 13.
    ВIТ  В режиме виртуального 8086 такая  инструкция  доступна,
	 если битовая карта  разрешений  ввода/вывода  разрешает
	 операции с адресом,  используемым  данной  командой.  В
	 противном   случае   при   попытке   ее   использования
	 генерируется исключительная ситуация 13.
 IОРL=3  В режиме  виртуального  8086  эта  инструкция	доступна
	 только при IОРL = 3. В противном случае при попытке  ее
	 использования генерируется исключительная ситуация 13.
  нет/	 В режиме виртуального 8086 эта  инструкция  недоступна,
	 т.к.  это  инструкция	уровня	 привилегий   0   (режим
	 виртуального 8086 работает на уровне привилегий 3). При
	 попытке ее  использования  генерируется  исключительная
	 ситуация 13.


Яндекс цитирования