Лекции по Вычислительным машинам, системам и сетям   

3. Тридцатидвухразрядные процессоры фирмы Intel

3.2. Реальный режим

МП автоматически переходит в этот режим при приходе сигнала RESET (сброс). В реальный режим можно попасть и из защищенного режима, если установить в ноль бит PE в регистре cr0 (рис. 3.6).

 

31                                                             1

0

    PE

cr0

 

Рис. 3.6

Сбросить этот бит можно командой mov cr0 , r32 ,  где r32 ‑ любой 32-разрядный регистр МП. Выполнить такую команду в защищенном режиме можно только находясь на уровне привилегий 0. Если сбросить этот бит «в лоб», то перейдем в реальный режим, но где при этом окажемся ‑ неизвестно (скорее всего «повесим» систему). Поэтому перед переключением из защищенного режима в реальный требуется большая подготовительная работа со стороны системного программиста, с тем чтобы обеспечить реальную точку входа в реальный режим.

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

МП 8086 при обращении внутри текущего сегмента считает Аф по следующей схеме. Сначала он считает Аэф. Затем он берет содержимое соответствующего сегментного регистра и сдвигает его на 4 разряда влево (умножает на 16), получая начальный адрес сегмента. К этому начальному адресу МП прибавляет Аэф и получает Аф.

32-разрядный МП в реальном режиме действует  несколько иначе. Отличие заключается в том, что начальный адрес сегмента рассчитывается здесь не при каждом обращении к данному сегменту, а всего один раз, при загрузке в сегментный регистр новой информации. То есть, когда содержимое какого-либо сегментного регистра меняется, МП умножает загружаемую в этот регистр информацию на 16 и полученный начальный адрес сегмента загружает в теневую часть сегментного регистра.

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

Так же, как и МП 8086, 32разрядный МП в реальном режиме адресует 1Мбайт оперативной памяти (младший мегабайт 4гигабайтного пространства защищенного режима). Таблица прерываний в реальном режиме (так же, как в МП 8086) располагается в младшем килобайте ОП. Тут надо отметить, что имеется возможность (в отличие от МП 8086) переместить эту таблицу в другое место памяти, но на практике эта возможность не используется.

Существует еще ряд небольших отличий между 32-разрядным МП в реальном режиме и МП 8086. Рассмотрим эти отличия.

1. Система команд 32-разрядного МП значительно шире, и большинство этих команд можно использовать в реальном режиме.

2. Добавлено два новых сегментных регистра fs и gs. К ним можно обращаться с помощью префиксов замены сегментов.

3. Внутренние регистры МП 32-разрядные. Их можно использовать в реальном режиме. То есть допустима, например, команда

mov eax , ebx.

4. 32-разрядные регистры можно использовать и для формирования Аэф (например, mov al , [esi+2] ). Однако при этом если сформированный Аэф окажется больше 0000ffffh, будет прерывание. То есть в отличие от МП 8086 здесь отсутствует кольцевая организация сегментов. Вычислив Аэф, МП проверяет (как в реальном, так и в защищенном режимах), не выводит ли этот адрес за заданные границы сегмента. Заданный размер сегмента МП берет из теневой части соответствующего сегментного регистра. При приходе сигнала RESET МП, переходя в реальный режим, автоматически загружает в теневые части всех своих сегментных регистров в качестве размера сегмента величину  ffffh. Именно поэтому, если Аэф превышает эту величину, то происходит прерывание. Такая организация приводит к тому, что у пользователя (вернее, у системного программиста) появляется возможность заставить МП в реальном режиме адресовать больше 1Мбайта оперативной памяти (вплоть до 4 Гбайт). Для этого надо переключиться в защищенный режим, обеспечить загрузку в теневые части нужных сегментных регистров дескрипторов, в которых задан соответствующий размер сегмента (например, 10 Мбайт) и вернуться обратно в реальный режим. После этого через данные сегментные регистры можно будет обращаться к памяти объемом 10 Мбайт (только не надо менять содержимое этих сегментных регистров).

5. При формировании Аф может возникнуть перенос из старшего разряда (из разряда А19 в разряд А20). В МП 8086 этот перенос попросту отбрасывается, в результате получается кольцевая организация памяти. В 32-разрядном МП этот перенос не отбрасывается, а выставляется на адресную линию А20. Таким образом, в отличие от МП 8086, 32-разрядный МП в реальном режиме адресует не 1 Мбайт ( 00000000h ‑ 000fffffh) памяти, а 1 Мбайт плюс еще 64 Кбайта (00000000h ‑ 0010ffefh). Здесь и в тех, и в других скобках приводится диапазон адресуемой памяти. Эти дополнительные 64 Кбайта памяти называют верхней памятью и активно используют при работе под DOS, загружая в нее различные драйверы. В IBM-подобных ПЭВМ предусмотрена возможность реализации кольцевой организации памяти в реальном режиме. Для этого надо замаскировать адресную линию А20. Это можно сделать следующими четырьмя командами:

mov al , 0d1h                       

out 64h , al                           mov al , 0ddh                        out 60h , al

;команда управления линией А20

;передается в статус порт 64h

;закрыть линию А20

Для того чтобы открыть эту адресную линию, используются такие же четыре команды, только в третьей команде вместо 0ddh надо написать 0dfh.



*****

© 2009-2017 Банк лекций siblec.ru
Лекции для преподавателей и студентов. Формальные, технические, естественные, общественные, гуманитарные, и другие науки.