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