cpuid指令需要有输入寄存器、输出寄存器,这些信息是编译器/优化器不知道的,需要在嵌入汇编时自己用指令处理(在调用cpuid指令前用push保存,在调用完cpuid并获取结果后用pop恢复),不要破坏掉输出寄存器中的原值,否则行为不可预期。
比较方便的是用intrinsic函数,这样函数的输入、输出都由编译器自己搞定了。
#include <cpuid.h>
...
int eax, ebx, ecx, edx;
char vendor[13];
__cpuid(0, eax, ebx, ecx, edx);
memcpy(vendor, &ebx, 4);
memcpy(vendor + 4, &edx, 4);
memcpy(vendor + 8, &ecx, 4);
vendor[12] = '\0';
printf("CPU: %s\n", vendor);
出处:
https://stackoverflow.com/questions/17758409/intrinsics-for-cpuid-like-informations--
修改:z16166 FROM 125.35.121.*
FROM 125.35.121.*