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