欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

在Visual C++编程中如何取得CPU的信息

程序员文章站 2023-11-30 23:52:34
在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中,用右键单击"我的电脑",选择" 属性- 常规"在计算机描述 处就可看见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:"< < icpufamily< < endl;
  _asm{
  mov eax,2
  cpuid
  }
  if(_al==1)
  cout < < "pentium pro or pentium ii found";
  getch();
  return 0;
  }
相关标签: C++ cpu 信息