怎樣用程式取得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
K7 是 什 麼 標 志, 只 有 等 大 家拿 到K7 的 芯 再 說 了。
EDX 第0 位: 是 否 有FPU( 多 餘 的 !誰 用 過 沒FPU 的K5,K6?)
EDX 第23 位,CPU 是 否 支 持MMX,
程 序 如 下: 是C++Builder 的 控 制臺 程 序, 可 以 給 出 你 的" 心"
的 信 息。 如 果 把這 個 技 術 用 於DLL 中, 便 可 以 使程 序
也 知 道" 心" 的 信 息。
//--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 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;
}
處 理。 如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
K7 是 什 麼 標 志, 只 有 等 大 家拿 到K7 的 芯 再 說 了。
EDX 第0 位: 是 否 有FPU( 多 餘 的 !誰 用 過 沒FPU 的K5,K6?)
EDX 第23 位,CPU 是 否 支 持MMX,
程 序 如 下: 是C++Builder 的 控 制臺 程 序, 可 以 給 出 你 的" 心"
的 信 息。 如 果 把這 個 技 術 用 於DLL 中, 便 可 以 使程 序
也 知 道" 心" 的 信 息。
//--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 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-998414/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Win10怎麼樣調節CPU風扇轉速 win10cpu風扇轉速控制Win10
- 怎樣用 Bash 程式設計:迴圈程式設計
- 怎樣用Python提取資訊呢?分享這3個Python PDF庫Python
- 怎樣才能讓精益生產專案輔導取得理想效果?
- 飛騰cpu是什麼架構 飛騰cpu整體效能怎樣架構
- 面試問題---JAVA程式CPU佔用過高怎麼定位面試Java
- 轉行學IT怎麼樣?
- 醫院怎樣實現資訊化轉型?F5提供技術支撐
- 怎樣通過java用web3j查詢以太坊交易資訊?JavaWeb
- 怎樣用 Bash 程式設計:語法和工具程式設計
- 怎樣解除安裝Chromebook 中的應用程式Chrome
- java程式佔用cpu異常升高Java
- 怎樣吃晚餐才健康?(轉)
- POST 怎麼樣用
- 語音轉文字工具,語音轉文字怎樣轉?
- 系統空閒程式佔用大量CPU是什麼原因_系統空閒程式CPU使用率高怎麼解決
- 提升CPU等資源的利用率,減少CPU的空轉
- 怎麼用 PHP 玩轉程式之一 — 基礎PHP
- 《程式是怎樣跑起來的》讀書筆記1——對程式設計師來說CPU是什麼筆記程式設計師
- 企業資訊化管理系統採用怎樣的快速開發平臺好?
- XamarinEssentials教程應用程式資訊AppInfoAPP
- 跨專業轉行的程式設計師,怎樣才能拿高薪?程式設計師高薪
- Win10系統下Microsoft Compatibility Telemetry程式佔用cpu高怎麼禁用Win10ROS
- 怎樣用程式碼寫出99成法口訣!
- 請教怎樣測試工具類的 windows 應用程式?Windows
- 怎樣用一行 Python 程式碼實現並行Python並行
- 怎樣防止同事用 QQ 郵箱提交公司程式碼?
- 顯示每個CPU的IDT資訊
- 大資料初學者怎樣學習?Java工程師怎麼轉行大資料?大資料Java工程師
- Serverless介紹篇(一)雲開發在Serverless方面取得了怎樣的新成果?Server
- 利用jsearch怎樣搜尋特定欄目裡的資訊?JS
- 京東大資料工程師教你怎樣用Sqoop大資料工程師OOP
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- [轉帖]海光CPU
- [轉帖]流量一樣但為什麼CPU使用率差別很大
- 怎樣用Sourceinsight編輯/瀏覽整個工程的程式碼
- CPU飆升?教你1分鐘抓取佔用系統資源的程式
- 轉行學Java開發怎麼樣?Java
- 怎麼樣轉換pdf格式為Word?