piz*_*Guy 2 c++ linux x86 assembly cpuid
根据 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)
from<cpuid.h>
那么参数应该是什么?
你不能用那个。您需要一个可以传入的版本,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
}
Run Code Online (Sandbox Code Playgroud)