Байт MOD R-M

    Как  же адресная  информация передается  микропроцессору в машинном

    языке?  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.