Сегментные регистры

    INTEL 8088    имеет четыре сегментных  регистра: CS,DS,SS и  ES - для

    кодового,     данных-,   стекового    и   дополнительного   сегментов

    соответственно.  Это их  обычное использование,  но применение этих

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

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

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

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

    для указания текущей команды.  Каждая выполняемая команда находится

    в ячейке, на которую указывает пара регистров CS:IP.

      Комбинация сегментного  регистра  с  регистром   смещения  для

    указания физического  адреса записывается в  виде сегмент:смещение,

    например, CS:IP. Значение сегмента стоит перед двоеточием, смещение

    - после.  Такая  нотация  используется   и  для  регистров,  и  для

    абсолютных    адресов.  Вы  можете  писать  такие  адреса как CS:100,

    DS:BX, 570:100, или 630:DI.

      Регистр сегмента данных (DS)  процессор использует для обычного

    доступа  к    данным.  Схемы    адресации  для    операндов,  которые  мы

    рассматривали в  предыдущем пункте, дают  16-битовое смещение, и  в

    большинстве случаев для формирования исполнительного адреса процес-

    сор комбинирует это смещение с ргеистром DS.

      Регистр  сегмента стека  указывает на  системный стек.      Команды

    PUSH, POP, CALL и RET управляют данными в стеке в позиции по адресу

    SS:SP.  Регистр  SP  -  указатель  стека  -  служит для определения

    смещения  в стеке.  Кроме  того,  сегмент стека  подразумевается по

    умолчанию  при адресации  с  использованием  регистра BP.  Это дает

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

    регистра  BP. В  следующей главе  есть пункт  о стековых операциях,

    который  демонстрирует, каким  образом адресация  через BP упрощает

    связь с данными в стеке.

      Наконец, регистр дополнительного сегмента используется 8088 для

    доступа к  данным, когда требуется    более одного сенмента.  Обычной

    операцией такого рода является  копирование данных из одной области

    памяти в  другую. Между областями, находящимися  не внутри одного и

    того же блока памяти размером 64К, невозможно произвести обмен дан-

    ными, используя единственный сегментный  регистр. Имея в распоряже-

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

    Фиг. 3.7,  может указать одновременно исходный  и целевой сегменты.

    Регистр  DS  указывает  область  исходных  данных,      а  регистр ES -

 

                  і                і

                  ГДДДДДДДДДДДДДДДДДДДДґ ДДДДД DS

     Копировать   і     Сегмент -      і

      отсюда      ДДДДДДДДґ              і

             і    і     источник         і

             і    ГДДДДДДДДДДДДДДДДДДДДґ

             і    і                і

             і    і                і

             і    ГДДДДДДДДДДДДДДДДДДДДґ ДДДДД ES

             і    і      Сегмент         і

             і    і                і

       сюда ДДДДДДДДґ    назначения      і

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

 

         Фиг.3.7 Копирование из сегмента в сегмент

 

    сегмент  назначения.  Для  передачи  данных  существуют специальные

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

    ES для указания исходного и целевого регистров.