精品主页 | 软件下载 | 系统下载 | 精品导航| 精彩图片 | 转帖工具 | 版主申请 | 影视下载
发新话题
打印

使用Visual C 编程取得CPU信息

使用Visual C 编程取得CPU信息

  


                   利用利用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中,用右键单击"我的电脑",选择[/img]


 (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 的"该程序执行了非法指令,将被关 闭[/img]


  (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:"< < iCPUFamily< < endl;


    _asm{


     mov eax,2


     CPUID


    }


    if(_AL==1)


     cout < < "Pentium Pro or Pentium II Found";


     getch();


   return 0;


  }

TOP

发新话题