MONITOR

设置监视器地址

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
0F 01 C8MONITORZO有效有效设置线性地址范围,由硬件监控,激活显示器。地址范围应该是回写内存缓存类型。地址是 DS:RAX/EAX/AX。

实测开销

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

说明

MONITOR指令臂使用EAX指定的地址地址地址监测硬件(存储操作的监测硬件检查可以通过使用CPUID来确定的地址范围). 存储到指定地址范围内的地址会触发监控硬件. 监视器硬件状态由MWAIT使用.

地址在RAX/EAX/AX中指定,大小基于编码指令的有效地址大小. 默认情况下,DS段用于创建被监控的线性地址. 可使用线段覆盖 。

ECX和EDX也被使用. 他们向MONITOR传递其他信息. ECX指定可选扩展. EDX指定了可选提示;它不会改变指令的建筑行为. 对于Pentium 4处理器(家族15,型号3),没有定义扩展或提示. EDX中未定义的提示被处理器忽略;ECX中未定义的扩展引起了一般的保护断层.

地址范围必须使用回写类型的内存. 只有回写内存才能正确触发监控硬件. 关于确定用于防止假醒的地址范围的额外信息,见Intel(R)64和IA-32架构软件开发者手册第3A卷第11章"多处理器管理".

MONITOR指令作为其他内存交易的负载操作命令. 该指令受许可检查以及与一个字节负载相关的故障的约束. 像负载一样,MONITOR在页面表格中设置A位而不是D位.

CPUID.01H:ECX.MONITOR[3]表示处理器中MONITOR和MWAIT的可用性. 设定时, MONITOR 只能在特权级别 0 执行(在任何其他特权级别上使用会导致无效的-操作码例外). 操作系统或系统BIOS可以通过使用IA32 MISC ENABLE MSR来禁用此指令;禁用MONITOR清除CPUID特征旗,并导致执行生成无效的-操作码例外.

该指令的操作在非64位模式和64位模式中是相同的.

行动

MONITOR sets up an address range for the monitor hardware using the content of EAX (RAX in 64-bit mode) as an effective address
and puts the monitor hardware in armed state. Always use memory of the write-back caching type. A store to the specified address
range will trigger the monitor hardware. The content of ECX and EDX are used to communicate other information to the monitor
hardware.

Intel C/C++ 内在编译器

MONITOR void _mm_monitor(void const *p, unsigned extensions,unsigned hints);

数字例外

None.

异常

保护模式
#GP(0)如果 EAX 中的值在 CS,DS,ES,FS 或 GS 片段限制之外,则使用 DS,ES,FS 或 GS 寄存器访问内存,并包含一个 NULL 段选择子. 如果 ECX 0.
#SS(0)如果 EAX 中的值在 SS 段限制之外. #PF(fault-code) for a 页面错误.
#UD如果 CPUID.01H: ECX.MONITOR[3] = 0. 如果当前特权级别不是 0. Real 地址模式例外
#GP如果使用CS,DS,ES,FS或GS寄存器来访问内存,且EAX中的值在有效地址空间之外从0到FFFFH. 如果ECX 0.
#SS如果使用SS寄存器访问内存,且EAX中的值在有效地址空间之外从0到FFFFH.
#UD若CPUID.01H:ECX.MONITOR[3]=0. 虚拟8086模式例外#UDThe MONITOR指令在虚拟 8086 模式中不被承认(即使CPUID.01H:ECX.MONITOR[3]=1.
兼容模式
与保护模式中的例外相同.
64 位模式
#GP(0)如果在CS,DS,ES,FS,或GS片断中的操作数的线性地址是非冠状的. 若RCX 0.
#SS(0)如果使用SS寄存器来访问内存,且EAX中的值为非冠状. #PF(fault-code) for a 页面错误.
#UD如果当前特权级别不是0. 如果 CPUID.01H: ECX.MONITOR[3]=0.

来源