2016-11-22 12 views
0

Согласно руководству по использованию intel, инструкция выдает исключение #UD, если CPUID.(EAX=14H, ECX=0):EBX.PTWRITE [Bit 4] = 0Как проверить, является ли CPUID (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

 Смежные вопросы

  • Нет связанных вопросов^_^