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, которая могла бы выполнять ту же функцию, нет. У
    ассемблера здесь нет способа определения непосредственного
    значения, так как адрес неизвестен во время ассемблирования.




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