Описание процессора intel-486


Глава 23. Виртуальный режим процессора 8086

Процессор i486(TM) поддерживает выполнение одной или более программ процессоров 8086, 8088, 80186 или 80188 в среде защищенного режима i486. Программа процессора 8086 выполняется в этой среде как часть виртуальной задачи 8086. Такие задачи пользуются преимуществом аппаратной поддержки и многозадачности, которые имеются в защищенном режиме. Задача из ряда множественных виртуальных задач процессора 8086 может выполняться не только в качестве программы процессора 8086, но и в качестве одной из задач процессора i486.

Цель виртуальной задачи процессора 8086 состоит в формировании "виртуальной машины" для выполнения программ, написанных для процессора 8086. Сама "виртуальная машина" состоит из аппаратуры процессора i486 и системного программного обеспечения. Эмуляция процессора 8086 является результатом взаимодействия аппаратного и программного обеспечения, описанного ниже:

Программное обеспечение, поддерживающее виртуальные машины 8086, называется виртуальным монитором 8086.

23.1 Выполнение программ процессора 8086.

Процессор 8086 работает в виртуальном режиме, когда установлен бит VM (виртуальная машина) в регистре EFLAGS. Процесср проверяет этот флаг при двух основных обстоятельствах:

  1. Когда загруженны регистры сегмента, для выяснения необходимости использовать формирование адресов по правилам процессора 8086.
  2. Когда декодирована команда, для определения, какие команды чувствительны к IOPL, и какие команды не поддерживаются ( как в реальном режиме).

23.1.1 Команды и регистры

Имеющийся в виртуальном режиме процессора 8086 набор регистров включает все регистры определенные для процессора 8086 плюс новые регистры введенные на процессоре i486: FS, GS, регистры отладки, регистры управления и регистры тестирования. Новые команды, которые могут выполнять операции над регистрами сегмента FS и GS в явном виде, и новые префиксы принудительного задания сегмента могут быть использованы для обращения к регистрам FS и GS при вычислении адресов в процессе выполнения команд. Команды могут использовать 32-разрядныe операнды посредством использования префикса размера операнда.

Программы, запускаемые как виртуальные задачи процессора 8086 могут воспользоваться преимуществами новых команд прикладной-ориентации, добавленных в архитектуру с введением процессоров 80186,80188,80286, 386 DX, SX и i486.

23.1.2 Преобразование адреса

В виртуальном режиме процессора 8086 процессор i486 не интерпретирует селекторы процессора 8086 обращением к дескрипторам, вместо этого он формирует линейные адреса так же, как это сделал бы процессор 8086. Селектор сдвигается влево на четыре бита, формируя 20-разрядный базовый адрес. Исполнительный адрес расширяется четырьмя нулями в старших битовых позициях и прибавляется к базовому адресу, образуя линейный адрес, как показано на Рисунке 23-1.

+-----------------------------------------------------------------------+
|           19                                        3        0        |
|            +--------------------------------------------------+       |
|   база     |   16-ти разрядный селектор сегмента    | 0 0 0 0 |       |
|            +--------------------------------------------------+       |
|     +      19        15                                       0       |
|            +--------------------------------------------------+       |
|   смещение | 0 0 0 0 | 16-ти разрядный исполнительный адрес   |       |
|            +--------------------------------------------------+       |
|                                                                       |
|             20                                                 0      |
|   линейный +--------------------------------------------------+       |
|   адрес    | X X X X X X X X X X X X X X X X X X X X          |       |
|            +--------------------------------------------------+       |
|                                                                       |
+-----------------------------------------------------------------------+
 Рисунок 23-1. Преобразование адреса процессора 8086

Поскольку существует возможность переноса, результирующий линейный адрес может иметь до 21 значащего разряда. Программами процессора 8086 могут генерироваться линейные адреса в диапазоне от 0 до 10FFEFH ( 1 мегабайт плюс дополнительно 64 Кбайт) линейного адресного пространства.

