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