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