Виртуальные задачи процессора 8086 генирируют 32-разрядные линейные адреса. Программы процессора 8086 могут использовать только младшие 21 бит линейных адресов. Линейный адрес может быть размещен, используя разбиение на страницы, на любой 32-разрядный физический адрес.

В отличие от процессоров 8086 и 80286, процессор i486 подобно процессорам 386, может генерировать 32-разрядный исполнительный адрес, используя префикс размера адреса; однако в виртуальном режиме процессора 8086, значение 32-разрядного адреса не должно превышать 65.535, в противном случае возникает исключение. Для полной совместимости с режимом реальных адресов процессора 80286 возникает ошибка псевдозащиты ( прерывание 12 или 13 без ошибки), если значение исполнительного адреса выходит за пределы от 0 до 65.535.

23.2 Структура задачи виртуального процессора 8086.

Задача виртуального процессора 8086 состоит из программы процессора 8086, предназначенной для выполнения, и программы родного режима (native mode) процессора i486, играющей роль монитора виртуальной машины. Задача должна быть представлена при помощи TSS процессора i486 (но не TSS процессора 80286). Процессор входит в вируальный режим процессора 8086, выполняет программу процессора 8086 и возвращается в защищенный режим выполняя задачу-монитор или другие задачи процессора i486.

При выполнении в виртуальном режиме процессора 8086 реальная программа процессора 8086 нуждается в:

Монитор виртуального режима процессора 8086 - это программа процессора i486, выполняемая в защищенном режиме на нулевом уровне привилегий (наиболее привилегированный). Монитор в основном состоит из процедур обработки исключений и процедур инициализации. Как и любая другая программа процессора i486, монитор использует дескрипторы сегмента кода, которые должны находиться в GDT или LDT задач. Монитор имеет доступ к линейным адресам большим чем 10FFEFH, операционой системе и другому системному программному обеспечению. Монитору могут также понадобиться дескрипторы сегмента данных, с помощью которых монитор получает доступ к таблице векторов прерываний или другим частям программы процессора 8086, находящимся в первом мегабайте адресного пространства.

В общем случае имеется две возможности для использования операционной системы процессора 8086:

  1. Средства операционной системы процессора 8086 выполняются как часть программы процессора 8086. Такой подход рекомендуется в следующих случаях:
  2. Операционная система процессора 8086 может быть реализована или эмулирована в мониторе виртуального режима процессора 8086. Такой подход рекомендуется в следующих случаях:

23.2.1 Разбиение на страницы для задач виртуального режима процессора 8086

Разбиение на страницы не является обязательным при выполнении одной задачи виртуального режима процессора 8086, но оно является полезным или необходимым в следующих ситуациях:

23.2.2 Защита внутри виртуальной задачи процессора 8086

Защита не размещается между сегментами программы процессора 8086. Для защиты системного программного обеспечения, помещенного внутри виртуальной задачи процессора 8086, от прикладной программы процессора 8086 разработчикам программного обеспечения можно рекомендовать следующие пути:

23.3 Вход и выход из виртуального режима процессора 8086.

+---------------------------------------------------------------------------+
|               ДИАГРАММА ПЕРЕКЛЮЧЕНИЯ РЕЖИМОВ                              |
|                                                                           |
|    переключение задачи +----------------+                                 |
|        +---------------| Начальный вход |                                 |
|        | или IRET      +----------------+                                 |
|        |                                                                  |
|+--------------------+  прерывание или исключение  +---------------------+ |
||Программа процессора+---------------------------> | Монитор виртуального| |
||      8086          |          IRET               |  режима процессора  | |
||(Виртуальный режим) | <---------------------------|       8086          | |
|+--------------------+                             | (Защищенный режим)  | |
| | |                                               +---------------------+ |
| | |                                                                | |    |
| | | переключение                                    переключение   | |    |
| | |   задачи      +-------------------------------+    задачи      | |    |
| | +-------------> | Другие задачи процессора i486 | <--------------+ |    |
| +-----------------|    (Защищенный режим)         +------------------+    |
|  прерключение     +-------------------------------+    переключение       |
|    задачи                                                 задачи          |
+---------------------------------------------------------------------------+
    Рисунок 23-2. Вход и выход в виртуальный режим процессора 8086.

