Вычисление адресов



Вычисление адресов


    В способе  прямой адресации  памяти привлекательна      простота, но во
    многих случаях программа вынуждена вычислять действительный адрес в
    памяти.  Простейший  пример  -   операции  с  вектором,  одномерным
    массивом.  В  программе  на  языке    Фортран  такую    структуру можно
    создать оператором
 
      DIMENTION   OPND(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.  Со-
    ответствующий элемент вектора в этом случае будет увеличиваться ко-
    мандой
 
      INC    WORD PTR [BX]
 
      Выражение [BX] сообщает ассемблеру, что регистр BX содержит ад-
    рес операнда,  а не является операндом  сам по себе. Скобки  [ и ],
    заключающие  какое-либо  значение,    указывают  ассемблеру,  что это
    значение  - адрес.  Другая часть  операндного выражения,  WORD PTR,
    требуется     ассемблеру   для   информации,      что  операнд  является
    переменной типа  WORD (слово). Далее мы  обсудим оператор PTR более
    подробно.




Содержание раздела








Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий