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

Микропроцессор 8088 имеет четыре сегментных регистра: CS, DS, SS и ES для доступа к памяти в сегментах кодов, данных, стека и дополнительного сегмента, соответственно. Каждый из них используется по своему назначению, но их использование может изменяться в соответствии с требованиями программы.

Микропроцессор использует сегментный регистр команд для определения сегмента, содержащего выполняемую программу. Этот регистр комбинируется с указателем команд для получения ссылки на текущую команду. Выборка команды происходит из памяти по адресу, заданному парой регистров CS:IP.

Комбинация сегментного регистра с регистром смещения, порождающая физический адрес, записывается как сегмент : смещение, например, CS:IP. Значение сегмента предшествует двоеточию, значение смещения следует за ним. Такая запись используется как для регистров, так и для абсолютных величин. Вы можете записывать адреса как CS:100, DS:BX, S70:100 или 630:DI.

Микропроцессор использует сегментный регистр данных DS для обычного доступа к данным. Схемы адресации операндов, которые мы обсудили в предыдущем разделе, дают 16-битовое смещение, и в большинстве случаев микропроцессор объединяет это смещение с регистром DS для формирования абсолютного адреса памяти.

Сегментный регистр стека задает системный стек. Команды PUSH, POP, CALL и RET обрабатывают данные в стеке, находящиеся в месте, определяемом парой регистров SS:SP. Регистр SP - это указатель стека, он служит указателем в стековом сегменте. Всякий раз, когда при адресации используется регистр BP, по умолчанию используется сегментный регистр стека. Это позволяет программе иметь доступ к данным в стеке, используя регистр BP в качестве указателя. В следующей главе есть раздел, посвященный работе со стеком и демонстрирующий, как адресация с помощью регистра BP упрощает ссылки к данным в стеке.

Наконец, микропроцессор 8088 использует дополнительный сегментный регистр ES для ссылок к данным в случаях, когда требуется более одного сегмента. Обычной операцией в программе является копирование информации из одной области памяти в другую. Если эти области расположены не внутри одного поля размером 64K, то переместить данные, используя единственный сегментный регистр, невозможно. С помощью дополнительного сегментного регистра программа может одновременно определить сегменты источника и результата (рис.3.7). Регистр DS локализует область исходных данных, а регистр ES указывает на сегмент результата. Существуют специальные команды обработки строк для пересылки данных, которые автоматически используют DS и ES как сегменты источника и результата. Эти команды описаны в следующей главе.

Хостинг от uCoz