如何检查CPUID。(EAX = 14H,ECX = 0)?

时间:2016-11-22 01:18:13

标签: linux assembly cpuid

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

,该指令会引发#UD异常

如何查看这些值?

如果我使用int __get_cpuid (unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx)中的<cpuid.h>那么参数应该是什么?

1 个答案:

答案 0 :(得分:3)

你无法使用它。您需要一个可以传递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
}