我正在研究一个 Linux 内核模块,我需要在其中读取处理器的 CPUID 以查看是否存在某个功能。芯片组文档指出:
“当 CPUID (EAX=14H, ECX=0):ECX[bit 0] 或 CPUID.(EAX=14H, ECX=0):ECX[bit2] 时支持访问此 MSR”
但是我正在使用以下代码来读取 CPUID:
int func()
{
int a, b;
for (a = 0; a < 5; a++)
{
__asm__("cpuid"
:"=a"(b) // EAX into b (output)
:"0"(a) // a into EAX (input)
:"%ebx","%ecx","%edx"); // clobbered registers
printk("The code %i gives %llx\n", a, b);
}
return 0;
}
改编自:https ://en.wikipedia.org/wiki/CPUID#EAX.3D1:_Processor_Info_and_Feature_Bits
但我不知道它是如何工作的,也不知道我正在阅读哪些价值观。有人可以向我解释这段代码是如何工作的,以及我如何阅读上述 CPUID 寄存器以及 EAX=80000008h。
谢谢