BNDLDX
使用地址翻译装入扩展边界
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
NP 0F 1A /r | BNDLDX bnd, mib | RM | 有效 | 有效 | 用 mib 的基数将存储在绑定表条目(BTE)中的边框装入 bnd 中,并以 mib 的索引与 BTE 中的指针值匹配为条件. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
RM
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)SIB.base (r): Address of pointer
实测开销
正在从 arch-data 加载实测数据...
说明
BNDLDX使用从基寄存器和SIB-addressing形式的内存操作数(mib)中构建的线性地址来进行地址翻译,以访问绑定表条目,有条件地将BTE中的边界加载到目的地. 如果 mib 的索引寄存器的内容与 BTE 中存储的指针值相匹配,则目标寄存器会与 BTE 中的边框一起更新.
如果指针值比较失败,则以 INIT 边框(lb = 0x0,ub = 0x0)更新目的地(注意:如前所述,上方边框使用1's suppl表示,因此,上方边框的0x0值允许访问完整的内存).
此指令不导致内存访问 mib 的线性地址, 也不导致基准引用的有效地址, 也不读写任何旗帜 。
分块覆盖适用于线性地址计算与 mib 基数,并在地址翻译时用于生成绑定表条目的地址. 默认情况下,BTE的地址被假定为线性地址. 在MIB的基座上没有进行分区检查.
MIB的底部不会被检查为犬类地址违规,因为它不能访问内存.
本指令的任何编码如果不指定基数或索引登记册,这些登记册将被视作零(恒定). 本指令的reg-reg形式仍为NOP.
SIB字节的缩放字段对这些指令没有影响,因此被忽略.
绑定寄存器可能在内存断层上部分更新. 内存操作数的加载顺序是具体的执行顺序.
行动
base := mib.SIB.base ? mib.SIB.base + Disp: 0;
ptr_value := mib.SIB.index ? mib.SIB.index : 0;
Outside 64-bit Mode
A_BDE[31:0] := (Zero_extend32(base[31:12] << 2) + (BNDCFG[31:12] <<12 );
A_BT[31:0] := LoadFrom(A_BDE );
IF A_BT[0] equal 0 Then
BNDSTATUS := A_BDE | 02H;
#BR;
FI;
A_BTE[31:0] := (Zero_extend32(base[11:2] << 4) + (A_BT[31:2] << 2 );
Temp_lb[31:0] := LoadFrom(A_BTE);
Temp_ub[31:0] := LoadFrom(A_BTE + 4);
Temp_ptr[31:0] := LoadFrom(A_BTE + 8);
IF Temp_ptr equal ptr_value Then
BND.LB := Temp_lb;
BND.UB := Temp_ub;
ELSE
BND.LB := 0;
BND.UB := 0;
FI;
In 64-bit Mode
A_BDE[63:0] := (Zero_extend64(base[47+MAWA:20] << 3) + (BNDCFG[63:12] <<12 );1
A_BT[63:0] := LoadFrom(A_BDE);
IF A_BT[0] equal 0 Then
BNDSTATUS := A_BDE | 02H;
#BR;
FI;
A_BTE[63:0] := (Zero_extend64(base[19:3] << 5) + (A_BT[63:3] << 3 );
Temp_lb[63:0] := LoadFrom(A_BTE);
Temp_ub[63:0] := LoadFrom(A_BTE + 8);
Temp_ptr[63:0] := LoadFrom(A_BTE + 16);
IF Temp_ptr equal ptr_value Then
BND.LB := Temp_lb;
BND.UB := Temp_ub;
ELSE
BND.LB := 0;
BND.UB := 0;
FI;受影响的旗帜
None.
异常
保护模式
#BR | 如果绑定目录条目无效 。 |
#UD | 如果使用 LOCK 前缀 。 如果启用 Intel MPX 时, ModRM.r/ m 编码 BND4- BND7 。 如果使用 67H 前缀和 CS.D=0. 如果使用 67H 前缀和 CS.D=1. |
#GP(0) | 如果 Bound Table 条目的目的地有效地址在 DS 区段限制之外。如果 DS 寄存器包含 NULL 段选择子. #PF(fault code) 如果 页面错误 发生的话。 |
实地址模式
#UD | 如果使用 LOCK 前缀。 如果启用 Intel MPX 时, ModRM.r/ m 编码 BND4- BND7 。 如果使用 16 位地址 。 |
#GP(0) | 如果 Bound Table 条目的目的地有效地址在 DS 段限制之外. 1. 如果使用 CPL < 3, 主管 MAWA (MAWAS) ; 该值为 0. 如果使用 CPL = 3, 用户 MAWA (MAWAU) ; 该值在 CPUID.07H.00H: ECX.MPX_MAWAU[21:17] 中列出. 见 Itel(R) 64 和 IA-32 架构软件开发者手册第 1 卷的附录 E.3.1. |
虚拟 8086 模式
#UD | 如果使用 LOCK 前缀。 如果启用 Intel MPX 时, ModRM.r/ m 编码 BND4- BND7 。 如果使用 16 位地址 。 |
#GP(0) | 如果 Bound Table 条目的目的地有效地址在 DS 段限制之外. #PF(fault code) 如果 页面错误 发生. |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
#BR | 如果绑定目录条目无效 。 |
#UD | 如果 ModRM 是 RIP 相对。 如果使用 LOCK 前缀 。 如果启用 Intel MPX 时, ModRM.r/ m 和 REX 编码为 BND4- BND15 。 |
#GP(0) | 如果内存地址(A BDE或A BTE)是非冠状的. #PF(fault code) 如果 页面错误发生. |