Рисунок 23-2 обобщает пути входа и выхода в программу процессора 8086. Вход в виртуальный режим процессора 8086 осуществляется при установленном флаге VM. Для входа в виртуальный режим существует два способа:

  1. При переключении задач на задачу процессора i486, из нового TSS загружается образ регистра EFLAGS. Новый TSS должен принадлежать процессору i486, но не TSS процессора 80286, поскольку TSS процессора 80286 не сохраняет старшее слово регистра EFLAGS, содержащее флаг VM. Если новое содержание регистра EFLAGS содержит установленный флаг VM, это означает, что новая задача выполняет команды процессора 8086; более того, пока загружаются регистры сегмента из TSS, процессор i486 образует базовые адреса по правилам процессора 8086.
  2. При возврате командой IRET из процедуры задачи центрального процессора i486 регистр EFLAGS загружается из стека. Установка флага VM показывает, что управление должно быть возвращено процедуре процессора 8086. CPL во время выполнения команды IRET должен быть равен 0, в противном случае процессор не изменяет значение флага VM.

Когда переключение задачи используется для входа в виртуальный режим процесора 8086, регистры сегмента загружаются из TSS. Но когда команда IRET используется для загрузки флага VM, регистры сегмента сохраняют значение, загруженное в защищенном режиме. В этом случае программное обеспечение должно перезагрузить в регистры содержимое селекторов сегмента соответствующих виртуальному режиму процессора 8086.

Процессор выходит из виртуального режима процессора 8086 при обработке прерывания или исключения. Это происходит в двух случаях:

  1. Прерывание или исключение вызывают переключение задачи. При переключении из задачи виртуального режима процессора 8086 на любую другую задачу происходит загрузка регистра EFLAGS из ТSS новой задачи.Если новый TSS - это TSS процесора i486, и новое содержимое регистра EFLAGS содержит очищенный флаг VM, или если новый TSS - это TSS процессора 80286, процессор очищает флаг VM в регистре EFLAGS, загружает регистры сегмента из нового TSS, используя формирование адресов по правилам центрального процессора i486, и начнет выполнять команды новой задачи в защищенном режиме центрального процессора i486.
  2. Если в результате прерывания или исключения вызывается процедура с нулевым уровнем привилегированности (наиболее привилегированная). Процессор сохраняет текущее состояние регистра EFLAGS в стеке, затем очищает флаг VM. Более того,обработчик прерываний или исключений запускается как родная программа защищенного режима центрального процессора i486. Если прерывание или исключение вызывает процедуру в согласованном сегменте или в сегменте с уровенем привилегий отличным от 0 (наиболее привилегерованный), процессор генерирует исключение общей защиты, где код ошибки - это селектор сегмента кода, вызов которого был осуществлен.

Системное программное обеспечение не изменяет непосредственно состояние флага VM, но взамен изменяется состояние образа регистра EFLAGS в стеке или в TSS. Монитор виртуального режима 8086 устанавливает флаг VM в образе EFLAGS в стеке или в TSS, когда создается первая виртуальная задача 8086. Обработчики исключений и прерываний проверяют флаг VM в стеке. Если прерванная процедура была запущена в виртуальном режиме процессора 8086, обработчику может понадобиться вызвать виртуальный монитор 8086.

23.3.1 Переходы по переключателям задач.

Переключение задачи на виртуальную задачу процессора 8086 или из нее может произойти в одном из трех случаев:

  1. Прерывание, вызывающее шлюз задач.
  2. Действие планировщика операционной системы центрального процессора i486.
  3. Выполнение команды IRET при установленном флаге NT.

В каждом из этих случаев процессор изменяет флаг VM в регистре EFLAGS согласно образу в новом TSS. Если новое ТSS соответствует процессору 80286, то старшее слово регистра EFLAGS размещается вне TSS; в этом случае процессор очищает флаг VM. Процессор изменяет флаг VM перед загрузкой регистров сегмента из их образов в новом TSS. Новая установка флага VM указывает интерпретировать ли процессору новые образы регистров сегмента как селекторы процессора 8086, 80286 или процессора i486.

