最近到整理了一份CPU的信息,应该算是比较全面的吧。
几乎现在所有的X86 CPU都内置了CPUID指令以辨别真伪,一些CPU厂商例如AMD,VIA等还内置了更加丰富的扩展CPUID指令,用着更方便了。
下面我们利用Delphi来实现一个CPU检测的软件。
CPUID的调用方式如下:
 asm
 push eax
 push ebx
 push ecx
 push edx
 mov eax,X
//******************************************************
//cpuid指令,因为Delphi的汇编编译器没有内置该指令,
//所以用该指令的机器语言代码$0F,$A2来实现
//******************************************************
 db $0F,$A2 
 pop edx
 pop ecx
 pop ebx
 pop eax
 end;
CPUID指令的参数就是EAX,mov eax,X这一句就是把X赋给EAX 。
返回的参数存储在EAX,EBX,ECX,EDX之中。
我们可以写一个函数:
type
 TCPUIDResult = record
   EAX: DWord;
   EBX: DWord;
   ECX: DWord;
   EDX: DWord;
 end;
……
function CPUID(EAX:DWord): TCPUIDResult;
asm
 push eax
 push ebx
 push ecx
 push edx
 mov eax,EAX
 //******************************************************
 //cpuid指令,因为Delphi的汇编编译器没有内置该指令,
 //所以用该指令的机器语言代码$0F,$A2来实现
 //******************************************************
 db $0F,$A2
 mov Result.EAX,EAX
 mov Result.EBX,EBX
 mov Result.ECX,ECX
 mov Result.EDX,EDX
 pop edx
 pop ecx
 pop ebx
 pop eax
end;
CPUID参数及返回值列表:
EAX= 0000_0000h
输入  EAX=0000_0000h  得到CPUID指令所支持的最大值和厂家的名称字符串
输出  EAX=xxxx_xxxxh  得到CPUID指令所支持的最大值 #1
 EBX-EDX-ECX  厂家的名称字符串 #2
   GenuineIntel  Intel 处理器
   UMC UMC UMC  UMC 处理器
   AuthenticAMD  AMD 处理器
   CyrixInstead  Cyrix 处理器
   NexGenDriven  NexGen 处理器
   CentaurHauls  Centaur 处理器
   RiseRiseRise  Rise Technology 处理器
   GenuineTMx86  Transmeta 处理器
   Geode by NSC  National Semiconductor 处理器
说明  描述
#1  pre-B0 step Intel P5 处理器返回 EAX=0000_05xxh.
#2  pre-B0 step Intel P5 处理器不能返回厂商字符串
EAX= 0000_0001h 
输入  EAX=0000_0001h  得到处理器 type/family/model/stepping和 面貌标识
输出  EAX=xxxx_xxxxh  处理器 type/family/model/stepping
   extended family  extended family 是 bits 27..20.
     00h  Intel P4
     01h  Intel Itanium 2 (IA-64)
   extended model  extended model 是 bits 19..16.
   type  type是 bit 13 和 bit 12.
     11b  保留
     10b  第二块处理器
     01b  Overdrive 处理器
     00b  第一处理器
   family  family是bits 11..8.
     4  most 80486s
AMD 5x86
Cyrix 5x86
     5  Intel P5, P54C, P55C, P24T
NexGen Nx586
Cyrix M1
AMD K5, K6
Centaur C6, C2, C3
Rise mP6
Transmeta Crusoe TM3x00 and TM5x00
     6  Intel P6, P2, P3
AMD K7
Cyrix M2, VIA Cyrix III
     7  Intel Itanium (IA-64) 
     F  如果是这个值的话就看extended family
   model  model 是 bits 7..4.
     Intel  F  如果是这个值的话就看 extended model
     Intel 80486  0  i80486DX-25/33
       1  i80486DX-50
       2  i80486SX
       3  i80486DX2
       4  i80486SL
       5  i80486SX2
       7  i80486DX2WB
       8  i80486DX4
       9  i80486DX4WB
     UMC 80486  1  U5D
       2  U5S
     AMD 80486  3  80486DX2
       7  80486DX2WB
       8  80486DX4
       9  80486DX4WB
       E  5x86
       F  5x86WB
     Cyrix 5x86  9  5x86
     Cyrix MediaGX  4  GX, GXm
     Intel P5-core  0  P5 A-step
       1  P5
       2  P54C
       3  P24T Overdrive
       4  P55C
       7  P54C
       8  P55C (0.25μm)
     NexGen Nx586  0  Nx586 or Nx586FPU (only later ones)
     Cyrix M1  2  6x86
     Cyrix M2  0  6x86MX
     VIA Cyrix III  5  Cyrix M2 core
       6  WinChip C5A core
       7  WinChip C5B core (if stepping = 0..7)
       7  WinChip C5C core (if stepping = 8..F)
       8  WinChip C5C-T core (if stepping = 0..7)
     AMD K5  0  SSA5 (PR75, PR90, PR100)
       1  5k86 (PR120, PR133)
       2  5k86 (PR166)
       3  5k86 (PR200)
     AMD K6  6  K6 (0.30 μm)
       7  K6 (0.25 μm)
       8  K6-2
       9  K6-III
       D  K6-2+ or K6-III+ (0.18 μm)
     Centaur