LEA

装入有效地址

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
8D /rLEA r16,mRM有效有效在注册地址r16中存储 m 的有效地址。
8D /rLEA r32,mRM有效有效在注册地址r32中存储 m 的有效地址。
REX.W + 8D /rLEA r64,mRM有效不可编码在注册地址r64中存储 m 的有效地址。

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

RM

  1. modrm.reg escrituraModRM 字节的 reg 字段(第 5-3 位)
  2. modrm.rm lecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移

实测开销

正在从 arch-data 加载实测数据...

说明

计算第二个操作数(即源操作数)的有效地址,并将其存储在第一个操作数(即目标操作数)中. 源操作数是指定的内存地址(抵消部分),其中处理器之一处理模式;目标操作数是一个通用寄存器. 地址大小和操作数大小属性影响本指令执行的动作,如下表所示. 指令的操作数大小属性由选定的寄存器决定;地址大小属性由代码段属性决定.

非64位模式 LEA 操作附地址和 操作数大小 属性

操作大小地址大小已执行的动作
1616位有效地址计算and 存储在请求的 16 位注册目的地 。
163232位有效地址被计算. request 16位注册目的地.地址的下十六位元存储于
3216位有效地址被计算. request 32位注册目的地.16 位地址为零延伸并存储在

64 位模式 LEA 操作地址和 操作数大小 属性

操作大小地址大小已执行的动作
163232位有效地址计算(使用 67H 前缀). 地址的下16位是
存储在请求的 16 位寄存器中目的地(使用 66H 前缀).
1664位64位有效地址计算(默认地址大小). 地址的下十六位数

行动

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 *)

          FI;

   ELSE IF OperandSize = 32 and AddressSize = 16

          THEN
                temp := EffectiveAddress(SRC); (* 16-bit address *)
                DEST := ZeroExtend(temp); (* 32-bit address *)

          FI;

   ELSE IF OperandSize = 32 and AddressSize = 32

          THEN
                DEST := EffectiveAddress(SRC); (* 32-bit address *)

          FI;

   ELSE IF OperandSize = 16 and AddressSize = 64

          THEN
                temp := EffectiveAddress(SRC); (* 64-bit address *)
                DEST := temp[0:15]; (* 16-bit address *)

          FI;

   ELSE IF OperandSize = 32 and AddressSize = 64

          THEN
                temp := EffectiveAddress(SRC); (* 64-bit address *)
                DEST := temp[0:31]; (* 16-bit address *)

          FI;

   ELSE IF OperandSize = 64 and AddressSize = 64

          THEN
                DEST := EffectiveAddress(SRC); (* 64-bit address *)

          FI;
FI;

受影响的旗帜

None.

异常

保护模式
#UD如果 源操作数 不是 内存位置。如果使用 LOCK 前缀 。
实地址模式
与保护模式中的例外相同.
虚拟 8086 模式
与保护模式中的例外相同.
兼容模式
与保护模式中的例外相同.
64 位模式
与保护模式中的例外相同.

来源