На главную Назад
Добро пожаловать, уважаемый посетитель!

В способепрямой адресациипамяти привлекательнапростота, но во

многих случаях программа вынуждена вычислять действительный адрес в

памяти.Простейшийпример-операциисвектором,одномерным

массивом.ВпрограмменаязыкеФортрантакуюструктуру можно

создать оператором

 

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 более

подробно.


 

Mail.ru