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