Описание процессора i8086 для программиста

Сегментные регистры


Процессор 8086 содержит четыре 16-разрядных сегментных регистра: CS, DS, ES и SS, называемые соответственно сегментными регистрами кода, данных, дополнительных данных и стека.

Процессор использует содержимое сегментных регистров (так называемые селекторы сегментов) для формирования 20-разрядных физических адресов памяти, о чём говорилось выше, в подразделе 2.2.2 “Сегментация”. При обращениях к кодам команд всегда используется сегментный регистр CS, а при обращении к стеку (с использованием указателя стека или при адресации посредством регистра BP) – сегментный регистр SS, причём если адресация данных производится с помощью регистра BP, вместо сегментного регистра SS можно указать любой другой сегментный регистр. При обращении к данным в большинстве случаев по умолчанию используется регистр сегментный регистр DS, однако вместо него в этих ситуациях можно использовать любой другой сегментный регистр. Сегментный регистр ES используется при доступе к строкам-приёмникам в строковых операциях, в этом качестве он не может быть заменён каким-либо другим сегментным регистром.

Сегментные регистры не могут являться операндами арифметико-логических инструкций. В регистры DS, ES и SS значение может быть загружено из какого-либо регистра общего назначения с помощью инструкции MOV

либо извлечено из вершины стека инструкцией POP. Регистр CS не может быть загружен с помощью инструкции MOV

или POP, новое значение в него загружается только при выполнении операций длинных переходов (инструкции JMP, CALL и RET), при возврате из прерывания (инструкция IRET) и при возникновении прерывания. Короткие переходы не изменяют регистр CS. Содержимое всех четырёх сегментных регистров может быть переслано в любой регистр общего назначения инструкцией MOV или занесено в стек инструкцией PUSH.



Содержание раздела