UMONITOR

用户级别设置监视器地址

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
F3 0F AE /6UMONITOR 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

  1. modrm.rm lecturaModRM 字节的 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.

  1. 联合国 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 前缀.

来源