Программа может  также  комбинировать  вычисляемый  адрес  базы с  вычисляемым  индексом.  Как  показано на  Фиг.3.2, программа может  использовать режим адресации с  двумя разными адресными регистрами.  Для формирования исполнительного адреса  в команде могут сочетаться  любой из регистров базы (BX и  BP) с любым из  индексных регистров  (SI и  DI).  В  программе  может  быть  также указано  смещение,  добавляемое  к  сумме  значений этих  двух  регистров. Этот способ  адресации обладает  максимальной гибкостью, так  как  позволяет  вычислять во  время выполнения программы и  адрес базы, и индексное  значение. Такая возможность  не  всегда требуется, но  доступна в  любой момент.

Пример с классным журналом демонстрирует случай, когда программа может вычислять и адрес базы,  и индекс вектора. Для того, чтобы  определить отметку  I-го ученика за  J-ю контрольную, потребовалось  бы установить адрес базы на J-й  вектор и индексировать его по I-му  элементу.

На рис.3.3 приведена сводка восьми  различных  способов  адресации,  возможных  в микропроцессоре  8088.  В команде  могут  использоваться любые из четырех  адресных регистров и смещение либо  комбинация  базисного регистра  и индексного  вместе со смещением.  Смысл колонки, обозначенной R/M, будет объяснен позже.

      R/M       Адрес операнда

      -----------------------------

      000   [BX + SI + СМЕЩЕНИЕ]

      001   [BX + DI + СМЕЩЕНИЕ]

      010   [BP + SI + СМЕЩЕНИЕ]

      011   [BP + DI + СМЕЩЕНИЕ]

      100   [SI + СМЕЩЕНИЕ]

      101   [DI + СМЕЩЕНИЕ]

      110   [BP + СМЕЩЕНИЕ]

      111   [BX + СМЕЩЕНИЕ]

      ----------------------------- Фиг. 3.3 Способы адресации 8088

В наборе команд 8088  поле смещения для адресации оптимизировано таким образом, чтобы минимизировать количество требуемых байт. Команда может не содержать поле  смещения, когда смещение равно нулю.  Если смещение  находится в диапазоне  от -127 до  127, то для  него  достаточно  одного байта.  Когда же  для его обозначения требуется  полное 16-битовое поле адреса, то  поле смещения будет занимать два  байта. Таким  образом, поле смещения может по необходимости  иметь  длину 0, 1  или 2 байта. Когда оно имеет  длину один байт, двоичное  число перед формированием адреса получает распространение знака. Это  означает, что процессор перед выполнением сложения помещает старший  бит смещения  в старшие 8  бит 16-битового значения.  Это позволяет  представлять  отрицательные смещения  в одном  байте. Самое  лучшее  здесь то, что  ассемблер сам  определяет нужную  длину и  выбирает  правильную и наиболее короткую команду для выполнения этой работы.  Но не  смотря  даже на  все  эти возможности адресации, набор  команд 8088 допускает  только по  одному операнду  памяти в  одной  команде. Двухоперандная  команда  ADD позволяет  складывать  либо регистр с ячейкой памяти, либо два регистра. В одной команде нельзя  сложить  две ячейки  памяти. Это и означает,  что команда содержит  только один адрес памяти.