Информация по команде LEA

Р.Марек. Команда LEA — не только вычисление адреса

Имя этой команды — это сокращение от "Load Effective Address".

Она вычисляет эффективный адрес второго операнда и сохраняет его в первом операнде, который может быть только регистром. Синтаксис этой команды требует, чтобы второй операнд был заключен в квадратные скобки, но фактически она не адресует память.

LEA полезна в тех случаях, когда мы не собираемся обращаться к памяти, а адрес нужен нам для другой цели:

AssemblerВыделить код

1
2

lea edi,[ebx4+ecx ]           ;загружает в регистр EDI адрес, 
                               ;вычисленный как EDI=ЕВХ4+ЕСХ

Значение, вычисленное командой LEA, не обязательно рассматривать как адрес: ее можно использовать для целочисленных/арифметических вычислений. Вот несколько примеров:

AssemblerВыделить код

1
2
3
4

   lea   ebx,[ecx+edx4+500h]      ;загружаем в ЕВХ выражения
   lea   еbх,[еах+еах4-1]         ;ЕВХ = ЕАХ5-1 
   lea   ebx,[eax+eax8]           ;ЕВХ = ЕАХ9 
   lea   ecx,[eax+ebx]             ;ЕСХ = ЕАХ+ЕВХ