天天看点

利用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   ,如需转载请自行联系原作者