2016-11-22 86 views
0

根据intel参考手册,如果CPUID.(EAX=14H, ECX=0):EBX.PTWRITE [Bit 4] = 0如何检查CPUID。(EAX = 14H,ECX = 0)?

指令会抛出#UD异常如何检查这些值?

如果我使用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) 我花了几天的时间搞清楚为什么我的代码给了我一个非法的指令异常,即使它被支持。最后用不同的编译器编译你的代码,它给了我一个关于运算符优先级的警告。大声笑 – pizzaEatingGuy

+0

哎呀,对不起。 – Jester

相关问题