Защищенный режим процессоров Intel


Адресация памяти в реальном режиме - часть 2


Логический адрес принято записывать в форме <сегмент:смещение>.

Например, пусть у нас есть логический адрес 1234h:0123h. Сегментная компонента равна 1234h, компонента смещения - 0123h. Вычислим физический адрес, соответствующий нашему логическому адресу:

  • расширяем до 20 бит сегментную компоненту, дописывая справа 4 нулевых бита, получаем число 12340h;
  • расширяем до 20 бит компоненту смещения, дописывая слева 4 нулевых бита, получаем число 00123h;
  • для получения физического адреса складываем полученные числа: 12340h + 00123h = 12453h.

Очевидно, что одному физическому адресу может соответствовать несколько логических. Например, физическому адресу 12453h соответствует логический адрес 1245h:0003h.

Фактически в схеме адресации памяти реального режима вся память как бы разбивается на сегменты. Физический адрес начала сегмента (базовый адрес сегмента) равен расширенной до 20 бит сегментной компоненте адреса (расширение выполняется дописыванием справа 4 нулевых бит).

Сегменты могут начинаться не с любого физического адреса, а только с такого, который кратен 16 байтам. Поэтому сегмент может начинаться только с границы параграфа.

Компонента смещения при такой схеме адресации является смещением внутри сегмента памяти. А сам сегмент памяти задаётся сегментной компонентой.

Рис.3 иллюстрирует сказанное выше. На этом рисунке показано соответствие логического адреса 0002h:0028h физическому адресу 00048h.

Рис. 3. Соответствие логического и физического адресов.

Логический адрес должен находиться в следующих пределах:

0000h:0000h <= [логический адрес] <= FFFFh:000Fh

Здесь есть одна тонкость. Логический адрес FFFFh:000Fh соответствует максимально возможному физическому адресу FFFFFh. Но используя 16-разрядные регистры процессора вы можете задать и большее значение для логического адреса, например, FFFFh:0010h. Что произойдёт в этом случае?

Если в компьютере установлены процессоры i8086 или i8088, произойдёт переполнение адреса, которое будет проигнорировано процессором.


- Начало -  - Назад -  - Вперед -