База + индекс + смещение

    Программа  может  также  комбинировать  вычисляемый  адрес    базы  с

    вычисляемым  индексом.  Как  показано  на  Фиг.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  позволяет  складывать  либо

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

    сложить  две ячейки  памяти. Это  и означает,  что команда содержит

    только один адрес памяти.

Hosted by uCoz