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


Байт MOD RM



Байт 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.





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