用程序取得CPU信息

原创 2001年05月19日 15:06:00
---- 很 多 软 件 可 以 判 断 所 运 行 的 电 脑 类 型 而 自 动 做 不同 的 处 理。 如PhotoShop 5 可 以 探 测CPU 是 否 有MMX 支 持 而 调 用 不同 的 处 理 函 数,《 金 山 词 霸》 发 现 有MMX 支 持 会 产 生 半 透 明的 翻 译 提 示, 很 多 软 件 可 以 区 分Intel,Cyrix,AMD 的CPU...

---- 现 在, 且 让 我 细 细 道 来 如 何 让 你 在 自 己 的 程 序 中 取得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

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

程 序 如 下: 是C++Builder 的 控 制 台 程 序, 可 以 给 出 你 的" 心" 的 信 息。 如 果 把 这 个 技 术 用 于 DLL 中, 便 可 以 使VB 程 序 也 知道" 心" 的 信 息。

//------CPUID Instruction Demo Program------------
#include < conio.h >
#include < iostream.h >
#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;

}

用程序取得CPU信息

很 多 软 件 可 以 判 断 所 运 行 的 电 脑 类 型 而 自 动 做 不同 的 处 理。 如PhotoShop 5 可 以 探       测CPU 是 否 有MMX 支 持 而 调 用 不...
  • nust03
  • nust03
  • 2002年06月30日 12:11
  • 987

怎样用程序取得CPU信息

 怎样用程序取得CPU信息 很 多 软 件 可 以 判 断所 运 行 的 电 脑 类 型 而 自 动 做 不 同 的 处 理。 如PhotoShop 5 可 以 探 测CPU 是 否 有MMX 支 ...
  • firetoucher
  • firetoucher
  • 2001年09月09日 23:26
  • 921

取得 CPU Cores信息

#ifdef _WIN32 #include #elif MACOS #include #include #else #include #endif int getNumberOfCore...
  • u011640816
  • u011640816
  • 2014年06月25日 21:03
  • 343

Qt 获取CPU信息

在Qt中调用Windows API GetSystemInfo可以获取CPU的相关信息,使用Qt的界面控件显示在界面上。在实现的过程中遇到了一个问题,就是显示地址信息在界面控件上。 试了好几种方法,...
  • u011417605
  • u011417605
  • 2016年06月02日 15:57
  • 3129

c++获取cpu信息方法

PS:此文章是从本人sina博客搬移过来; 此文章好像是我之前 参照一个博客做的测试程序。是谁我找不到作者了。对此。表示对作者表示抱歉; intelIA32架构下,...
  • chenqiangdage
  • chenqiangdage
  • 2013年12月14日 23:15
  • 1314

用cpuid指令获取cpu信息

用cpuid指令获取cpu信息http://blog.163.com/madengyao_super/blog/static/285982202008625105632730/ 最近在写一个获取系统信...
  • fisher_jiang
  • fisher_jiang
  • 2009年07月14日 17:22
  • 7893

汇编实现获取CPU信息

这是文章最后一次更新,加入了TLB与Cache信息等资料 前言:论坛上面有人不明白CPUID指令的用法,于是就萌生写这篇文章的想法, 若有错误话请大侠指出,谢谢了 ^^ 论坛的式样貌似有问题,若式样问...
  • greless
  • greless
  • 2016年08月24日 19:39
  • 565

通过代码实现获取手机CPU信息

要获取手机CPU的基本信息可分为几类:CPU最高频率、CPU最低频率、CPU当前频率、CPU型号等。 以下是获取最高频率信息的代码: public static String ge...
  • u013772433
  • u013772433
  • 2014年02月25日 14:08
  • 1518

用java取得linux系统cpu、内存的实时信息

取Linux系统下的CPU、内存信息import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;i...
  • waferleo
  • waferleo
  • 2009年02月11日 16:40
  • 1957

用java取得linux系统cpu、内存的实时信息

引用:http://blog.csdn.net/java008/archive/2006/01/01/567718.aspx前些天正好需要完成一个实时分析linux系统CPU、内存使用情况的功能,类似...
  • chnjxiang
  • chnjxiang
  • 2006年01月03日 09:37
  • 989
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用程序取得CPU信息
举报原因:
原因补充:

(最多只允许输入30个字)