3.9 Физическая адресация

Все, что до сих пор говорилось об адресации, относится к генерации так называемого смещения (offset) адреса. Смещение имеет 16-битовое значение. 8088 сегментирует память таким образом, что можно адресоваться к памяти большей чем 64K. В этом пункте булет показан способ сегментации 8088. Поскольку размер слова в микропроцессоре 8088 равен 16 бит, для него естественно генерировать адреса в 16бит длиной. Это делает доступными дляпрямой адрессации 2**16 элементов или 65 535 байт памяти. Однако для некоторых программ 64K ячеек памяти недостаточно. Поэтому фирма INTEL сконструировала 8088 для адресации 2**20 байт или одного мегабайта памяти. Для получения 20-битовой адресации требуется еще четыре бита к имеющимся 16-ти. Добавочные 4 бита адресной информации берутся из сегментных регистров. Сегментные регистры сами имеют размер 16 бит. 8088 комбинирует 16-битовый адрес смещения и 16-битовый регистр сегмента как показано на Фиг.3.5. Процессор дополняет сегментный регистр 4-мя нулевыми битами, что составляет вместе полное 20-битовое значение. К расширенному значению сегмента процессор добавляет адрес смещения, определяемый через вычисление адреса. 20-битовый результат является указателем на исполнительный адрес.

Сегмент * 16 + Смещение = 20-битовый адрес

Фиг.3.5 Вычисление адреса с сегментом и смещением

Каждая обращающаяся к памяти команда может сформировать только 16-битовый адрес операнда. В действительности процессор применяет этот адрес внутри определенного сегмента. Фиг. 3.6 иллюстриирует такой способ применения сегментации.

Сегментсмещение
xxxx xxxx 00000000
 ....
 FFFF
yyyy yyyy 00000000
 ....
 FFFF

     Фиг.3.6 Сегментация.

Начальный адрес сегмента всегда имеет нули в младших четырех битах. Адрес с этим свойством имеет каждая шестнадцатая ячейка памяти. Конструируя расположение данных в своей программе помните, что сегмент всегда должен приходиться на такую 16-битовую границу. Эти границы называются также границами параграфов.