Сегментные регистры
Микропроцессор i8086 имеет четыре сегментных регистра: CS, DS, SS, ES. Их существование обусловлено спецификой организации и использования оперативной памяти микропроцессорами Intel. Она заключается в том, что микропроцессор аппаратно поддерживает структурную организацию программы в виде четырех частей, называемых сегментами. Соответственно, такая организация памяти называется сегментной.
Для того чтобы указать на сегменты, к которым программа имеет доступ в конкретный момент времени, и предназначены сегментные регистры. Фактически, с небольшой поправкой, как мы увидим далее, в этих регистрах содержатся адреса памяти, с которых начинаются соответствующие сегменты. Логика обработки машинной команды построена так, что при выборке команды, доступе к данным программы или к стеку неявно используются адреса во вполне определенных сегментных регистрах. Микропроцессор поддерживает следующие типы сегментов:
Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр CS (code segment register) – сегментный регистр кода. Он указывает на начало сегмента, содержащего исполнимый код программы.
Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр DS (data segment register) – сегментный регистр данных, который хранит адрес сегмента данных текущей программы.
Сегмент стека. Этот сегмент представляет собой область памяти, называемую стеком. Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит регистр SS (stack segment register) – сегментный регистр стека, содержащий адрес сегмента стека.
Дополнительный сегмент данных. Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в сегментном регистре DS. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще один дополнительный сегмент данных. Но в отличие от основного сегмента данных, адрес которого содержится в сегментном регистре DS, при использовании дополнительного сегмента данных его адрес требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адрес дополнительного сегмента данных должен содержаться в регистре ES (extension data segment registers).
Дата добавления: 2016-03-10; просмотров: 1170;