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

Для формирования адреса в реальном режиме используется два компонента – сегмент адресаисмещение адреса, а сам адрес принято записывать парой этих значений, разделенных двоеточием:

segment : offset,

например, $0051:06А5 (здесь символ $ обозначает, чтоследующая за ним последовательность символов, кроме двоеточия, является шестнадцатеричным кодом). Значение «segment» хранится в специальном 16-битном сегментном регистре микропроцессора, а смещение «offset» — помещается в один из 16-битных регистров общего назначения (РОН). Физический адрес формируется на аппаратном уровне следующим образом:

1) значение 16-битового сегмента адреса сдвигается влево на 4 двоичных разряда (бита) с заполнением разрядов справа нулями; в результате получается 20-битовое значение;

2) к полученному 20-битовому значению прибавляется смещение, а значение суммы передается на шину адреса в качестве физического адреса.

Получаемое значение физического адреса является 20-разрядным. Следовательно, с его помощью можно адресовать (т. е. получить доступ) 1 Мбайт (220 байт) оперативной памяти. Здесь можно отметить несоответствие размеров шины адреса современных микропроцессоров (32 или 36 бит) и 20-битного значения физического адреса реального режима. Пока микропроцессор находится в реальном режиме, старшие 12 (или 16) линий шины адреса попросту недоступны.

Как известно, сдвиг двоичного числа на 4 битов влево (или, что то же самое, сдвиг шестнадцатеричного кода на одну шестнадцатеричную позицию влево) эквивалентен умножению этого числа на 24 = 16. Следовательно, физический адрес А определяется формулой

А = 16 * segment + offset.

Величину 16*segment часто называют базой сегмента или просто базой, а схему формирования адреса обозначают термином «база-смещение». Эта схема иллюстрируется рисунком 2.1.

 

 

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