Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать

2.7.6. Функционирование процессора в реальном режиме

В реальном режиме процессор выполняет программы, написанные для микропроцессоров 8086 (или 8088) и для реального режима микропроцессоров 80286, 80386. С точки зрения программиста, процессор Р6 в реальном режиме представляет собой более быстрый процессор 8086 с расширенным набором команд и регистров. При работе в реальном режиме все процедуры выполняются с наиболее высоким уровнем привилегий (CPL = 0) в отличие от процедур в режиме V86, для которых устанавливаются низший уровень привилегий (CPL = 3).

В реальном режиме процессор выполняет весь набор команд, за исключением команд управления ARPL, LAR, LSL, STR, LTR, SLOT, LLDT, VERR, VERW. При поступлении этих команд, которые оперируют с дескрипторами сегментов, реализуется исключение типа #UD («неправильный код операции»).

При работе в данном режиме процессор не обращается для формирования адресов к дескрипторам сегментов, а использует для образования базового адреса сегмента значение селектора, расположенного в соответствующем регистре CS, SS, DS, ES, FS или GS. Формирование физического адреса в реальном режиме иллюстрирует рис. 2.55.

Базовый адрес сегмента имеет 20 разрядов и образуется путем сдвига 16-разрядного селектора (содержимого регистра CS, SS, DS, ES, FS или GS) влево на 4 разряда. Размеры сегментов фиксированы и составляют 64 Кбайт. Допускается взаимное наложение сегмен­тов. Линейный адрес, образованный в результате суммирования базового адреса и селектора, служит физическим адресом для выбора байта, так как в реальном режиме страничная организация не реализуется. Если полученный физический адрес выходит за границу адресуемой в реальном режиме памяти (1 Мбайт), то выполняется исключение типа #GP.

По умолчанию в реальном режиме используются 16-разрядные операнды и адреса. При использовании префиксов можно обрабатывать 32-разрядные операнды и формировать 32-разрядные адреса. Однако, если эти адреса выходят за пределы границ сегмента (64 Кбайт) или адресуемой памяти (1 Мбайт), то реализуется исключение типа #GP.

При осуществлении ряда типов исключений в реальном режиме имеются отличия от за­щищенного режима. Исключения типа #TS, #NP, #PF, #AC не реализуются в реальном режиме. Исключение #GP в реальном режиме осуществляется при выходе за границу сегмента.

Отметим, что в памяти системы должны быть зарезервированы две области, необхо­димые для обеспечения реального режима. Первые 1024 ячейки памяти (адреса от OOOOh до OSFFh) резервируются в реальном режиме для размещения векторов прерываний. Пос­ледние 16 ячеек памяти (адреса от FFFFFFFOh до FFFFFFFFh) резервируются для программы инициализации системы. После включения процессора программа инициали­зации автоматически вводит его в реальный режим. Аналогичная процедура выполняется и после поступления сигнала сброса. Перейти из реального в защищенный режим можно с помощью команд MOV или LMSW, загружающих в регистр CRO слово состояния с уста­новленным битом защиты РЕ = 1. Перед этим в реальном режиме должна быть проведена загрузка необходимых регистров (GDTR, LDTR, и др.) и таблиц (GDI, LDT и др.), использу­емых в защищенном режиме.

Обратное переключение из защищенного в реальный режим выполняется только ко­мандой MOV, загружающей в регистр CRO слово, которое имеет значение бита РЕ = О (команда LMSW не может устанавливать значение РЕ = 0). Предварительно необходимо провести некоторые подготовительные процедуры, обеспечивающие сохранение правильного функционирования процессора при переходе к реальному режиму: отклю­чить механизм страничной трансляции, перейдя к использованию линейных адресов, равных физическим; установить для всех сегментов размер 64 Кбайт и ряд других. После выполнения команды MOV, устанавливающей в регистре CRO бит РЕ = 0, следует перейти к программе, выполняемой в реальном режиме, с помощью команды межсегментного перехода JMP, которая очищает очередь команд. Затем в сегментные регистры загружа­ется новое содержимое, обеспечивающее формирование физических адресов в реальном режиме (см. рис. 2.55).