#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
DWORD deax;
DWORD debx;
DWORD decx;
DWORD dedx;
void GetCpuID(DWORD veax)
{
__asm
{
mov eax,veax
cpuid
mov deax,eax
mov debx,ebx
mov decx,ecx
mov dedx,edx
}
}
long GetCpuFreq()
{
//RDTSC - 读取时间标签计数器
int str1,str2;
__asm rdtsc
__asm mov str1,eax;
Sleep(50);
__asm rdtsc
_asm mov str2,eax
return (str2 - str1)/50000;
}
//获取CPU制造商信息
string GetManIDInfo()
{
char ID[25];
memset(ID,0,sizeof(ID)); //清空数组ID中的数据信息
GetCpuID(0); //初始化
memcpy(ID+0,&debx,4); //制造商信息的前四个字符复制到数组中
memcpy(ID+4,&dedx,4); //制造商信息的中间四个字符复制到数组中
memcpy(ID+8,&decx,4); //制造商信息的最后四个字符复制到数组中
return string(ID);
}
//获取CPU的型号
string GetCpuType()
{
const DWORD id = 0x80000002; //开始地址
char CPUType[49]; //用来存储CPU型号信息
memset(CPUType,0,sizeof(CPUType)); //初始化
for(DWORD t = 0; t < 3; t++)
{
GetCpuID(id+t);
memcpy(CPUType+16*t+0,&deax,4);
memcpy(CPUType+16*t+4,&debx,4);
memcpy(CPUType+16*t+8,&decx,4);
memcpy(CPUType+16*t+12,&dedx,4);
}
return string(CPUType);
}
int main()
{
cout<<"本地计算机CPU结构信息如下:"<<endl;
cout<<"CPU 主 频:"<<GetCpuFreq()<<"MHZ"<<endl; //频率为什么还会变动?
cout<<"CPU 制作商:"<<GetManIDInfo<<endl; //制作商信息也成了数字?
cout<<"CPU 型 号:"<<GetCpuType()<<endl;
system("pause");
return 0;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!