Рис. 2.7. Модели памяти процессоров Intel
Рассмотрим порядок формирования физического адреса в реальном и защи-
щенном режимах. Уточним терминологию. Под физическим адресом понимается
адрес памяти, выдаваемый на шину адреса процессора. Другое название этого ад-
реса — линейный адрес. Подобная двойственность в названии обусловлена нали-
чием страничной модели организации оперативной памяти. Эти названия явля-
ются синонимами только при отключении страничного преобразования адреса
52 Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel
(в реальном режиме страничная адресация всегда отключена). Страничная модель,
как мы отметили ранее, является надстройкой над сегментированной моделью.
В страничной модели линейный и физический адреса имеют разные значения. Да-
лее мы будем обсуждать схему, на которой показан порядок формирования адреса
в реальном режиме работы процессора. Обратите внимание на наличие в этой схе-
ме устройства страничного преобразования адреса, предназначенного для того, что-
бы совместить две принципиально разные модели организации оперативной па-
мяти и выдать на шину адреса истинное значение физического адреса памяти.
Формирование физического адреса в реальном режиме
Далее перечислены характеристики механизма адресации физической памяти
в реальном режиме.
Диапазон изменения физического адреса — от 0 до 1 Мбайт. Эта величина опре-
деляется тем, что шина адреса i8086 имела 20 линий.
Максимальный размер
64 Кбайт. Это объясняется 16-разрядной
архитектурой
Нетрудно подсчитать, что максимальное значение, кото-
рое могут содержать 16-разрядные регистры, составляет
- 1, что примени-
тельно к памяти и определяет величину 64 Кбайт.
Для обращения к конкретному физическому адресу оперативной памяти необ-
ходимо определить адрес начала сегмента (сегментную составляющую) и сме-
щение внутри сегмента.
Понятие адреса начала сегмента ввиду принципиальной важности требует до-
полнительного пояснения. Исходя из разрядности сегментных регистров, можно
утверждать, что сегментная составляющая адреса (или база сегмента) представ-
ляет собой всего лишь 16-разрядное значение, помещенное в один из сегментных
регистров. Максимальное значение, которое при этом получается, соответствует
- 1. Если так рассуждать, то получается, что адрес начала сегмента может быть
только в диапазоне 0-64 Кбайт от начала оперативной памяти. Возникает вопрос,
как адресовать остальную часть оперативной памяти вплоть до 1 Мбайт с учетом
того, что размер самого сегмента не превышает 64 Кбайт. Дело в том, что в сегмент-
ном регистре содержатся только старшие
битов физического адреса начала сег-
мента. Недостающие младшие четыре бита 20-разрядного адреса получаются сдви-
гом значения в сегментном регистре влево на 4 разряда. Эта
сдвига
выполняется аппаратно и для программного обеспечения абсолютно прозрачна.
Получившееся 20-разрядное значение и является настоящим физическим адре-
сом, соответствующим началу сегмента. Что касается второго компонента
ния), участвующего в образовании физического адреса некоторого объекта в па-
мяти, то он представляет собой 16-разрядное значение. Это значение может
содержаться явно в команде либо косвенно в одном из регистров общего назначе-
ния. В процессоре эти две составляющие складываются на аппаратном
в результате получается физический адрес памяти размерностью 20 битов. Дан-
ный механизм образования физического адреса позволяет сделать программное
обеспечение перемещаемым, то есть не зависящим от конкретных адресов загруз-
ки его в оперативной памяти (рис. 2.8).
Архитектура
53
АЛУ
15
Смещение
из команды
Эффективный адрес
адрес
15
Базовый регистр
Ьх
или Ьр
15
Индексный регистр
si
или di
Оперативная
память
Сегментные
регистры:
15
ds
es
fs
Физический
адрес
Шина
адреса
Do'stlaringiz bilan baham: |