Все, что до сих пор говорилось об адресации, относится к генерации
так называемого смещения (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-битовый ре-
зультат является указателем на исполнительный адрес.
ЪДДДДДДДДДї
і Сегмент і 0000
АДДДДДДДДДЩ
ЪДДДДДДДДДДДї
+ і Смещение і
АДДДДДДДДДДДЩ
----------------
ЪДДДДДДДДДДДДДДДДї
і20-битовый адресі
АДДДДДДДДДДДДДДДДЩ
Фиг.3.5 Вычисление адреса с сегментом и смещением
Каждая обращающаяся к памяти команда может сформировать только
16-битовый адрес операнда. В действительности процессор применяет
этот адрес внутри определенного сегмента. Фиг. 3.6 иллюстриирует
такой способ применения сегментации.
ЕДДДДДДДДДДДДДДДДДДґ ДДДДДВДДДДСегментный регистр
іі і і
іі і смещение
іі і і
Сегмент іГДДДДДДДДДДДДДДДДДДЕ ДДДДДБДДДДАдресуемая область
64К ГДДДДДДДДДДДДДДДДДДґ
іі і
іі і
іі і
ЕДДДДДДДДДДДДДДДДДДґ
і і
Фиг.3.6 Сегментация.
Начальный адрес сегмента всегда имеет нули в младших четырех
битах. Адрес с этим свойством имеет каждая шестнадцатая ячейка
памяти. Конструируя расположение данных в своей программе помните,
что сегмент всегда должен приходиться на такую 16-битовую границу.
Эти границы называются также границами параграфов.