Программная модель МП-системы на основе процессора Pentium. Особенности организации памяти и допустимые способы адресации, страница 8

Сегментные  регистры используются для хранения селекторов сегментов. Процессор Pentium содержит шесть  сегментных  регистров CS, SS, DS, ES, FS, GS, содержащих селекторы  сегментов  кода  CS, стека  SS  и  данных  DS,  ES,  FS,  GS.  Каждый   сегментный  регистр   указывает   на  конкретный   сегмент, используемый программой в текущий момент времени. В любой момент времени до шести сегментов памяти непосредственно доступны программе. Однако программа может обращаться к существенно большему числу сегментов. Остальные сегменты могут быть использованы путем загрузки их селекторов в сегментные  регистры из прикладной программы во время ее выполнения. Единственным требованием является то, что загрузка соответствующего сегментного регистра должна быть выполнена до обращения к искомому сегменту.

Назначение сегментных регистров

Сегмент, содержащий выполняемые команды, называется сегментом кода, и его селектор находится в сегментном регистре CS (Current Code Segment). Системой команд процессора х86 не предусмотрена непосредственная инициализация  регистра CS. Изменить его содержимое можно только косвенным образом при выполнении команд безусловного перехода  JMP addr,  вызова подпрограмм CALL addr и  возврата из них RET, а также при обработке внутренних и внешних прерываний. Адрес текущей выполняемой команды (смещение внутри сегмента команд) задается с помощью специального регистра - указателя команд ЕIP (Instruction Pointer), который выполняет те же функции, что и счетчик команд РС в традиционных структурах. При обычной работе значение ЕIP определяет смещение выбираемой из памяти команды. Как правило, это смещение из-за опережающей выборки команд не совпадает со смещением очередной выполняемой команды, находящейся в этот момент на выходе очереди команд. Поэтому при запоминании содержимого ЕIP в стеке, например, при вызове подпрограмм значение ЕIР автоматически корректируется, чтобы адресовать команду, которая будет выполняться при возврате в основную программу. Прямой доступ к содержимому указателя команд ЕIP также не предусмотрен. Значение ЕIP может быть изменено косвенным образом при выполнении команд условного и безусловного переходов.

Регистры DS,  ES,  FS,  GS являются регистрами сегментов данных. Они позволяют организовать эффективный и безопасный доступ к различным структурам данных.

15                0         63                                                                            0

CS

Атрибуты

Базовый адрес

Размер сегмента

CSт

SS

SSт

DS

DSт

ES

ESт

FS

FSт

GS

GSт

Сегментные                         64-разрядные  кэш-регистры  сегментов регистры                                      кода,  данных  и  стека.

31                                       0  15                     0

GDTR

Базовый  адрес  сегмента

Предел

IDTR

Базовый  адрес  сегмента

Предел

Регистры  системных адресов дескрипторных таблиц

15            0     63                                                                                       0

TR

Селектор

Атрибуты

Базовый адрес сегмента

Размер сегмента

TRт

LDTR

Селектор

Атрибуты

Базовый адрес сегмента

Размер сегмента

LDTRт

Регистры  системных                         64-разрядные  кэш-регистры сегментов                                       системных  сегментов