Предназначение сегментов
Предназначение сегментов
Каждый из сегментных регистров имеет свое, отмеченное выше назна-
чение. В некоторых случаях, однако, более удобна связь с данными
вне сегмента данных, например, с небольшой областью данных в
программе. В большинстве случаев программа работает с данными в той
области, на которую указывает регистр 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 мы обсудим строковые команды и их специфическое
пользование сегментами.