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();

}