Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
90
Добавлен:
23.02.2015
Размер:
6.18 Mб
Скачать

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

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

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

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

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

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

Рис. 3.17. Формирование физического адреса в реальном режиме

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

Соседние файлы в папке УчПосбЧ-3