Visual C 编程 获取CPU信息
创始人
2024-07-24 16:20:25
0

  本文教大家用Visual C++编程,来获取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++应用程序中进行用户访问协议设置
  2. Visual C++从入门到精通
  3. Visual C++编程从基础到实践
  4. SQL Server2008中CPU性能监控
  5. 服务器升级硬件篇——CPU
  6. Linux查看cpu当前的各种信息

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...