🏗 LEA (Load Effective Address) — Загрузка эффективного адреса

Команда LEA вычисляет эффективный адрес операнда и загружает его в регистр.


📌 Синтаксис:

LEA <приёмник>, <источник>
  • <приёмник> — регистр, в который запишется результат.
  • <источник> — адресное выражение.

🛠 Как работает LEA?

LEA не загружает значение по адресу, а просто вычисляет сам адрес.

Пример:

mov bx, 1000h   ; BX = 1000h
lea ax, [bx+4]  ; AX = 1000h + 4 = 1004h

Если бы использовался MOV, в AX попало бы значение по адресу [BX+4].


📌 Применение LEA

1️⃣ Вычисление адресов

lea si, [bx+di+8]  ; SI = BX + DI + 8

2️⃣ Быстрое умножение (замена MUL)

lea ax, [bx+bx*2]  ; AX = BX * 3 (быстрее, чем MUL)
lea dx, [ax+ax*4]  ; DX = AX * 5

3️⃣ Использование в циклах

lea di, [si+20]   ; Быстрый сдвиг указателя на 20 байт

🔥 Особенности LEA

Работает быстрее, чем MUL и ADD
Не изменяет флаги (в отличие от арифметических операций)
Используется для оптимизации в низкоуровневом коде
Работает только с адресными выражениями


🏆 Заключение

LEA — мощный инструмент для оптимизации вычислений и работы с памятью.
Используется в компиляторах и ассемблерных вставках для ускорения кода.