Assembler для начинающих


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


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



- Начало -  - Назад -  - Вперед -



Книжный магазин