Нереальный режим

редактировать

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

Содержание

  • 1 Обзор
  • 2 Включение нереального режима
  • 3 Варианты нереального режима
  • 4 См. Также
  • 5 Ссылки
  • 6 Дополнительная литература

Обзор

Из соображений эффективности 80286 и все последующие процессоры x86 используют базовый адрес, размер и другие атрибуты, хранящиеся в их внутреннем кэше дескриптора сегмента при вычислении эффективных адресов памяти, даже в реальном режиме.. Следовательно, модификация внутреннего дескриптора сегмента позволяет изменять некоторые свойства сегментов в реальном режиме, например размер адресуемой памяти. Этот метод стал широко использоваться и поддерживается всеми процессорами Intel.

HIMEM.SYS использует эту функцию для адресации расширенной памяти, если DOS не переключен на работу в виртуальном режиме 8086 что несовместимо с нереальным режимом.

Одна из очень немногих игр - если не та Только один - в котором использовался нереальный режим, был Ultima VII.

Нереальный режим все еще используется кодом BIOS, поскольку это начальный режим современных процессоров Intel. Кроме того, режим управления системой (SMM) в процессорах Intel 386SL и более поздних версиях переводит процессор в нереальный режим.

Программа в нереальном режиме может вызывать 16-битный код, запрограммированный для реального режима ( BIOS, ядро ​​DOS и драйверы) без переключения . Это делает драйвер нереального режима проще, чем драйвер DPMI. Однако нереальный режим несовместим с операционными системами с защищенным режимом, такими как Windows 3.x / 9x / NT и OS / 2.

Включение нереального режима

Чтобы перевести микропроцессор 80386 или выше в нереальный режим, программа должна сначала войти в защищенный режим, найти или создать плоский дескриптор в GDT или LDT, загрузите некоторые из регистров сегмента данных с помощью соответствующего «селектора» защищенного режима, а затем переключитесь обратно в реальный режим. После возврата в реальный режим процессор продолжит использовать кэшированные дескрипторы, установленные в защищенном режиме, что позволит получить доступ к 4 ГиБ расширенной памяти из реального режима.

Микропроцессор 80286 может быть переводить в нереальный режим только с помощью недокументированной инструкции LOADALL, чтобы изменить базовые регистры скрытых сегментов, чтобы они указывали на исходную или целевую ячейку памяти выше 1 МиБ.

Начиная с 80386, реальный программы режима могут использовать 32-битные регистры с префиксом переопределения размера адреса. Это позволяет программам использовать адрес типа DS: [EBX]. В нормальном реальном режиме ошибка возникает, если EBX превышает 0xFFFF. В нереальном режиме доступ разрешен.

Варианты нереального режима

Как описано выше, нереальный режим обычно включает использование одного или нескольких селекторов данных для более эффективной адресации данных в памяти. Это было обычной практикой и часто упоминалось как «плоский реальный режим» или «большой реальный режим». «Большой реальный режим» - это вариант, в котором сегмент кода также расширен до 4 ГиБ.

Особый случай нереального режима достигается, кроме того, загрузкой селектора кода (CS) из дескриптора, имеющего 32-битный атрибут (бит "D") установлен в единицу. Этот редко используемый вариант дает некоторые преимущества, главным образом потому, что он позволяет избежать префиксов замены размера операнда, которые обычно требуются при использовании 32-битной адресации в 16-битном сегменте кода, но его сложнее настроить. Поскольку прерывания реального режима не сохраняют автоматически старшие шестнадцать битов расширенного указателя инструкций (EIP), код должен либо соответствовать младшей части сегмента кода, либо иметь возможность каким-либо образом сохранять и восстанавливать старшие биты EIP. Кроме того, если должны быть вызваны функции прерывания BIOS или DOS, использующие 16-битный код, для переключения бита «D» вперед и назад требуется переключение режима. Некоторые эмуляторы не поддерживают эмуляцию программ, работающих в этом варианте нереального режима.

См. Также

Ссылки

Дополнительная литература

Последняя правка сделана 2021-06-20 02:26:49
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте