2013-10-15 35 views
1

我正在嘗試讀取MPERF和APERF MSR。但是,當我這樣做時,機器會重新啓動,可能是因爲GP異常。閱讀MSR MPERF的條件是什麼?

這裏是我使用的代碼:

; Read MPERF register 
mov ecx, 0xe7 
rdmsr 

代碼打破上RDMSR。我有一個英特爾Haswell處理器。我在長時間模式下運行。

我很確定我在Ring 0中運行,因爲我正在運行我自己的操作系統。此外,如果我這樣做:

; Read PAT register 
mov ecx, 0x277 
rdmsr 

它毫無例外地工作。

讀取此特定寄存器(MPERF)的其他條件是什麼?

回答

2

我想你的情況下所需的MSR是融合了或不支持設計,CPUID可以批准它。 作爲計算核心頻率的替代方法,請參閱Finding out the CPU clock frequency (per core, per processor),在答案中有一個不依賴於MPERF MSR寄存器的配方

+0

我不知道IOPL。但是,我已經在使用8042控制器的IN/OUT指令了,所以我確實在Ring 0中。 –

+0

此外,我嘗試在0x277上使用rdmsr,它工作正常。 –

+0

@Baptiste Wicht - 酷你自己的操作系統:),我喜歡它,所以在這種情況下*也許*這個寄存器是融合了,需要通過讀取CPUID檢查其啓用我猜 –