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