用程式取得CPU資訊 (轉)
用程式取得CPU資訊 (轉)[@more@]---- 很 多 軟 件 可 以 判 斷 所 運 行 的 電 腦 類 型 而 自 動 做 不同 的 處 理。 如PhotoShop 5 可 以 探 測 是 否 有MMX 支 持 而 調 用 不同 的 處 理 函 數,《 金 山 詞 霸》 發 現 有MMX 支 持 會 產 生 半 透 明的 翻 譯 提 示, 很 多 軟 件 可 以 區 分,Cyrix, 的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。
---- 在98 中, 用 右 鍵 單 擊" 我 的 電 腦", 選 擇" 屬 性- 常規" 在 計 算 機 描 述 處 就 可 看 見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 中, 便 可 以 使程 序 也 知道" 心" 的 信 息。
//------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 D 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 信 息。
---- 主 要 可 利 用 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。
---- 在98 中, 用 右 鍵 單 擊" 我 的 電 腦", 選 擇" 屬 性- 常規" 在 計 算 機 描 述 處 就 可 看 見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 中, 便 可 以 使程 序 也 知道" 心" 的 信 息。
//------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 D 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;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004150/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 怎樣用程式取得CPU資訊 (轉)
- 用JAVA程式取得IP地址(轉)Java
- 取得oracle資料庫資訊(轉)Oracle資料庫
- 用winspool取得本機安裝的印表機的詳細資訊 (轉)
- ORACLE程式佔用CPU情況分析(轉載)Oracle
- 取得ie詳細版本資訊.及其它版本資訊的兩種方法. (轉)
- 程式佔用cpu排序排序
- C#獲取CPU佔用率、記憶體佔用、磁碟佔用、程式資訊C#記憶體
- C#取得頁面URL資訊C#
- oracle 11g vktm程式佔用CPU高 【轉載】Oracle
- VC知識庫BLOG-寧靜致遠-取得網路卡資訊(轉)
- 計算cpu速度的小程式 (轉)
- mac獲取cpu資訊Mac
- 取得網路卡序列號 (轉)
- java程式佔用cpu異常升高Java
- 用DELPHI製作線上程式升級資訊查詢 (轉)
- 取得自從開機到現在CPU執行的週期數,超毫秒級的精度 (轉)
- 【Linux】CPU資訊查詢Linux
- 用 ps 看看哪個程式把 CPU 吃完了
- 訪問ASM的ONNN程式佔用大量CPUASM
- 當某些Outlook 2000客戶端進行連線時資訊儲存程式佔用大量記憶體及CPU時間 (轉)客戶端記憶體
- 用ASP.Net寫一個傳送ICQ資訊的程式 (轉)ASP.NET
- [轉帖]海光CPU
- 取得所有使用者表空間資訊的sqlSQL
- 檢查CPU是否支援MMX指令的程式碼 (轉)
- CPU佔用100%原因及解決方法 轉載
- linux檢視cpu相關資訊Linux
- 關於用WMI獲取系統資訊——程式設計實現(轉)程式設計
- sysconf()函式應用舉例:檢視CPU及記憶體資訊函式記憶體
- Oracle程式導致CPU 100%解決步驟(轉)Oracle
- 【功能筆記】Ubuntu檢視系統資源佔用(記憶體,cpu和程式) {轉載}筆記Ubuntu記憶體
- 如何在 Linux 中找出 CPU 佔用高的程式Linux
- 取得某一dll所有輸出函式名 (轉)函式
- Linux cpuinfo cpu資訊獲取詳解LinuxUI
- [Android]獲取整體APP CPU資訊AndroidAPP
- Python 指令碼之獲取CPU資訊Python指令碼
- XamarinEssentials教程應用程式資訊AppInfoAPP
- Linux檢視CPU資訊、機器型號等硬體資訊Linux