|
В способепрямой адресациипамяти
привлекательнапростота, но во
многих случаях программа вынуждена
вычислять действительный адрес в
памяти.Простейшийпример-операциисвектором,одномерным
массивом.ВпрограмменаязыкеФортрантакуюструктуру
можно
создать оператором
DIMENTIONOPND(20)
В другихязыкахвысокогоуровнясуществуютаналогичные способы
созданиямассивов.Привыполнениипрограммаполучаетдоступ к
разнымэлементам всоответствии созначением индекса,например,
OPND(5).Написаниепрограммына
языкеассемблератребуетот
программиставычисленияместонахожденияпятогоэлементав поле
данных OPND. Затем программа может
использовать полученное значение
для прямой адресации. Однако, вслучае с выражением OPND(I), где I
вычисляется входе выполнения программы,способа прямого указания
правильного адреса для программы на языке
ассемблера не существует.
Адрес должен вычисляться в ходе выполнения
программы.
Набор команд 8088 допускаетнесколько способов определения ис-
полнительного адреса (Effective Address -
EA) операнда. Эти способы
вычисленияадресаназываютспособамиадресации.Ихколичество
предназначенодляоблегчениязадачиопределенияисполнительных
адресов. Благодаря правильному выбору
способа адресации программист
может минимизировать количество вычислений
в программе.
Формула для определения I-го элемента
массива OPND такова:
EA = адрес базы OPND + (I * длина),
где длина- это длинакаждого элемента
массива.В данном примере
OPND- массив,состоящий изслов, поэтомукаждый элементв нем
имеет длину 2 байта. Тогда формула
выглядит так:
EA = адрес базы + (I * 2)
Для вычисления этого адреса требуется по
крайней мере одинре-
гистр,содержащий адрес операнда. Программа может вычислить испол-
нительный адрес, оставив результат водномизрегистров.Тогда,
вместо указния адреса в самой команде INC,можнопростоуказать,
какой из регистров его содержит.
Для хранения адресов операндов программа
может использовать лю-
бойизчетырех адресных регистров.
Так, в нашем примере программа
добавляет к адресу базы 2*I и помещает
результат в регистр BX.Со-
ответствующий элемент вектора в этом
случае будет увеличиваться ко-
мандой
INCWORD PTR [BX]
Выражение [BX] сообщает ассемблеру, что
регистр BX содержит ад-
рес операнда,а не является операндомсам по себе. Скобки[ и ],
заключающиекакое-либозначение,указываютассемблеру,что это
значение- адрес.Другая частьоперандного выражения,WORD PTR,
требуетсяассемблерудляинформации, чтооперандявляется
переменной типаWORD (слово). Далее мыобсудим оператор PTR более
подробно.
|