LEA в x86 выглядит как инструкция для адресов, но компиляторы часто используют её как скрытый калькулятор.Формально
LEA считает адрес без обращения к памяти:
lea eax, [rdi + 3]
Но по факту это обычная арифметика:
return x + 3;
Ещё хитрее:
lea eax, [rdi + rdi*4]
Это уже:
return x * 5;
Почему так делают?
Потому что x86-адресация умеет
base + index * scale + offset, а LEA позволяет использовать эту механику без чтения памяти.Бонус:
LEA не трогает флаги процессора, в отличие от add.Красота C и asm в том, что за простой строкой
x * 5 может стоять не mul, а маленький трюк архитектуры.
