7.4.1.4.3. Регистры сегментов
Шесть 16-разрядных регистров содержат значения селекторов
сегментов, которые указывают
на текущие адресуемые сегменты памяти. Ниже перечислены эти регистры.
Регистр сегмента программы (CS). Указывает на сегмент, который
содержит текущую
последовательность исполняемых команд. Процессор выбирает все команды из этого
сегмента, используя содержимое счетчика команд как относительный адрес. Содержимое регистра CS изменяется в результате выполнения внутрисегментных команд управления потоком, прерываний и
исключений. Он не может быть загружен
явным способом.
Регистр сегмента стека (SS). Вызовы подпрограмм, записи параметров и активизация процедур обычно
требуют области памяти, резервируемой под стек. Все операции со стеком используют регистр SS при обращении к стеку. В отличие от регистра CS регистр SS может
быть загружен явно с помощью команды программы.
Остальные
четыре регистра являются регистрами сегментов данных (DS, ES, FS, GS), каждый из которых адресуется текущей исполняемой
программой. Доступ к четырем
раздельным областям данных имеет целью повысить эффективность программ, позволяя им обращаться
к различным типам структур данных. Содержимое этих регистров может быть заменено под
управлением программы.
При использовании регистров сегментов МП 80386 с каждым
выбранным сегментом
связывает базовый адрес. При адресации единицы данных внутри сегмента к базовому адресу
сегмента добавляется 32-разрядный относительный адрес. Если сегмент выбран загрузкой селектора
сегмента в регистр сегмента, то командам манипуляции данными нужен только этот
относительный адрес.
Регистры, которые содержат дескрипторы сегментов,
программно недоступны. Внутри МП 80386 регистр дескриптора связан с каждым
программно доступным регистром сегмента. Каждый регистр дескриптора содержит
32-разрядный базовый адрес сегмента, 32-разрядную границу сегмента (поле,
определяющее размер сегмента) и другие необходимые атрибуты.
Когда значение селектора загружается в регистр сегмента,
процессор автоматически обновляет связанный с ним регистр дескриптора. В
защищенном режиме базовый
адрес, граница и атрибуты целиком обновляются содержимым дескриптора сегмента, выбранного
селектором. В режиме реальных адресов обновляется только базовый адрес путем сдвига значения селектора
на четыре бита влево, поскольку максимальная
граница сегмента и его атрибуты в реальном режиме фиксированы.