首页 > 编程语言 > 详细

C++ 嵌入汇编 获取CPU信息

时间:2014-04-16 16:17:25      阅读:531      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
 1 #include "windows.h" 
 2 #include "iostream"
 3 #include "string"
 4 
 5 using namespace std;
 6 
 7 //用来存储信息
 8 DWORD deax;
 9 DWORD debx;
10 DWORD decx;
11 DWORD dedx;
12 
13 void ExeCPUID(DWORD veax)//初始化CPU
14 {
15 __asm
16 {
17    mov eax,veax
18     cpuid
19     mov deax,eax
20     mov debx,ebx
21     mov decx,ecx
22     mov dedx,edx
23 }
24 }
25 
26 long GetCPUFreq()//获取CPU频率,单位: MHZ
27 {
28 int start1,start2;
29 _asm rdtsc
30    _asm mov start1,eax
31    Sleep(50);
32 _asm rdtsc
33    _asm mov start2,eax
34    return (start2-start1)/50000;
35 }
36 
37 string GetManID()//获取制造商信息
38 {
39 char ID[25];//存储制造商信息
40 memset(ID,0,sizeof(ID));//先清空数组 ID
41 ExeCPUID(0);//初始化
42 memcpy(ID+0,&debx,4);//制造商信息前四个字符复制到数组
43 memcpy(ID+4,&dedx,4);//中间四个
44 memcpy(ID+8,&decx,4);//最后四个
45 //如果返回 char * ,会出现乱码;故返回 string 值
46 return string(ID);
47 }
48 
49 string GetCPUType()
50 {
51 const DWORD id = 0x80000002; //从0x80000002开始,到0x80000004结束
52 char CPUType[49];//用来存储CPU型号信息
53 memset(CPUType,0,sizeof(CPUType));//初始化数组
54 
55 for(DWORD t = 0 ; t < 3 ; t++ )
56 {
57    ExeCPUID(id+t);
58    //每次循环结束,保存信息到数组
59    memcpy(CPUType+16*t+ 0,&deax,4);
60    memcpy(CPUType+16*t+ 4,&debx,4);
61    memcpy(CPUType+16*t+ 8,&decx,4);
62    memcpy(CPUType+16*t+12,&dedx,4);
63 }
64 
65 return string(CPUType);
66 }
67 
68 void main() 
69 { 
70 cout<<"本机CPU信息如下:"<<endl;
71 cout<<"CPU 主 频: "<<GetCPUFreq()<<" MHZ"<<endl;
72 cout<<"CPU 制造商: "<<GetManID()<<endl;
73 cout<<"CPU 型 号: "<<GetCPUType()<<endl;
74 cin.get();
75 
76 }
bubuko.com,布布扣

 

 

C++ 嵌入汇编 获取CPU信息,布布扣,bubuko.com

C++ 嵌入汇编 获取CPU信息

原文:http://www.cnblogs.com/msdn1433/p/3666706.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!