Assembly 读取MSR MPERF的条件是什么?
我正在读MPERF和APERF MSR。但是,当我这样做时,机器会重新启动,可能是因为GP异常 以下是我使用的代码:Assembly 读取MSR MPERF的条件是什么?,assembly,x86,x86-64,intel,msr,Assembly,X86,X86 64,Intel,Msr,我正在读MPERF和APERF MSR。但是,当我这样做时,机器会重新启动,可能是因为GP异常 以下是我使用的代码: ; Read MPERF register mov ecx, 0xe7 rdmsr 代码在rdmsr上中断。我有一个英特尔哈斯韦尔处理器。我在长模式下跑步 我很确定我运行的是环0,因为我运行的是我自己的操作系统。此外,如果我这样做: ; Read PAT register mov ecx, 0x277 rdmsr 它毫无例外地起作用 读取此特定寄存器(MPERF)的其他条件是
; Read MPERF register
mov ecx, 0xe7
rdmsr
代码在rdmsr上中断。我有一个英特尔哈斯韦尔处理器。我在长模式下跑步
我很确定我运行的是环0,因为我运行的是我自己的操作系统。此外,如果我这样做:
; Read PAT register
mov ecx, 0x277
rdmsr
它毫无例外地起作用
读取此特定寄存器(MPERF)的其他条件是什么 我猜在您的情况下,所需的MSR被熔断或不受设计支持,
CPUID
可以批准它。
作为计算核心频率的备选方案,请参考,在回答中有一个不依赖MPERF MSR寄存器的配方我不知道IOPL。但是,我已经在8042控制器上使用IN/OUT指令了,所以我很高兴我真的在环0中。@Baptiste Wicht-cool your own OS:),我喜欢它,所以在这种情况下,可能这个寄存器被熔断了,我们需要通过读取CPUID来检查它是否已启用(我猜:)我使用CPUID进行了检查,实际上硬件协调已禁用,因此我无法获得APERF/MPERF。我想要这些来计算频率(max*(aperf/mperf))。有没有其他的方法来计算当前的频率?请看一下,特别是最后一篇文章中的最后一条评论。也请考虑接受我的回答,因为我的第一个评论显示了为什么不能从MPERF读取。MSR@BaptisteWicht这个答案是错的!你不应该接受它。如果回答者(猫Shmil)想要得到信任,他应该写一个新的答案,而不是期望我通过阅读评论来找到正确的答案。