Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 读取MSR MPERF的条件是什么?_Assembly_X86_X86 64_Intel_Msr - Fatal编程技术网

Assembly 读取MSR MPERF的条件是什么?

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)的其他条件是

我正在读MPERF和APERF MSR。但是,当我这样做时,机器会重新启动,可能是因为GP异常

以下是我使用的代码:

; 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)想要得到信任,他应该写一个新的答案,而不是期望我通过阅读评论来找到正确的答案。