23.3.2 Переходы через шлюзы ловушки и шлюзы прерываний.

Процессор i486 выходит из виртуального режима процессора 8086 в результате исключения или прерывания, которые вызывают шлюз ловушки или прерывания. Обработчик исключения или прерывания возвращает управление программе процессора 8086 выполняя команду IRET.

Поскольку эта команда была предназначена для использования процессором 8086, программа процессора 8086 в виртуальном режиме имеет таблицу прерываний, построенную по правилам процессора 8086, которая начинается с нулевого линейного адреса. Однако процессор i486 не использует непосредственно эту таблицу. Для всех прерываний или исключений, возникающих в виртуальном режиме процессра 8086, процессор вызывает обработчики через IDT. Элемент IDT для прерывания или исключения в виртуальном режиме процессора 8086 должен содержать следующее:

Прерывания и исключения, вызывающие шлюзы ловушки или прерываний процессора i486, используют нулевой уровень привилегированности. Для этого уровня содержимое регистров сегмента сохраняется в стеке. На Рисунке 23-3 приведен формат такого стека после прерывания или исключения возникшего, когда виртуальная задача процессора 8086 выполняется как программа процессора 8086.

+-----------------------------------------------------------------------+
|     БЕЗ КОДА ОШИБКИ                     С КОДОМ ОШИБКИ                |
|+--------------------+              +---------------------+            |
||  Неиспользуется    |<--- ESP из   | Монитор виртуального|<--- ESP из |
|+--------------------|     ТSS      +---------------------|     TSS    |
||        | старый GS |              |         | старый GS |            |
|+--------+-----------|              +---------+-----------|            |
||        | старый FS |              |         | старый FS |            |
|+--------+-----------|              +---------+-----------|            |
||        | старый DS |              |         | старый DS |            |
|+--------+-----------|              +---------+-----------|            |
||        | старый ES |              |         | старый ES |            |
|+--------+-----------|              +---------+-----------|            |
||        | старый SS |              |         | старый SS |            |
|+--------------------|              +---------------------|            |
|| старый  ESP        |              |  старый  ESP        |            |
|+--------------------|              +---------------------|            |
|| старый  EFLAGS     |              |  старый  EFLAGS     |            |
|+--------------------|              +---------------------|            |
||        | старый CS |              |         | старый CS |            |
|+--------------------|              +---------------------|            |
||    старый  EIP     |<--- новый    |     старый  EIP     |            |
|+--------------------|      ESP     +---------------------|            |
|                                    |    код ошибки       |<--- новый  |
|                                    +---------------------|      ESP   |
+-----------------------------------------------------------------------+
 Рисунок 23-3.  Стек нулевого уровня привилегий после прерывания в 
                виртуальном режиме процессора 8086.
После того, как процессор i486 сохранит регистры сегмента процессора 8086 в стеке согласно нулевому уровню привилегий, он обнулит регистры сегмента перед запуском процедуры обработки. Это позволит обработчику прерываний успешно сохранить и восстановить регистры DS, ES, FS и GS, как если бы они были селекторами процессора i486. Обработчики прерываний, которые могут вызываться как в контексте регулярной задачи, так и в контексте виртуальной задачи процессора 8086, могут использовать аналогичное согласование кодов для сохранения и восстановления регистров любой задачи. Обнуление регистров перед выполнением команды IRET не вызывает ловушки в обработчике прерываний. Процедуры прерываний, ожидающие значения в регистрах сегментов или возвращающие значения в них, должны использовать образы регистров, сохраненные в стеке нулевого уровня привелегированности. Обработчики прерываний, которым надо узнать, произошло ли прерывание в виртуальном режиме процессора 8086, могут запросить флаг VM из хранимого содержимого регистра EFLAGS.

Если флаг VM в хранимом содержимом регистра EFLAGS установлен, и прерывание или исключение должно обрабатываться виртуальным монитором процессора 8086, то обработчик прерываний передаст управление этому монитору. Виртуальный монитор процессора 8086 может:

