设为首页 加入收藏

TOP

Visual C++编程 获取CPU信息
2013-10-07 14:05:15 来源: 作者: 【 】 浏览:65
Tags:Visual 编程 获取 CPU 信息

本文教大家用Visual C++(www.cppentry.com)编程(www.cppentry.com),来获取CPU信息,以下是详细内容:

这里主要通过利用CPUID 汇编指令(机器码:0FH A2H, 如果你的编译器不支持CPUID 指令,只有emit 机器码了)来获取CPU信息, 该指令可以被如下CPU识别:

Intel 486 以上的CPU,

Cyrix M1 以上的CPU,

AMD Am486 以上的CPU

以下是具体操作步骤与所能获得CPU的信息情况:

一、通过取CPU OEM 字符串, 可判断CPU 厂商

步骤:先让EAX=0, 再调用CPUID

1、Inel的CPU将返回以下结果:

EBX:756E6547H 'Genu'

EDX:49656E69H 'ineI'

ECX:6C65746EH 'ntel'

EBX,EDX,ECX 将连成"GenuineIntel", 真正的Intel。

2、Cyrix 的CPU 将返回:

EBX:43797269H

EDX:78496E73H

ECX:74656164H

"CyrixInstead","Cyrix 来代替"。

3、AMD 的CPU 将返回:

EBX:41757468H

EDX:656E7469H

ECX:63414D44H

"AuthenticAMD", 可信的AMD。

在Windows98中,用右键单击"我的电脑",选择" 属性- 常规"在计算机描述处就可看见CPU OEM 字符串。

二、检测CPU 到底是几86, 是否支持MMX

步骤:先让EAX=1,再调用CPUID

EAX的8到11位就表明是几86

3 - 386

4 - i486

5 - Pentium

6 - Pentium Pro Pentium II

2 - Dual Processors

EDX 的第0位:有无FPU

EDX的第23位:CPU是否支持IA MMX,很重要啊!如果你想用那57条新增的指令,先检查这一位吧,否则就等着看Windows 的"该程序执行了非法指令,将被关 闭" 吧。

三、检测是否P6架构

步骤:先让EAX=1,再调用CPUID

如果AL=1,就是Pentium Pro 或Pentium II

四、检测AMD的CPU信息

步骤:先让EAX=80000001H,再调用CPUID

如果EAX=51H, 是AMD K5

如果EAX=66H, 是K6

EDX第0 位: 是否有FPU( 多余的 !谁用过没FPU的K5,K6 )

EDX 第23 位,CPU是否支持MMX,

具体程序如下:

  1. //------CPUID Instruction Demo Program------------  
  2.     #include  
  3.     #include  
  4.     #pragma hdrstop  
  5.     //------------------------------------------------  
  6.     #pragma inline  
  7.     #pragma argsused  
  8.     int main(int argc, char **argv)  
  9.     {  
  10.     char OEMString[13];  
  11.     int iEAXValue,iEBXValue,iECXValue,iEDXValue;  
  12.     _asm {  
  13.     mov eax,0  
  14.     cpuid  
  15.     mov DWORD PTR OEMString,ebx  
  16.     mov DWORD PTR OEMString+4,edx  
  17.     mov DWORD PTR OEMString+8,ecx  
  18.     mov BYTE PTR OEMString+12,0  
  19.     }  
  20.     cout< < "This CPU 's OEM String is:"< < OEMString< < endl;  
  21.     _asm {  
  22.     mov eax,1  
  23.     cpuid  
  24.     mov iEAXValue,eax  
  25.     mov iEBXValue,ebx  
  26.     mov iECXValue,ecx  
  27.     mov iEDXValue,edx  
  28.     }  
  29.     if(iEDXValue&0x800000)  
  30.     cout < < "This is MMX CPU"< < endl;  
  31.     else  
  32.     cout < < "None MMX Support."< < endl;  
  33.     int iCPUFamily=(0xf00 & iEAXValue) > >8;  
  34.     cout < < "CPU Family is:"< < iCPUFamily< < endl;  
  35.     _asm{  
  36.     mov eax,2  
  37.     CPUID  
  38.     }  
  39.     if(_AL==1)  
  40.     cout < < "Pentium Pro or Pentium II Found";  
  41.     getch();  
  42.     return 0;  
  43.     }  

【编辑推荐】

  1. Visual C++(www.cppentry.com)应用程序中进行用户访问协议设置
  2. Visual C++(www.cppentry.com)从入门到精通
  3. Visual C++(www.cppentry.com)编程(www.cppentry.com)从基础到实践
  4. SQL Server2008中CPU性能监控
  5. 服务器升级硬件篇——CPU
  6. Linux查看cpu当前的各种信息
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据库在C++程序中使用方法 下一篇一个实用主义者的观点:如何学习..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: