c++

// cpu_information.cpp : 定义控制台应用程序的入口点。
//
/*
   获取cpu的信息相关的代码
*/
#include "stdafx.h"
#include "windows.h"
#include "iostream"
#include "string"
using namespace std;




//用来存储信息
//DWORD 代表 unsigned long
DWORD  deax;
DWORD  debx;
DWORD decx;
DWORD dedx;




void ExeCPUID(DWORD veax)//初始化cpu
{
__asm
{
mov eax, veax
cpuid
mov deax, eax
mov debx, ebx
mov decx,ecx
mov  dedx ,edx
}
}


long  GetCPUFreq()//获取cpu的频率
{
int start1, start2;
__asm rdtsc
    __asm mov start1,eax
Sleep(50);
__asm rdtsc
__asm mov start2,eax
return(start2 - start1) / 50000;
}


string GetManID()//获取制造商信息
{
//存储制造商信息
char ID[25];
//先清空数组ID
memset(ID,0,sizeof(ID));
//初始化
ExeCPUID(0);
//memccpy(ID +0,&debx,4);
memcpy(ID + 0, &debx, 4);
memcpy(ID+4,&dedx,4);
memcpy(ID+8,&decx,4);
return string(ID);
}


string  GetCPUType()//获取cpu的型号
{
const DWORD id = 0x80000002;//从 0x80000002开始到0x800000024结束
char CPUType[49];//用来存储cpu型号信息
memset(CPUType, 0, sizeof(CPUType));//初始化型号
for (DWORD t = 0; t < 3;t++)
{
ExeCPUID(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 _tmain(int argc, _TCHAR* argv[])
{
cout << "CPU的信息如下:" << endl;
cout << "cpu主频:" << GetCPUFreq() << endl;
cout << "cpu制造商:" << GetManID() << endl;
cout << "cpu型号:" << GetCPUType() << endl;
cin.get();
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值