CS | – сегмент кода |
DS | – сегмент данных |
ES | – дополнительный сегмент |
SS | – сегмент стека |
FS (только с 286+) | – универсальный сегмент |
GS (только с 386+) | – универсальный сегмент |
В отличие от регистров DS, ES, GS, FS, которые называются регистрами сегментов данных, регистры CS и SS отвечают за сегменты двух особенных типов — сегмент кода и сегмент стека.
Сегмент кода содержит программу, исполняющуюся в данный момент, так что запись нового селектора в этот регистр приводит к тому, что далее будет исполнена не следующая по тексту программы команда, а команда из кода, находящегося в другом сегменте, с тем же смещением. Смещение следующей выполняемой команды всегда хранится в специальном регистре — EIP (указатель инструкции, 16-битная форма IP), запись в который также приведет к тому, что следующей будет исполнена какая-нибудь другая команда.
Указатель команд IP "следит" за ходом выполнения программы, указывая в каждый момент относительный адрес команды, следующей за исполняемой. Регистр IP программно недоступен т.к. это просто его сокращенное название, а не мнемоническое обозначение, наращивание адреса в нем выполняет микропроцессор, учитывая при этом длину текущей команды. Команды переходов, прерываний, вызова подпрограмм и возврата из них изменяют содержимое IP, осуществляя тем самым переходы в требуемые точки программы.