LEA
Usage: LEA dest,src Modifies flags: None
Transfers offset address of 'src' to the 'dest' register.
Load Effective Address
LEA reg16,mem ; o16 8D /r [8086]
LEA reg32,mem ; o32 8D /r [386]
LEA, despite its syntax, does not access memory. It calculates the effective address specified by its second operand as if it were going to load or store data from it, but instead it stores the calculated address into the register specified by its first operand. This can be used to perform quite complex calculations (e.g. LEA EAX D$EBX + ECX*4 + 100) in one instruction.
Its orginal first purpose is with loading complex addresses, depending on combinations of Pointers and Indexes.
LEA, despite being a purely arithmetic behaviour, which accesses no memory, still requires a formulation in the manner of a Memory reference.
You may consider LEA as the equivalent non existing MOV Instruction that would do something like this:
MOV eax, ebx+ecx*4+100 ; Does not exist in x86 Instructions set.
All of this is nothing but a reuse of the standard Effective Addressing mode of the x86, that you usually see in all Memory accesses, example:
ADD edx D§ebx+ecx*4+100 eax edx
More about this at the end of Addressing [SIB Adressing (Effective adress).]
Example:
lea eax edx