assemblyx86instruction-set

What is the difference between MOV and LEA?


I would like to know what the difference between these instructions is:

MOV AX, [TABLE-ADDR]

and

LEA AX, [TABLE-ADDR]

Solution

  • 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.