Способы адресации Способом, или режимом адресации, называют процедуру нахождения операнда для выполняемой команды
Косвенная адресация со смещением (базовая и индексная)
Download 81.61 Kb.
|
Способы адресации
Косвенная адресация со смещением (базовая и индексная)
Адресуется память (байт или слово): относительный адрес операнда определяется, как сумма содержимого регистра BX, BP, SI или DI и указанной в команде константы, иногда называемой смещением. Смещение может быть числом или адресом. Так же, как и в случае косвенной адресации без смещения, при использовании регистров BX, SI и DI подразумевается сегмент, адресуемый через DS, а при использовании ВР подразумевается сегмент стека и, соответственно, регистр SS. Рассмотрим применение косвенной адресации со смещением на примере прямого вывода в видеобуфер. mov AX,0B800h ;Сегментный адрес mov ES,AX ;видеобуфера в ES mov DI,80*2*24 ;Смещение к нижней строке экрана mov byte ptr ES:0[DI], 'О' ;Символ на экран mov byte ptr ES:2[DI], 'К' ;Запишем символ в следующую позицию mov byte ptr ES:4[DI], '!' ;Запишем символ в следующую позицию В этом примере для адресации выбран индексный регистр DI; в него заносится базовый относительный адрес памяти, в данном случае смещение в видеобуфере к началу последней строки экрана. Модификация этого адреса с целью получить смещение по строке экрана осуществляется с помощью констант 2 и 4, которые при вычислении процессором исполнительного адреса прибавляются к содержимому индексного регистра DI. Иногда можно встретиться с альтернативными обозначениями того же способа адресации, которые допускает ассемблер. Вместо, например, 4[ВХ] можно с таким же успехом написать [ВХ+4], 4+[ВХ] или [ВХ]+4. Такая неоднозначность языка ничего, кроме путаницы, не приносит, однако ее надо иметь в виду, так как с этими обозначениями можно столкнуться, например, рассматривая текст дизссемблированной программы. Рассмотрим теперь пример использования косвенной адресации со смещением при обращении к стеку: ;Основная программа push DS ;В стек загружаются значения push ES ;трех регистров, push SI ;передаваемых подпрограмме mysub call mysub ;Вызов подпрограммы mysub ;Подпрограмма mysub, принимающая три параметра в стеке mov BP,SP ;Поместим в ВР текущий адрес вершины стека mov АХ,2[ВР] ;Читаем в АХ последний параметр (SI) mov ВХ,4[ВР] ;Читаем в ВХ предыдущий параметр (ES) mov CX,6[BP] ;Читаем в СХ первый параметр (DS) Здесь продемонстрирован классический прием чтения содержимого стека без извлечения из него этого содержимого. После того, как основная программа сохранила в стеке три параметра, которые потребуются подпрограмме, командой call вызывается подпрограмма mysub. Эта команда сохраняет в стеке адрес возврата (адрес следующего за call предложения основной программы) и осуществляет переход на подпрограмму. Состояние стека при входе в подпрограмму приведено на рис. 2.15. Download 81.61 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling