Opcode |
Instruction |
Description |
---|---|---|
8D /r |
LEA r16,m |
Store effective address for m in register r16 |
8D /r |
LEA r32,m |
Store effective address for m in register r32 |
Computes the effective address of the second operand (the source operand) and stores it in the first operand (destination operand). The source operand is a memory address (offset part) specified with one of the processors addressing modes; the destination operand is a general-purpose register. The address-size and operand-size attributes affect the action performed by this instruction, as shown in the following table. The operand-size attribute of the instruction is determined by the chosen register; the address-size attribute is determined by the attribute of the code segment.
Operand Size |
Address Size |
Action Performed |
---|---|---|
16 |
16 |
16-bit effective address is calculated and stored in requested 16-bit register destination. |
16 |
32 |
32-bit effective address is calculated. The lower 16 bits of the address are stored in the requested 16-bit register destination. |
32 |
16 |
16-bit effective address is calculated. The 16-bit address is zero-extended and stored in the requested 32-bit register destination. |
32 |
32 |
32-bit effective address is calculated and stored in the requested 32-bit register destination. |
Different assemblers may use different algorithms based on the size attribute and symbolic reference of the source operand.
IF OperandSize 16 AND AddressSize 16
THEN
DEST EffectiveAddress(SRC); (* 16-bit address
*)
ELSE IF OperandSize
16 AND AddressSize
32
THEN
temp EffectiveAddress(SRC);
(* 32-bit address *)
DEST temp[0..15];
(* 16-bit address *)
ELSE IF OperandSize
32 AND AddressSize
16
THEN
temp EffectiveAddress(SRC);
(* 16-bit address *)
DEST ZeroExtend(temp);
(* 32-bit address *)
ELSE IF OperandSize
32 AND AddressSize
32
THEN
DEST EffectiveAddress(SRC); (* 32-bit address
*)
FI;
FI;
None.
#UD - If source operand is not a memory location.
#UD - If source operand is not a memory location.
#UD - If source operand is not a memory location.
For details, see Volume 2A and Volume 2B of the Intel(R) 64 and IA-32 Intel Architecture Software Developer's Manual. For the latest updates on the instruction set information, go to the web site.