天天看點

利用CPUID 彙編指令(轉載)

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架構

如果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 

#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;

mov eax,1

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;

本文轉自 不得閑 部落格園部落格,原文連結:http://www.cnblogs.com/DxSoft/articles/5053964.html   ,如需轉載請自行聯系原作者