CPUIDを使おうとしていますが、文字列が添付されています。sandpile.orgのCPUIDページによると、CPUID標準関数0000_0004h以上は、MISC_ENABLE.LCMVフラグが0に設定されている場合にのみ機能します。このフラグはモデル固有レジスタ(MSR)1A0のビット22です。どうやら、この制限はWindows NTのバグによるものです(Microsoft、私にとって物事を簡単にしてくれてありがとう;))。
CPUID 0000_0001h(ecxフラグ、ビット3)のLCMVフラグの存在をテストできます。それが存在すると仮定すると、それは正確には何のためにあり、なぜそれがCPUIDにそのような影響を与えるのですか?MSR 1A0は読み取り/書き込みレジスタですか、それとも読み取り専用ですか?このような専用レジスタは、アセンブリコードを使用してどのように読み書きされますか?
レジスタが技術的に読み取り/書き込みの場合、CPUID命令の期間中、ビット22を0にリセットしてから、元の設定に戻すのは安全ですか?それとも、正しく設定されていない(つまり有効になっている)場合、私はかなり困惑していますか?
最後に、sandpileは、「このレベルは、MISC_ENABLE.LCMVが0に設定されている場合にのみ有効になります。これは、WindowsNTのバグが原因です。」という表現を使用しています。この理由で多数の標準レベルが特に無効になっている場合、それはCPUIDレベル0000_000hのeaxレジスタ(サポートされている最大標準レベル)の出力に反映されますか?
ふぅ...それだけだと思います。