What is the difference between MOV and LEA?

assembly, instruction-set, x86

Solution

- `LEA` means Load Effective Address

- `MOV` means Load Value

In short, `LEA` loads a pointer to the item you're addressing whereas MOV loads the actual value at that address.

The purpose of `LEA` is to allow one to perform a non-trivial address calculation and store the result [for later usage]

LEA ax, [BP+SI+5] ; Compute address of value

MOV ax, [BP+SI+5] ; Load value at that address

Where there are just constants involved, `MOV` (through the assembler's constant calculations) can sometimes appear to overlap with the simplest cases of usage of `LEA`. Its useful if you have a multi-part calculation with multiple base addresses etc.

Problem

I would like to know what the difference between these instructions is: ``` MOV AX, [TABLE-ADDR] ``` and ``` LEA AX, [TABLE-ADDR] ```

Original source

Related problems