ES (extension data segment register) - Дополнительный сегмент данных.
GS (extension data segment register) - Дополнительный сегмент данных.
FS (extension data segment register) - Дополнительный сегмент данных.
Сегментирование позволяет разработчикам систем выбирать различные модели организации памяти. Проблемы разработки конкретных моделей памяти подробно рассматривается в Части II - Системное программирование.
Регистры сегментов содержат 16-разрядные селекторы сегментов, которые указывают на таблицу распределения памяти. Данная таблица содержит базовые адреса сегментов и другую информацию, регламентирующую доступ к памяти. При использовании плоской (несегментированной) модели все сегменты отображаются в единое пространство физической памяти, как это показано на Рисунке 2-6.
В каждый момент времени непосредственно доступны не более 6-и сегментов. Их селекторы содержатся в регистрах CS, DS, SS, ES, FS и GS. Каждый регистр ассоциируется с сегментом, который соответствует одному из возможных типов доступа к памяти (коды, данные или стек). Каждый регистр указывает на конкретный сегмент, используемый программой и имеющий определенный тип доступа (смотри Рисунок 2-7). Остальные сегменты могут быть использованы после загрузки соответствующих селекторов в сегментные регистры.
Сегмент, содержащий последовательность исполняемых команд, называется сегментом кода. Селектор этого сегмента содержится в регистре CS. Процессор i486 выбирает команды из этого сегмента, используя содержимое счетчика команд (регистр EIP) как относительный адрес внутри сегмента. Содержимое регистра CS изменяется в результате выполнения межсегментных команд управления потоком ( CALL, IRET и JMP), прерываний и исключений. Вызовы подпрограмм, записи параметров и активизация процедур обычно требует области памяти, резервириемой под стек. Все операции со стеком используют регистр SS при обращении к стеку. В отличие от регистра CS, регистр SS может быть загружен явно с помощью команды программы. Остальные четыре регистра являются регистрами сегментов данных (DS, ES, FSи CS), каждый из которых используется текущей исполняемой программой. Доступ к четырем раздельным областям данных имеет целью повысить эффективность программ и безопасность доступа при обращении к различным типам структур данных. Например, имеет смысл разнести по разным сегментам собственные данные программного модуля, данные полученные из модуля более высокого уровня, динамически создаваемые структуры данных и данные, разделяемые текущим модулем с другими модулями. Механизм сегментации позволяет ограничить разрушения неправильно работающей вследствии ошибки программы только теми сегментами, которые выделены текущей программе. Операнды, расположенные внутри сегмента данных адресуются указанием их смещения непосредственно внутри команды или в регистре общего назначения. В некоторых случаях (при сложной структуре данных) может возникнуть необходимость иметь доступ к более чем к четырем сегментам данных. Доступ к дополнительным сегментам осуществляется путем перезагрузки регистров DS, ES, FS и GS прикладной программой в процессе выполнения. Загрузка нужного сегментного регистра должна происходить до обращения к данным соответствующего сегмента. При использовании регистров сегментов, с каждым выбранным сегментом связывается базовый адрес. При адресации единицы данных внутри сегмента, к базовому адресу сегмента добавляется 32-разрядный относительный адрес. Если сегмент выбран загрузкой селектора сегмента в регистр сегмента, то командам манипуляции данными нужен только этот относительный адрес.