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

Адресация через базу и смещение



Адресация через базу и смещение


    Поскольку  вычисление для  операнда  адреса,  состоящего из  базы и
    индекса, встречается довольно часто,  среди способов адресации 8088
    есть  такие, что  позволяют автоматически  производить идексирующее
    сложение.  Вместо  выполнения   всех  вычислений,  программа  может
    определить только величину 2*I и поместить ее в регистр BX. Команда
 
      INC    [OPND + BX]
 
    вычисляет исполнительный адрес через сложение адреса базы  OPND  со
    значением  индекса в BX. Этой командой достигается тот же самый ре-
    зультат что и в предыдущем случае, но меньшим числом команд.  Обра-
    тите внимание, что в этой команде ассемблеру не требуется подсказка


    WORD  PTR,    потому что ассемблер уже знает, что OPND является пере-
    менной типа WORD. Оператор PTR требуется только в тех случаях, ког-
    да ассемблер не может определить тип операнда.
      Любой из  четырех адресных регистров  может быть использован  в
    качестве индекса  при базе. Фиг.  3.2 показывает возможные    способы
    адресации через  базу и индекс. Вы    видите, что ассемблер допускает
    несколько способов  записи операции адресации.  В группе, состоящей
    из      пяти команд  на Фиг.  3.2,  во      всех командах  адрес базы  OPND
    складывается с указанным рядом индексным регистром.
      Надо  отметить,  что  в  команде,  содержащей  базисный  адрес,
    регистр  не обязательно  должен содержать  именно значение индекса.
    Действительно, поскольку BX  называется базисным регистром, кажется
    разумным воспользоваться противоположной  конфигурацией. В качестве
    примера  предположим,  что      программа  использует  множество разных
    векторов с одинаковой длиной  и размером элементов. Такую структуру
    может  иметь,   например,  классный  журнал,   в  котором  векторам
    соответствуют   наборы   оценок   за   каждую  контрольную    работу.
    Программа, вычисляющая оценку пятого ученика в классе по I-й работе
    будет  иметь  уже  известное  значение  индекса  (5) а базу (вектор
    данной  контрольной   работы)  -  вычисляемую   в  ходе  выполнения
    программы.
      Индексный регистр может содержать как адрес базы вектора, так и
    значение  индекса  в  векторе.  Поскольку  константное  значение  в
    команде может  оказаться и базой  и индексом (или  вовсе чем-нибудь
    известным только программисту), то это значение называют смещением.
    Оно соответствует  расстояню или смещению  от адреса в  регистре до
    исполнительного адреса, по которому происходит обращение.




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