我正在嘗試使用CPUID,但附加了一些字符串。根據sandpile.org's CPUID page,如果MISC_ENABLE.LCMV標誌設置爲0,CPUID標準功能0000_0004h及以上纔會起作用。該標誌是型號專用寄存器(MSR)1A0的位22。顯然,這個限制是由於Windows NT中的一個錯誤(感謝讓我更容易,Microsoft;))。CPUID:爲什麼必須爲某些功能將MISC_ENABLE.LCMV設置爲0?我可以暫時覆蓋它嗎?
我可以測試LCMV標誌的存在下用CPUID 0000_0001h(ECX標誌,位3)。假設它存在,它究竟是什麼,爲什麼它對CPUID有這樣的影響? MSR 1A0是一個讀/寫寄存器還是隻讀?這樣的專用寄存器如何使用匯編代碼讀取/寫入?
如果寄存器在技術上是讀/寫,是安全的復位位22到0的CPUID指令的時間,使其恢復到原來的設置之前?或者,如果它設置不正確(即啓用),我是不是很容易被搞砸?
最後,sandpile使用措辭「只有當MISC_ENABLE.LCMV設置爲0時才啓用此級別。這是由於Windows NT的錯誤。」如果由於這個原因特別禁用了一堆標準級別,這是否會反映在CPUID級別0000_000h的eax寄存器的輸出中(支持的最高標準級別)?
呼...我認爲這就是它。
太棒了。非常感謝!你的答案實際上也是最好的情況,因爲這意味着這個位不會被設置,除非它真的需要,例如,在Windows NT中。我擔心它表示一些(主要是正交的)處理器功能被激活,而這在Windows NT上發生的並不是CPUID。我很高興,情況並非如此。 :) –