Возврат прерывания или исключения в программу процессора 8086 включает следующие шаги:

  1. Использование вектора прерываний процессора 8086 для размещения заданной процедуры обработки.
  2. Сохранение состояния программы процессора 8086 в стеке третьего уровня прерываний (наименее привилегированный).
  3. Модификация указателя возврата на стеке нулевого уровня привилегий (наиболее привилегированный) так, чтобы он указывал на процедуру обработки прерываний на третьем уровне привилегий (наименее привилегированный).
  4. Выполнение команды IRET для передачи управления обработчику.
  5. После того, как команда IRET обработчика на третьем уровне привилегий снова вызовет виртуальный монитор, восстановить указатель возврата на нулевом уровне привилегий, чтобы он указывал на первоначальную процедуру обработки прерываний на третьем уровне привилегий.
  6. Выполнение команды IRET для передачи управления назад в прерванную процедуру.

23.4 Дополнительные чувствительные команды.

Когда процессор i486 работает в виртуальном режиме процессора 8086, команды PUSHF, POPF, INT n и IRET чувствительны к IOPL. Команды IN, INS, OUT, и OUTS, которые являются чувствительными к IOPL в защищенном режиме, в виртуальном режиме процессора 8086 к нему не чувствительны. Ниже дан полный список команд, являющихся чувствительными в виртуальнм режиме процессора 8086:

В виртуальном режиме 8086 CPL всегда равно 3; при IOPL меньшем 3, попытка использовать вышеперечисленные команды генерирует исключение общей защиты. Чувствительность этих команд к IOPL дает виртуальному монитору процессора 8086 возможность эмулировать средства, на которые они влияют.

23.4.1 Эмуляция вызовов операционной системы процессора 8086

Поскольку команда INT n чувствительна к IOPL, виртуальный монитор процессора 8086 может перехватывать вызовы операционной системы 8086. Множество операционных систем процессора 8086 вызывается путем помещения параметров в стек и последующего выполнения команды INT n. Если IOPL меньше 3, команды INT n прерхватываются виртуальным монитором процессора 8086. Таким образом виртуальный монитор процесора 8086 может эмулировать функции операционной системы процессора 8086 или передать управление назад операционной системе процессора 8086.

23.4.2 Эмулирование флага разблокирования прерывания

При выполнении процессором i486 программы или виртуальной задачи процессора 8086 команды PUSHF, POPF, и IRET чувствительны к IOPL. Это позволяет виртуальному монитору процессора 8086 защитить флаг разблокирования прерывания (IF). Другие команды, влияющие на флаг IF (такие как STI и CLI), чувствительны к IOPL как в программах процессора 8086, так и в программах процессора i486.

Многие программы процессора 8086, написанные не для многозадачных систем, устанавливают и очищают флаг IF для управления прерываниями. Это может вызвать затруднения в многозадачной среде. Если IOPL меньше 3, все команды изменяющие или проверяющие флаг IF генерируют исключения. Таким образом, виртуальный монитор процессора 8086 может управлять флагом IF так, что это будет совместимо со средой процессора i486 и скрыто от программ процессора 8086.

23.5 Ввод / вывод в виртуальном режиме.

Многие программы процессора 8086 написаны для однозадачных систем и содержат непосредственные обращения к портам ввода /вывода. Это порождает серьезные проблемы в многозадачной среде. Если более одной программы обратятся к одному и тому же порту, то они могут пересечься друг с другом. Многие многозадачные системы требуют от прикладных программ обращения к портам ввода /вывода через операционную систему. В результате упрощается централизованное управление.

Процессор i486 обеспечивает защиту ввода/вывода для организации ввода/вывода, совместимого со средой центрального процессора i486 и прозрачного для программ процессора 8086. Разработчики могут использовать следующие возможные подходы к защите ввода/ вывода:

Метод управления вводом/выводом зависит от того, отображаются ли порты ввода/вывода в пространство памяти или в пространство ввода/вывода.

23.5.1 Отображение ввода/вывода в пространство ввода/вывода

