使用Visual C++编程取得CPU信息

2016-02-19 19:04 8 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的使用Visual C++编程取得CPU信息,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】

利用利用CPUID 汇编指令(机器码:0FH A2H, 如果你的编译器不支持CPUID 指令,只有emit 机器码了), 该指令可以被如下CPU识别:
  Intel 486 以上的CPU,

  Cyrix M1 以上的CPU,

  AMD Am486 以上的CPU

  (1) 取CPU OEM 字符串, 判断CPU 厂商

  先让EAX=0, 再调用CPUID

  Inel的CPU将返回:

  EBX:756E6547H 'Genu'

  EDX:49656E69H 'ineI'

  ECX:6C65746EH 'ntel'

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

  Cyrix 的CPU 将返回:

  EBX:43797269H

  EDX:78496E73H

  ECX:74656164H

  "CyrixInstead","Cyrix 来代替"。

 AMD 的CPU 将返回:  

  EBX:41757468H

  EDX:656E7469H

  ECX:63414D44H

  "AuthenticAMD", 可信的AMD。

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

 (2)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 的"该程序执行了非法指令,将被关 闭" 吧。

  (3) 专门检测是否P6架构

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  先让EAX=1,再调用CPUID

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

  (4) 专门检测AMD的CPU信息

  先让EAX=80000001H,再调用CPUID

  如果EAX=51H, 是AMD K5

  如 果EAX=66H, 是K6

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

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

  程序如下:

 //------CPUID Instruction Demo Program------------

  #include

  #include

  #pragma hdrstop

  //------------------------------------------------

  #pragma inline

  #pragma argsused

  int main(int argc, char **argv)

  {

   char OEMString[13];

   int iEAXValue,iEBXValue,iECXValue,iEDXValue;

   _asm {

    mov eax,0

    cpuid

    mov DWORD PTR OEMString,ebx

    mov DWORD PTR OEMString+4,edx

    mov DWORD PTR OEMString+8,ecx

    mov BYTE PTR OEMString+12,0

   }

   cout "This CPU 's OEM String is:" OEMString endl;

   _asm {

    mov eax,1

    cpuid

    mov iEAXValue,eax

    mov iEBXValue,ebx

    mov iECXValue,ecx

    mov iEDXValue,edx

   }

   if(iEDXValue&0x800000)

    cout "This is MMX CPU" endl;

   else

    cout "None MMX Support." endl;

    int iCPUFamily=(0xf00 & iEAXValue) 8;

    cout "CPU Family is:" iCPUFamily endl;

    _asm{

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

     mov eax,2

     CPUID

    }

    if(_AL==1)

     cout "Pentium Pro or Pentium II Found";

     getch();

   return 0;

  }

来源:https://www.tulaoshi.com/n/20160219/1619935.html

延伸阅读
当我们使用Visual C++进行ADO编程时,一项颇为头疼的工作就是对VARIANT字段类型的处理。通常做法是,先把VARIANT类型转换为形式上较为类似的C++类型,然后再把转换后的数据存放在一个类(class)或结构(structure)中。即便如此,对VARIANT数据类型的处理在一定程度上也影响到了程序的性能。 ADO为我们提供了一个接口,该接口使我们可...
标签: 办公软件
    使用VC编程来操纵Office。你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序......只要是Office能够实现的功能,都可以在你写的程序中调用。仔细阅读下面的说明,并...
C++语言是一个面向对象的语言,使用C++编写的代码更加简捷、高效,更具可维护性和可重用性。但是很多人使用了C++语言后却感到C++与C编程没有什么区别。这其实是由于对C++语言的特点和特色理解和使用不够造成的。事实上,没有任何一个程序员使用C语言的编程效率可以超过C++语言的。 一、使用new和delete进行动态内存分配和释放 ...
(1)“我的程序都是对的,可结果不对” 想想你的四周,是不是也有人说这样的话?假如你也曾经说过,那就此打住,不要再说这句话,因为这句话只会显示说话者的无知。既然程序都是对的,那为什么结果不对? (2)“程序=算法+数据结构” 假如刚刚学完C语言,我们说这样的话,完全可以理解,而且可以说是正确的。但是假如你是一位即将...
1.引言 !-- frame contents -- !-- /frame contents -- 还记得当年学数学、英语都有个窍门,那就是搞个错题集。经常复习一下这个错题集,就可以避免下次犯同样的错误。而几乎所有的程序员都是从犯错误开始的,我们也很有必要总结一下编程新手的常见错误,本文的目的在于此。文中所列出的都是笔者在项目开发中接...

经验教程

756

收藏

88
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部