2016-11-22 9 views
0

インテリジェントリファレンスマニュアルによれば、命令が#UD例外をスローする場合CPUID.(EAX=14H, ECX=0):EBX.PTWRITE [Bit 4] = 0CPUIDが(EAX = 14H、ECX = 0)かどうかを確認するにはどうすればいいですか?

これらの値を確認するにはどうすればよいですか?

私がint __get_cpuid (unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx)<cpuid.h>から使用すると、何が引数になるはずですか?

答えて

2

これは使用できません。 ecxも渡すことができるバージョンが必要です。ゼロでなければならないからです。可能な場合は__cpuid_countを使用できます。たとえば、

unsigned eax, ebx, ecx, edx; 
if (__get_cpuid(0x00, &eax, &ebx, &ecx, &edx) == 0) { 
    // cpuid not supported 
} 
if (eax < 0x14) { 
    // leaf 0x14 not supported 
} 
__cpuid_count(0x14, 0x00, eax, ebx, ecx, edx); 
if ((ebx & 0x10) == 0) { 
    // PTWRITE not supported 
} 
+0

修正してください。 ((ebx&0x10)== 0) サポートされているにもかかわらず、私のコードが私に不正な命令例外を与えている理由を理解するのに時間を費やしました。最後に別のコンパイラでコードをコンパイルすると、演算子の優先順位に関する警告が表示されます。 lol – pizzaEatingGuy

+0

おっと、申し訳ありません。 – Jester

関連する問題