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



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


    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 для указания исходного и целевого регистров.




Содержание раздела