UMONITOR
用户级别设置监视器地址
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
F3 0F AE /6 | UMONITOR r16/r32/r64 Op/En Tuple Operand 1 A N/A ModRM:r/m (r) | A | 有效 | 有效 | 设置由硬件监控的线性地址范围并激活显示器。地址范围应该是回写内存缓存类型。地址包含在 r16/r32/r64中。指令 操作数 Encoding1 Op desend 2 操作数 3 操作数 4 N/A N/A N/A |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
实测开销
正在从 arch-data 加载实测数据...
说明
UMONITOR指令臂使用源寄存器中指定的地址地址地址监测硬件(通过使用CPUID.05H可以确定存储操作的监测硬件检查的地址范围). 存储到指定地址范围内的地址会触发监控硬件. 监视器硬件状态由UMWAIT使用.
来源登记册的内容是一个有效的地址。 默认情况下,DS段用于创建被监控的线性地址. 可使用线段覆盖 。 地址范围必须使用回写类型的内存. 只有回写内存才能保证正确触发监控硬件. 关于确定用于防止假醒的地址范围的额外信息,见Intel(R)64和IA-32架构软件开发者手册第3A卷第11章"多处理器管理".
UMONITOR指令作为其他内存交易的负载操作命令. 该指令受许可检查以及与一个字节负载相关的故障的约束. 像负载一样,UMONITOR在页面表格中设置A位而不是D位.
UMONITOR和UMWAIT在CPUID.07H.00H:ECX.WAITPKG[5]被列举为1. UMONITOR和UMWAIT可以在任何特权级别执行. 除源寄存器的宽度外,指令的操作在非64位模式和64位模式下是相同的.
UMONITOR不与遗留的MWAIT指令互操作. 如果 UMONITOR 在执行 MWAIT 之前被执行,并且在最近执行遗留的 MONITOR 指令之后, MWAIT 将不会进入优化状态. 将继续执行MWAIT之后的指示。
UMONITOR 指令在一个交易区域内使用时会导致交易中止。
源寄存器的宽度(16b,32b或64b)由有效地址宽度决定,以标准方式受到机器模式设置和67个前缀的影响.
行动
UMONITOR sets up an address range for the monitor hardware using the content of source register as an effective
address and puts the monitor hardware in armed state. A store to the specified address range will trigger the
monitor hardware.Intel C/C++ 内在编译器
UMONITOR void _umonitor(void *address);数字例外
None.
- 联合国 ModR/M字节的Mod字段必须有值11B.
异常
保护模式
#GP(0) | 如果指定的片段不是SS,而源寄存器不在指定的片段限制之内。如果指定的片段寄存器包含一个 NULL 片段选择器 。 |
#SS(0) | 如果指定的片段是SS,而源寄存器在SS片段限制之外. #PF(fault-code) for a 页面错误. |
#UD | 如果 CPUID.07H.00H: ECX.WAITPKG[5]=0. 如果使用 LOCK 前缀。 真正的地址模式例外 |
#GP | 如果指定的段不是SS,而源寄存器在有效地址空间之外从0到FFFFH. |
#SS | 如果指定的段是SS,而源寄存器则位于有效地址空间之外,从0到FFFFH. |
#UD | 如果 CPUID.07H.00H:ECX.WAITPKG[5]=0. 如果使用 LOCK 前缀,虚拟 8086 模式例外与真实地址模式相同;另外: #PF(fault-code) for a 页面错误. |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
#GP(0) | 如果指定的部分不是SS,且线性地址是非冠状的. |
#SS(0) | 如果指定的片段是SS,而源寄存器是非冠状的. #PF(fault-code) for a 页面错误. |
#UD | 如果 CPUID.07H.00H:ECX.WAITPKG[5]=0. 如果使用 LOCK 前缀. |