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

    Поскольку  вычисление для  операнда  адреса,  состоящего из  базы и

    индекса, встречается довольно часто,  среди способов адресации 8088

    есть  такие, что  позволяют автоматически  производить идексирующее

    сложение.  Вместо  выполнения   всех  вычислений,  программа  может

    определить только величину 2*I и поместить ее в регистр BX. Команда

 

      INC    [OPND + BX]

 

    вычисляет исполнительный адрес через сложение адреса базы  OPND  со

    значением  индекса в BX. Этой командой достигается тот же самый ре-

    зультат что и в предыдущем случае, но меньшим числом команд.  Обра-

    тите внимание, что в этой команде ассемблеру не требуется подсказка

    WORD  PTR,    потому что ассемблер уже знает, что OPND является пере-

    менной типа WORD. Оператор PTR требуется только в тех случаях, ког-

    да ассемблер не может определить тип операнда.

      Любой из  четырех адресных регистров  может быть использован  в

    качестве индекса  при базе. Фиг.  3.2 показывает возможные    способы

    адресации через  базу и индекс. Вы    видите, что ассемблер допускает

    несколько способов  записи операции адресации.  В группе, состоящей

    из      пяти команд  на Фиг.  3.2,  во      всех командах  адрес базы  OPND

    складывается с указанным рядом индексным регистром.

      Надо  отметить,  что  в  команде,  содержащей  базисный  адрес,

    регистр  не обязательно  должен содержать  именно значение индекса.

    Действительно, поскольку BX  называется базисным регистром, кажется

    разумным воспользоваться противоположной  конфигурацией. В качестве

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

    векторов с одинаковой длиной  и размером элементов. Такую структуру

    может  иметь,   например,  классный  журнал,   в  котором  векторам

    соответствуют   наборы   оценок   за   каждую  контрольную    работу.

    Программа, вычисляющая оценку пятого ученика в классе по I-й работе

    будет  иметь  уже  известное  значение  индекса  (5) а базу (вектор

    данной  контрольной   работы)  -  вычисляемую   в  ходе  выполнения

    программы.

      Индексный регистр может содержать как адрес базы вектора, так и

    значение  индекса  в  векторе.  Поскольку  константное  значение  в

    команде может  оказаться и базой  и индексом (или  вовсе чем-нибудь

    известным только программисту), то это значение называют смещением.

    Оно соответствует  расстояню или смещению  от адреса в  регистре до

    исполнительного адреса, по которому происходит обращение.