Как же адресная  информация передается  микропроцессору в машинном языке? 8088  использует  почти для  всех  операций адресации байт MOD-R/M (байт  режима  адресации и  регистра/модификатора - прим.  перев.). Фиг.3.4  показывает  формат этого  байта  команды. Байт  MOD-R/M следует  за байтом кода операции  и определяет один операнд памяти команды 8088. Этот байт может вместо ячейки памяти указывать  и регистр.    Такое  единство структуры  позволяет  реализовать все  возможности адресации операндов.

       ЪДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДї

        і     і        і       і

       АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДЩ

         Режим   Заданная    Регистр-команда модификатор

 

      Режим       Смещение

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

      00    DISP=0, нет байтов смещения

      01    -128<DISP<127, однобайтовое смещение

      10    -32768<DISP<32767, двухбайтовое смещение

      11    В поле r/m - регистр, а не адрес

      Фиг. 3.4 Байт режима адресации и регистра-модификатора

Первые два  бита байта MOD-R/M определяют выбранный способ адресации. Эти  два  бита  определяют  число байт смещения, которые следуют за    байтом MOD-R/M - ни  одного, один или два.  Последние 3  бита байта MOD-R/M определяют вид  адреса - одну из восьми комбинаций базисных и индексных регистров. Это поле называется полем R/M - полем регистра/модификатора. Это те самые  3 бита из колонки R/M на Фиг.3.3, где показаны возможные  комбинации при адресации. Значение оставшихся 3-х  бит в середине байта MOD-R/M зависят от конкретной команды. Для  команды  с двумя  операндами,  вроде ADD, это поле  указывает регистр, являющийся вторым операндом. Для команды с одним операндом,    как INC,  эти три  бита обычно составляют часть самого  кода операции. 8088  не знает, что имеет дело  с командой INC, пока не расшифрует средние три бита байта MOD-R/M.

Этот же байт используется еще  в паре специальных случаев. Если  в команде определен  регистр, а не    адрес памяти, то  в поле режима  помещается код  11B, чтобы сообщить микропроцессору, что поле  R/M  содержит код регистра,  а не  адрес памяти.  Наконец, вы  возможно   заметили, что в механизме работы  с байтом MOD-R/M не предусмотрена прямая адресация. 8088  рассматривает как  прямую адресацию случай типа [BP +  СМЕЩЕНИЕ] при  нулевом смещении.  В этом случае поле  смещения имеет длину два байта,  и в вычислении адреса не участвует ни один регистр. Из-за этого особого случая доступ к ячейке памяти,  на  которую  указывает регистр   BP,  в машинном  коде  требуется однобайтовое поле смещения с нулевым значением. Использование в той  же ситуации регистров  BX, SI  и DI не требует  байта смещения. В  следующем пункте будет показано  еще одно различие между адресацией  через регистры BP и BX.