c语言编程获取cpu信息
# include & ltstdio.h & gt
无符号int veax
无符号int vebx
无符号int vedx
无符号int vecx
//执行CPUID指令
void cpuid(无符号整数veax1)
{
_asm{
mov eax,veax1
cpuid
mov veax,eax
mov vebx,ebx
mov vecx,ecx
mov vedx,edx
}
}
//将寄存器中的ASCII码移位,以字符形式输出。
void LeftMove(无符号整型变量)
{
printf("%c ",var);
for(int I = 0;我& lt3;i++)
{
var =(var & gt;& gt;
printf("%c ",var);
}
}
//进行移位操作,将寄存器中的值作为“%d”输出。
void LM(无符号整型变量)
{
printf("%d ",var);
for(int I = 0;我& lt3;i++)
{
var =(var & gt;& gt;
printf("%d ",var);
}
}
//获取CPU厂商(EAX值为0时),依次存放在EBX、EDX、ECX。
void getCpuName()
{
cpuid(0);
left move(vebx);
left move(vedx);
left move(vecx);
printf("\
";
}
//得到CPU的商标。当EAX中的值为0x80000003和0x80000004时,分别返回16个字符组成商标。
//依次存放在EAX、EBX、ECX和EDX。
void getCpuBrand()
{
for(int j = 0;j & lt2;j++)
{
cpuid(0x 80000003+j);
left move(veax);
left move(vebx);
left move(vecx);
left move(vedx);
}
printf("\
";
}
//获取CPU的特性,参数为eax = 1,返回值放在edx和ecx中。在验证了一位edx或ecx之后,
//可以得到CPU的某个特性是否被支持。例如,edx的第32位表示是否支持MMX。
//edx的第28位表示是否支持超线程,ecx的第7位表示是否支持speed sted。
void getCpuFeature()
{//因为功能太多,不能一个一个写。必要的时候写出来。方法是一样的。
}
//获取CPU的序列号需要两步。首先,eax = 1作为参数,返回的eax存储序列号的高两个字。
//以eax = 3为参数,返回ecx和edx,从低到高存储前四个字。
void getCpuSeris()
{
cpuid(1);
LM(veax);
cpuid(3);
LM(vecx);
LM(vedx);
printf("\
";
}
void main()
{
getCpuName();
getCpuBrand();
getCpuSeris();
}