BNDMOV

移动边界

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
66 0F 1A /rBNDMOV bnd1, bnd2/m64RM不可编码有效从 bnd2/m64 移动下方和上方的绑定值到绑定值 bnd1 。
66 0F 1A /rBNDMOV bnd1, bnd2/m128RM有效不可编码从 bnd2/m128 移动下方和上方的绑定值到绑定值 bnd1 。
66 0F 1B /rBNDMOV bnd1/m64, bnd2MR不可编码有效从 bnd2 移动到 bnd1/m64 的下行和上行 。
66 0F 1B /rBNDMOV bnd1/m128, bnd2MR有效不可编码从 bnd2 移动下方和上方的绑定值到绑定值 bnd1/m128 。

操作数编码

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

RM

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

MR

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

实测开销

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

说明

BNDMOV从源操作数(第二个操作数)移动一对下限和上限值到目的地(第一个操作数). 每个操作都是128位移动. 例外与MOV指令相同. 以64位模式加载/存储边框的内存格式见图3-5.

                     Upper Bound (UB)             Lower Bound (LB)                     BNDMOV to memory in 64-bit mode
                     16                                             8                                           0 Byte offset
             Upper Bound (UB)                     Lower Bound (LB)                     BNDMOV to memory in 32-bit mode
             16                                                     8
                                                                                    4      0 Byte offset

图3-5。 BNDMOV 内存布局到/ 从内存

此指令不更改旗帜 。

行动

BNDMOV register to register
DEST.LB := SRC.LB;
DEST.UB := SRC.UB;


BNDMOV from memory
IF 64-bit mode THEN

          DEST.LB := LOAD_QWORD(SRC);
          DEST.UB := LOAD_QWORD(SRC+8);
    ELSE
          DEST.LB := LOAD_DWORD_ZERO_EXT(SRC);
          DEST.UB := LOAD_DWORD_ZERO_EXT(SRC+4);
FI;

BNDMOV to memory
IF 64-bit mode THEN

          DEST[63:0] := SRC.LB;
          DEST[127:64] := SRC.UB;
    ELSE
          DEST[31:0] := SRC.LB;
          DEST[63:32] := SRC.UB;
FI;

Intel C/C++ 内在编译器

BNDMOV void * _bnd_copy_ptr_bounds(const void *q, const void *r);

受影响的旗帜

None.

异常

保护模式
#UD如果LOCK前缀被使用,但目的地不是内存操作数如果 ModRM.r/m 编码BND4-BND7当信息MPX启用。如果67H前缀没有使用,CS.D=0. 如果67H使用前缀和CS.D=1.
#SS(0)若内存操作数有效地址在SS段限制之外.
#GP(0)如果 内存操作数 有效地址位于 CS,DS,ES,FS 或 GS 区段限制之外,如果 目标操作数 指向不可写区段 如果 DS,ES,FS,或 GS 区段登记簿包含一个 NULL 段选择子.
#AC(0)如果启用对齐检查,并在CPL为3. #PF(fault code)时进行不对齐的内存引用,如果发生页面错误.
实地址模式
#UD如果使用 LOCK 前缀, 但目的地不是 内存操作数。 如果启用 Intel MPX 时, ModRM.r/m 编码 BND4- BND7 。 如果使用 16 位地址 。
#GP(0)如果内存操作数有效地址在CS,DS,ES,FS或GS段限制之外.
#SS若内存操作数有效地址在SS段限制之外.
虚拟 8086 模式
#UD如果使用 LOCK 前缀, 但目的地不是 内存操作数。 如果启用 Intel MPX 时, ModRM.r/m 编码 BND4- BND7 。 如果使用 16 位地址 。
#GP(0)如果内存操作数有效地址在CS,DS,ES,FS或GS段限制之外.
#SS(0)若内存操作数有效地址在SS段限制之外.
#AC(0)如果启用对齐检查,并在CPL为3. #PF(fault code)时进行不对齐的内存引用,如果发生页面错误.
兼容模式
与保护模式中的例外相同.
64 位模式
#UD如果使用LOCK前缀,但目的地不是内存操作数. 如果启用Intel MPX时,ModRM.r/m和REX编码为BND4-BND15.
#SS(0)如果引用SS部分的内存地址是非冠状的.
#GP(0)如果内存地址是非冠状的.
#AC(0)如果启用对齐检查,并在CPL为3. #PF(fault code)时进行不对齐的内存引用,如果发生页面错误.

来源