Каждый из сегментных регистров имеет свое, отмеченное выше назначение. В некоторых случаях, однако, более удобна связь с данными вне сегмента данных, например, с небольшой областью данных в программе. В большинстве случаев программа работает с данными в той области, на которую указывает регистр DS, но иногда программе требуется ссылка на локальную переменную, находящуюся в кодовом сегменте программы. Чтобы осуществить эту ссылку, приходится изменять обычное использование сегментов. Фиг.3.8 показывает такую организацию программы.
ГДДДДДДДДДДДДДДДДДДДЕДДДДДД CS
і Программа и і
і і
і локальные данные і
і ГДДДДДД CS:LOCAL_VALUE
ГДДДДДДДДДДДДДДДДДДДґ
і і
і і
і і
ЕДДДДДДДДДДДДДДДДДДДЕДДДДДД DS
і Основная і
і і
і область даных і
і і
ГДДДДДДДДДДДДДДДДДДДґ
і і
Фиг. 3.8 Переназначение CS на локальные данные.
Вместо изменения значения регистра DS, чтобы он указывал на программный сегмент, команда изменяет ссылку на данные, показывая, что переменная расположена в сегменте кодов (Code Segment).
INC CS:LOCAL_VARIABLE
Это делается с помощью префикса "CS:". В машинном языке команда переопределения сегмента выглядит как однобайтовый префикс перед обычной командой машинного языка. 8088 понимает этот префикс переназначения сегмента и изменяет обычный способ вычисления адреса. Вместо регистра DS процессор использует для вычисления физического адреса данных регистр CS.Одного префикса в команде всегда достаточно, так как 8088 может адресоваться в ней не более чем к одной ячейке памяти.
Для нормального обращения к данным команда может использовать любой из четырех сегментных регистров. Регистр DS используется по умолчанию, то есть когда в команде не указан другой сегментный регистр, то используется DS. Помните, что при использовании в адресных вычислениях регистра BP сегментом по умолчанию становится стековый сегмент. Команда может определить и любой из трех других сегментных регистров, указав его в адресном выражении. Некоторые команды, правда, не могут пользоваться переназначением сегментов. Это - команды обработки строк. Строковая команда определяет использование регистров неявным образом, и оно не может быть изменено. В главе 4 мы обсудим строковые команды и их специфическое пользование сегментами.