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