LEA—Load Effective Address
Opcode
8D / r
8D / r
Description
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.
Table 2-16.
Operand Size
16
16
32
32
Different assemblers may use different algorithms based on the size attribute and
symbolic reference of the source operand.
Operation
IF OperandSize = 16 AND AddressSize = 16
THEN
DEST EffectiveAddress(SRC); (* 16-bit address *)
ELSE IF OperandSize = 16 AND AddressSize = 32
THEN
ELSE IF OperandSize = 32 AND AddressSize = 16
THEN
ELSE IF OperandSize = 32 AND AddressSize = 32
THEN
FI;
FI;
4:258
Instruction
LEA r16,m
LEA r32,m
LEA Address and Operand Sizes
Address Size
16
32
16
32
temp EffectiveAddress(SRC); (* 32-bit address *)
DEST temp[0..15]; (* 16-bit address *)
temp EffectiveAddress(SRC); (* 16-bit address *)
DEST ZeroExtend(temp); (* 32-bit address *)
DEST EffectiveAddress(SRC); (* 32-bit address *)
Description
Store effective address for m in register r16
Store effective address for m in register r32
Action Performed
16-bit effective address is calculated and stored in requested 16-bit
register destination.
32-bit effective address is calculated. The lower 16 bits of the address
are stored in the requested 16-bit register destination.
16-bit effective address is calculated. The 16-bit address is
zero-extended and stored in the requested 32-bit register destination.
32-bit effective address is calculated and stored in the requested
32-bit register destination.
Volume 4: Base IA-32 Instruction Reference