Адресное пространство ввода/вывода в виртуальном режиме процессора 8086 отличается от защищенного режима только тем, что нет проверки IOPL. Только битовая карта разрешения ввода /вывода проверяет, когда виртуальные задачи процессора 8086 обращаются к адресному пространству ввода/вывода.

Битовый массив разрешения ввода/вывода может использоваться для генерации исключений при попытках обращений к специфическим адресам ввода/вывода. Битовый массив разрешения ввода/вывода каждой виртуальной задачи процессора 8086 выбирает,какие адреса ввода/вывода генерируют исключения для этой задачи. Поскольку каждая задача может иметь различные битовые массивы разрешения ввода/вывода, адреса, генерирующие исключения, для разных задач могут быть различными. Смотри Главу 8 для более подробной информации о битовом массиве разрешения ввода/вывода.

23.5.2 Отображение ввода/вывода в пространство памяти

В системах, которые используют отображение ввода/вывода в пространство памяти, возможности постраничного разбиения в процессоре i486 позволяют генерировать исключения при попытках обращения к портам ввода/вывода. Виртуальный монитор процессора 8086 может использовать разбиение на страницы для управления вводом/выводом, отображенным в пространство памяти, следующим образом:

При некоторых условиях системная эмуляция пространства ввода /вывода может потребовать слишком частых вмешательств операционной системы. В таких случаях можно сгенерировать исключение только для первой попытки обращения к вводу/выводу. После этого системное программное обеспечение может определить, когда временно дать программе исключительное управление вводом/выводом, подключить защиту пространства ввода/вывода или позволить программе выполнятся на полной скорости.

23.5.3 Специальные буфферы ввода/вывода

Буфферы интеллектуальных контроллеров (например, буффер кадра битового массива) могут быть эмулированы с использованием страничного отображения. Линейное пространство для буффера может быть отображено на различные физические пространства для каждой виртуальной задачи процессора 8086. Виртуальный монитор может управлять размещением виртуальных буфферов, копируя виртуальные буфферы в реальные буфферы физического адресного пространства.

23.6 Отличия от центрального процессора 8086.

