操作碼 |
指令 |
說明 |
8D /r |
LEA r16,m |
將 m 的有效地址儲存到暫存器 r16 |
8D /r |
LEA r32,m |
將 m 的有效地址儲存到暫存器 r32 |
計算第二個運算元(源運算元)的有效地址,並將它儲存到第一個運算元(目標運算元)。源運算元是使用處理器定址模式之一指定的記憶體地址(偏移量部分);目標運算元是通用暫存器。地址大小與運算元大小屬性會影響此指令執行的操作,具體如下表所示。指令的運算元大小屬性由所選的暫存器確定;地址大小屬性由程式碼段的屬性確定。
運算元大小 |
地址大小 |
執行的操作 |
16 |
16 |
計算 16 位有效地址,並將它儲存到所需的 16 位目標暫存器。 |
16 |
32 |
計算 32 位有效地址。地址的低 16 位儲存到所需的 16 位目標暫存器。 |
32 |
16 |
計算 16 位有效地址。對 16 位地址進行零擴充套件,並將它儲存到所需的 32 位目標暫存器。 |
32 |
32 |
計算 32 位有效地址,並將它儲存到所需的 32 位目標暫存器。 |
根據源運算元的大小屬性與符號引用,不同的彙編器可能會使用不同的演算法。
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;
無。
#UD - 如果源運算元不是記憶體位置。
#UD - 如果源運算元不是記憶體位置。
#UD - 如果源運算元不是記憶體位置。