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



   Дальнейшее развитие оправданная мерседес диагностика еще интереснее.             

Загрузка исполнительного адреса



Загрузка исполнительного адреса


    Команда загрузки действительного адреса LEA очень похожа на команду
    MOV.  Но вместо пересылки данных из ячейки памяти в регистр команда
    LEA загружает в регистр адрес двнных.  Так как набор команд
    микропроцессора 8088 разрешает иметь в команде только один адрес
    памяти, в качестве приемника результата всегда указывается регистр.
    Команда LEA может ссылаться на операнд источника с помощью любого
    типа адресации, который можно указать байтом mod=r/m.
 
      Во многих случаях команда LEA идентична команде MOV с
    непосредственным операндом. Команды
 
      MOV   BX,             OFFSET            EXWORD
      LEA BX, EXWORD
 
      делают одно и то же. Первая команда - это непосредственная
    пересылка, которая использует смещение переменной EXWORD. Оператор
    OFFSET говорит ассемблеру о том, что в регистр BX надо загрузить
    смещение адресного значения (все адресные значения имеют две части
    - сегмент и смещение) переменной EXWORD. Команда LEA вычисляет
    действительный адрес переменной EXWORD и помещает его в регистр BX.
    В этом случае команды выполняют одинаковые действия.
 
      Но если бы программа загружала в регистр BX адрес десятого
    байта массива, на который указывает регистр DI, команда LEA
    выглядела бы следующим образом
 
      LEA BX, 10[DI]
 
      Микропроцессор выполнил бы вычисление адреса, используя
    информацию из байта mod=r/m в точности, как в случае команды MOV.
    Затем он поместил бы вычисленное смещение, а не данные, по этому
    адресу в регистр BX. Аналогичной команде с непосредственным
    операндом MOV, которая могла бы выполнять ту же функцию, нет. У
    ассемблера здесь нет способа определения непосредственного
    значения, так как адрес неизвестен во время ассемблирования.




Содержание Назад Вперед