В основном, в виртуальном режиме процессора 8086 будут выполняться программы, написанные для процессоров 8086, 8088, 80186 и 80188. Ниже приведен список незначительных различий между программами, выполняемыми на процессоре 8086 и на процессоре i486 в виртуальном режиме процессора 8086.

  1. Подсчет числа тактов на выполнение команды.
    Процессор i486 требует для выполнения большинства команд меньше машинных тактов чем процессор 8086. Это может иметь негативное действие в случаях:
  2. Исключение ошибки деления указывает на команду DIV.
    Исключение ошибки деления на процессоре i486 всегда сохраняет значение CS:IP, указывающее на ошибочную команду. А на процессоре 8086 CS:IP указывает на следующую команду.
  3. Коды операций, неопределенные для процессора 8086.
    Коды операций, которые не определены для процессора 8086, генерируют исключение неопределенного кода операции или выполняют одну из новых команд, определенных для процессора i486.
  4. Значения, записываемые командой PUSH SP.
    По данной команде, процессор i486 помещает в стек другое значение, нежели процессор 8086. Процессор i486 заносит значение регистра SP перед его уменьшением, как части операции занесения; процессор 8086 заносит значение регистра SP после его уменьшения. Если занесенное значение важно, замените команду PUSH SP на последовательность из трех команд:
    PUSH BP MOV BP, SP XCHG BP, [BP]
    
    Эта программа функционирует на процессоре i486 аналогично команде PUSH SP процессора 8086.
  5. Сдвиг или циклический сдвиг более чем на 31 бит.
    Процессор i486 маскирует в счетчиках всех линейных и циклических сдвигов все биты, кроме младших пяти. Эта операция MOD 32 ограничивает величину сдвигов 31 битом и, следовательно, ограничивает задержку отклика на прерывание, ожидающее окончания выполнения команды.
  6. Префиксы удлинения.
    В процессоре i486 установлено ограничение в 15 байт на длину команды. Единственный путь преодоления этого ограничения - использование перед командой префиксов удлинения. Если ограничение нарушено, генерируется исключение общей защиты. На процессоре 8086 нет ограничений на длину команд.
  7. Операнд с относительным адресом 0 или превысившим 65.535.
    В процессоре 8086 попытка обращения к операнду в памяти с пересечением относительного адреса 65.535 ( например, пересылка слова командой MOV по относительному адресу 65.535) или относительного адреса 0 (например, занесение в стек слова командой PUSH, когда SP = 1) приводит к циклическому возврату относительного адреса по модулю 65.536. Процессор i486 в этих случаях генерирует исключения: исключение общей защиты, если сегмент является сегментом данных (т.е. для адресации сегмента будут использованы регистры CS, DS, ES, FS или GS ) или исключение стека, если сегмент является сегментом стека (т.е. если будет использован регистр SS).
  8. Переход через относительный адрес 65.535 при последовательном выполнении.
    В процессоре 8086, если произошел переход через относительный адрес 65.535 при последовательном выполнении команд, произойдет выборка байта следующей команды по относительному адресу 0 того же сегмента. Процессор i486 в этом случае генерирует исключение общей защиты.
  9. Ограничения LOCK на определенных командах.
    Префикс LOCK и соответствующий ему сигнал шины следует использовать только для предотвращения прерываний операций пересылки данных другими хозяевами шины. Префикс LOCK можно использовать только с нижеперечисленными командами процессора i486, когда они модифицируют память. Исключение неопределенного кода операции будет результатом использования префикса LOCK перед любыми другими командами или с командами, перечисляемыми ниже, когда они не выполняют операцию записи, изменяющую память.
  10. Пошаговые программы обработки внешних прерываний.
    Приоритетность пошаговых исключений в процессоре i486 отличается от приоритетности исключений в процессоре 8086. Внесенное изменение предупреждает обработку внешнего прерывания пошаговым образом в случае, когда прерывание возникло в пошаговой программе. В процессоре i486 пошаговое исключение имеет приоритет выше, чем любое внешнее прерывание. С помощью команды INT или исключения можно заставить работать процессор i486 пошагово по программе обработки прерываний.
  11. Исключения команды IDIV для частных 80H или 8000H.
    Процессор i486 генерирует максимальное отрицательное число в качестве частного для команды IDIV. Процессор 8086 вместо этого генерирует исключение ошибка деления.
  12. Флаги в стеке.
    Установка сохраненых флагов командой PUSHF, прерываниями и исключениями отличается от их установки на процессоре 8086 в позициях с 12 по 15 бит. Процессор 8086 записывает в них 1. В процессоре i486 в режиме реальных адресов бит 15 это всегда 0, а в битах от 14 до 12 сохраняются предыдущие значения.
  13. Обработка прерывания NMI.
    После получения процессором i486 информации о прерывании NMI, прерывание NMI маскируется на время выполнения команды IRET.
  14. Ошибки вычислений с плавающей точкой вызывают исключение ошибки вычислений с плавающей точкой.
    В процессоре i486 исключения вычислений с плавающей точкой вызывают программу обработки исключения ошибки вычислений с плавающей точкой. Если на процессоре 8086 использовалось другое исключение для прерывания сопроцессора 8087, то оба вектора исключения должны вызывать программу обработчика исключения ошибки вычислений с плавающей точкой. Процессор i486 выдает сигналы, которые, с добавлением внешней логики, поддерживают определенные пользователем сообщения об ошибках для эмуляции механизма прерываний, используемого в большинстве персональных компьютеров.
  15. Программы обработки числовых исключений могут допускать префиксы.
    В процессоре i486 значение регистров CS и IP, сохраненное для обработки исключений вычислений с плавающей точкой, указывает на любые префиксы перед командой ESC. В процессоре 8086 сохраненное значение CS:IP указывает на саму команду ESC.
  16. Модуль операций с плавающей точкой не использует контроллер прерываний.
    Сигнал ошибки вычислений с плавающей точкой процессора i486 не проходит через контроллер прерываний ( сигнал INT сопроцессора 8087 использует контроллер прерываний). Может потребоваться удаление некоторых команд в программе обработки исключения ошибка вычислений с плавающей точкой, если используется контроллер прерываний. Процессор i486 выдает сигналы, которые, с добавлением внешней логики, поддерживают определенные пользователем сообщения об ошибках для эмуляции механизма прерываний, используемого в большинстве персональных компьютеров.
  17. Отклик на запрос передачи данных по шине.
    В отличие от процессоров 8086 и 80286 и аналогично процессорам 386 процессор i486 отвечает на запрос управления шиной от других возможных ее владельцев, таких как контроллеры DMA, между пересылками частей невыровненного операнда, например двух слов, образующих двойное слово.
  18. CPL равно 3 в виртуальном режиме процессора 8086.
    Процессор 8086 не поддерживал защиту, так как на нем не было CPL. Виртуальный режим процессора 8086 использует CPL равное 3, что исключает выполнение привилегированных команд таких как:

    Эти команды могут выполняться, пока процессор находится в режиме реальных адресов после инициализации при перезапуске. Они позволяют загружать структуры системных данных, такие как таблицы дескрипторов перед входом в защищенный режим. Вход в виртуальный режим происходит из защищенного режима, поэтому он не нуждается в этих командах.

  19. Денормализованное число обрабатывается по-другому.
    Смотрите Раздел 16.2.4 для более детального ознакомления.

