Предназначение сегментов

    Каждый из  сегментных регистров имеет свое,  отмеченное выше назна-

    чение. В  некоторых случаях, однако,  более удобна связь  с данными

    вне  сегмента  данных,  например,  с  небольшой  областью  данных в

    программе. В большинстве случаев программа работает с данными в той

    области,  на  которую  указывает  регистр  DS,  но иногда программе

    требуется  ссылка на  локальную переменную,  находящуюся в    кодовом

    сегменте  программы.  Чтобы   осуществить  эту  ссылку,  приходится

    изменять обычное использование  сегментов. Фиг.3.8 показывает такую

    органзацию программы.

 

                ГДДДДДДДДДДДДДДДДДДДЕДДДДДД CS

                і Программа и і

                і             і

                і  локальные данные і

                і             ГДДДДДД CS:LOCAL_VALUE

                ГДДДДДДДДДДДДДДДДДДДґ

                і             і

                і             і

                і             і

                ЕДДДДДДДДДДДДДДДДДДДЕДДДДДД DS

                і Основная   і

                і             і

                і область даных     і

                і             і

                ГДДДДДДДДДДДДДДДДДДДґ

                і             і

 

       Фиг. 3.8 Переназначение CS на локальные данные.

 

      Вместо      изменения значения  регистра DS,  чтобы он  указывал на

    программный сегмент, команда изменяет  ссылку на данные, показывая,

    что переменная расположена в сегменте кодов (Code Segment).

 

      INC   CS:LOCAL_VARIABLE

 

    Это  делается с  помощью префикса  "CS:". В  машинном языке команда

    переопределения  сегмента выглядит    как однобайтовый  префикс перед

    обычной командой машинного языыка. 8088 понимает этот префикс пере-

    назначения    сегмента и  изменяет обычный  способ вычисления адреса.

    Вместо регистра DS процессор  использует для вычисления физического

    адреса  данных  регистр  CS.   Одного  префикса  в      команде  всегда

    достаточно, так  как 8088 может адресоваться  в ней не более  чем к

    одной ячейке памяти.

      Для нормального  обращения к данным  команда может использовать

    любой из  четырех сегментных регистров. Регистр  DS используется по

    умолчанию,    то есть  когда в  команде не  указан другой  сегментный

    регистр,  то  используется      DS.  Помните,  что  при использовании в

    адресных вычислениях регистра BP  сегментом по умолчанию становится

    стековый сегмент.  Команда может определить и  любой из трех других

    сегментных    регистров, указав  его в  адресном выражении. Некоторые

    команды, правда,  не могут пользоваться  переназначением сегментов.

    Это - команды   обработки строк.      Строковая  команда  определяет

    использование  регистров  неявным  образом,  и  оно  не  может быть

    изменено. В главе 4 мы обсудим строковые команды и их специфическое

    пользование сегментами.