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