程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 使用Visual C++編程取得CPU信息

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

編輯:vc教程

利用利用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架構

  先讓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:"< <

[1] [2] 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved