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