Все, что до сих пор говорилось об адресации, относится к генерации  так называемого смещения (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-битовую границу.  Эти границы называются также границами параграфов.