23.7 Отличия от процессора 80286 в режиме реальных адресов.

Отличия между виртуальным режимом процессора 8086 и режимом реальных адресов процессора 80286 относятся к интерфейсу между прикладными программани и операционной системой. Прикладные программы запускаются на третьем уровне привилегированности (пользовательский режим) вследствии чего, все попытки использования привилегированных команд и возможностей архитектуры генерируют вызовы монитора виртуальной машины. Монитор проверяет эти вызовы и эмулирует их.

23.7.1 Уровень привилегированности

Программы, запущенные в виртуальном режиме процессора 8086, имеют третий уровень привилегированностий (пользовательский режим), что исключает выполнение привилегированных команд, таких как:

Вход в виртуальный режим происходит из защищенного режима, поэтому он не нуждается в этих командах. Эти команды выполняются в режиме реальных адресов.

23.7.2 Блокирование шины

В процессоре 80286 функция блокирования шины реализована иначе, чем в процессорах 386 DX и i486. Этот факт может быть, а может не быть явным для программ процессора 8086, в зависимости от того, как виртуальный монитор процессора 8086 обрабатывает префикс LOCK. Команды с префиксом LOCK чувствительны к IOPL; разработчики программного обеспечения могут эмулировать эти функции. Однако, поскольку программы процессора 8086 позволяют непосредственно выполнять LOCK, то программы, использующие специфические для процессора 8086 формы блокирования памяти, на процессоре i486 могут выполнятся неправильно.

Префикс LOCK и соответствующий ему сигнал шины следует использовать только для предотвращения прерываний операций пересылки данных другими хозяевами шины. Префикс LOCK можно использовать только с нижеперечисленными командами процессора i486, когда они модифицируют память. Исключение неопределенного кода операции может быть результатом использования префикса LOCK перед любыми другими командами или с командами, перечисляемыми ниже, когда они не выполняют операцию записи, изменяющую память, (т.е. операндом назначения является регистр ).

Команды блокирования гарантируют блокирование только области памяти, определенной в операнде назначения, но может блокироваться и большая область памяти. Например, типичные конфигурации процессоров 8086 и 80286 блокируют все физическое пространство памяти.

В отличие от процессоров 8086 и 80286 и аналогично процессорам 386 процессор i486 отвечает на запрос управления шиной от других возможных ее владельцев, таких как контроллеры DMA, между пересылками частей невыровненного операнда, например двух слов, образующих двойное слово.

23.8 Отличия от процессоров 386 (TM) DX и SX.

Режимы реальных адресов и виртуальный режим процессора 8086 реализованы на процессоре i486 аналогично процессорам 386. Для максимальной производительности, программы, перенесенные на процессор i486, должны быть запущены с разрешением кеширования.


Глава 22 Содержание Глоссарий Глава 24