BNDSTX
使用地址翻译存储扩展框
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
NP 0F 1B /r | BNDSTX mib, bnd | MR | 有效 | 有效 | 在 bnd 中将边框和指针值存储在 mib 的索引寄存器中,以使用 mib 的基数进行地址翻译为约束表条目(BTE). |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
MR
SIB.base (r): Address of pointermodrm.reglecturaModRM 字节的 reg 字段(第 5-3 位)
实测开销
正在从 arch-data 加载实测数据...
说明
BNDSTX使用SIB-地址表的移动和基登记册中构建的内存操作数(mib)的线性地址来进行地址翻译以存储到绑定表条目. 源操作数 bnd中的界限写到BTE的下界和上界. Mib的索引寄存器的内容写入BTE的指针值字段.
此指令不导致内存访问 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_DEST[31:0] := (Zero_extend32(base[11:2] << 4) + (A_BT[31:2] << 2 ); // address of Bound table entry
A_DEST[8][31:0] := ptr_value;
A_DEST[0][31:0] := BND.LB;
A_DEST[4][31:0] := BND.UB;
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_DEST[63:0] := (Zero_extend64(base[19:3] << 5) + (A_BT[63:3] << 3 ); // address of Bound table entry
A_DEST[16][63:0] := ptr_value;
A_DEST[0][63:0] := BND.LB;
A_DEST[8][63:0] := BND.UB;Intel C/C++ 内在编译器
BNDSTX: _bnd_store_ptr_bounds(const void **ptr_addr, const void *ptr_val);受影响的旗帜
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) | 如果 Bunde Table 条目的目的地有效地址在 DS 段限制之外。 |
虚拟 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) 如果 页面错误 发生。 |