Как проверить, если CPUID.(EAX=14H, ECX=0)?

Согласно справочному руководству Intel, инструкция выдает исключение #UD, если CPUID.(EAX=14H, ECX=0):EBX.PTWRITE [Bit 4] = 0

Как мне проверить эти значения?

Если я использую int __get_cpuid (unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx) от <cpuid.h> тогда какие должны быть аргументы?

1 ответ

Вы не можете использовать это. Вам нужна версия, где вы можете пройти 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
}
Другие вопросы по тегам