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

 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 }

 

 
posted @ 2014-04-15 17:12  飘零枫叶  阅读(506)  评论(0编辑  收藏  举报