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