Assembler для начинающих

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


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

Содержание раздела