⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 90.htm

📁 C++Builder教学大全
💻 HTM
字号:


<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>用程序取得CPU信息</title>

</head>

<div><center>

<table border="0" width="640">

  <tr><td align="center"><b>用程序取得CPU信息</b></td></tr>

  <tr><td align="center"><font color="#CC9933">李 涛</font></td></tr>

  <tr><td>&nbsp;&nbsp;---- 很 多 软 件 可 以 判 断 所 运 行 的 电 脑 类 型 而 自 动 做 不同 的 处 理。 如PhotoShop 5 可 以 探 测CPU 是 否 有MMX 支 持 而 调 用 不同 的 处 理 函 数,《 金 山 词 霸》 发 现 有MMX 支 持 会 产 生 半 透 明的 翻 译 提 示, 很 多 软 件 可 以 区 分Intel,Cyrix,AMD 的CPU... <br><br>---- 现 在, 且 让 我 细 细 道 来 如 何 让 你 在 自 己 的 程 序 中 取得CPU 信 息。 <br><br>---- 主 要 可 利 用 CPUID 汇 编 指 令( 机 器 码:0FH A2H, 如 果 你 的编 译 器 不 支 持CPUID 指 令, 只 有 emit 机 器 码 了) 该 指 令 可 以 被如 下CPU 识 别 <br><br>                    Intel 486 以 上 的CPU, <br><br>                    Cyrix M1 以 上 的CPU, <br><br>                    AMD Am486 以 上 的CPU <br>  <br><br>(1) 取CPU OEM 字 符 串, 判 断CPU 厂 商 <br><br>    先 让EAX=0, 再 调 用CPUID <br><br>    Inel 的CPU 将 返 回: <br><br>                    EBX:756E6547H ''Genu'' <br><br>                    EDX:49656E69H ''ineI'' <br><br>                    ECX:6C65746EH ''ntel'' <br><br>                    EBX,EDX,ECX 将 连 成"GenuineIntel", 真 正 的Intel。 <br><br>   Cyrix 的CPU 将 返 回: <br><br>                    EBX:43797269H <br><br>                    EDX:78496E73H <br><br>                    ECX:74656164H <br><br>                    "CyrixInstead","Cyrix 来 代 替"。 <br><br>   AMD 的CPU 将 返 回: <br><br>                    EBX:41757468H <br><br>                    EDX:656E7469H <br><br>                    ECX:63414D44H <br><br>                    "AuthenticAMD", 可 信 的AMD。 <br>  <br><br>---- 在Windows98 中, 用 右 键 单 击" 我 的 电 脑", 选 择" 属 性- 常规" 在 计 算 机 描 述 处 就 可 看 见CPU OEM 字 符 串。 <br><br>(2)CPU 到 底 是 几86, 是 否 支 持MMX <br><br>   先 让EAX=1, 再 调 用CPUID <br><br>   EAX 的 8 到11 位 就 表 明 是 几86 <br><br>                    3 - 386 <br><br>                    4 - i486 <br><br>                    5 - Pentium <br><br>                    6 - Pentium Pro Pentium II <br><br>                    2 - Dual Processors <br><br>    EDX 的 第0 位: 有 无FPU <br><br>    EDX 的 第23 位:CPU 是 否 支 持IA MMX, 很 重 要 啊!如 果 你 想 用 那57 条 新 增 的 指 令, 先 检 查 这 一 位 吧, 否 则 就等 着 看Windows 的" 该 程 序 执 行 了 非 法 指 令, 将 被 关 闭" 吧。 <br><br>(3) 专 门 检 测 是 否P6 架 构 <br><br>    先 让EAX=1, 再 调 用CPUID <br><br>    如 果AL=1, 就 是Pentium Pro 或Pentium II <br><br>(4) 专 门 检 测AMD 的CPU 信 息 <br><br>    先 让EAX=80000001H, 再 调 用CPUID <br><br>    如 果EAX=51H, 是AMD K5 <br><br>    如 果EAX=66H, 是K6 <br><br>    EDX 第0 位: 是 否 有FPU <br><br>    EDX 第23 位,CPU 是 否 支 持MMX, <br><br>程 序 如 下: 是C++Builder 的 控 制 台 程 序, 可 以 给 出 你 的" 心" 的 信 息。 如 果 把 这 个 技 术 用 于 DLL 中, 便 可 以 使VB 程 序 也 知道" 心" 的 信 息。 <br><br>                    //------CPUID Instruction Demo Program------------ <br>                    #include &lt; conio.h &gt; <br>                    #include &lt; iostream.h &gt; <br>                    #pragma hdrstop <br>                    //------------------------------------------------ <br><br>                    #pragma inline <br>                    #pragma argsused <br><br>                    int main(int argc, char **argv) <br>                    { <br>                    char OEMString[13]; <br>                    int iEAXValue,iEBXValue,iECXValue,iEDXValue; <br><br>                    _asm { <br>                         mov eax,0 <br>                         cpuid <br>                         mov DWORD PTR OEMString,ebx <br>                         mov DWORD PTR OEMString+4,edx <br>                         mov DWORD PTR OEMString+8,ecx <br>                         mov BYTE PTR OEMString+12,0 <br>                          } <br><br>                    cout&lt; &lt; "This CPU ''s OEM String is:"&lt; &lt; OEMString&lt; &lt; endl; <br><br>                    _asm { <br>                        mov eax,1 <br>                        cpuid <br>                        mov iEAXValue,eax <br>                        mov iEBXValue,ebx <br>                        mov iECXValue,ecx <br>                        mov iEDXValue,edx <br>                          } <br><br>                    if(iEDXValue&0x800000) <br>                       cout &lt; &lt; "This is MMX CPU"&lt; &lt; endl; <br>                    else <br>                       cout &lt; &lt; "None MMX Support."&lt; &lt; endl; <br><br>                    int iCPUFamily=(0xf00 & iEAXValue) &gt; &gt;8; <br>  <br>                    cout &lt; &lt; "CPU Family is:"&lt; &lt; iCPUFamily&lt; &lt; endl; <br>  <br>                    _asm{ <br>                        mov eax,2 <br>                        CPUID <br>                         } <br><br>                    if(_AL==1) <br>                       cout &lt; &lt; "Pentium Pro or Pentium II Found"; <br><br>                    getch(); <br><br>                    return 0; <br><br>           } </td></tr> 

</table></center></div> 

</html> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -