识别CPU的型号和具体参数

来源:互联网 发布:mysql offset函数 编辑:程序博客网 时间:2024/04/29 05:00

今天做一个操作系统的试验的时候查阅intel手册发现了这个命令:CPUID具体的用了一下,终于明白了如何查看CPU的型号以及具体参数了:

在gcc下编译下面的代码就可以看到你的CPU的型号了:
u_int val=0 ;
 __asm __volatile("xor %eax,%eax" ); 
 __asm __volatile("inc %eax" ) ;
 __asm __volatile("CPUID" ) ;
__asm __volatile("movl %%eax,%0" : "=b" (val));
 printf ( "%x/n" , val ) ;

具体的数字的意义和其他的参数可以参考下面这篇文章:

CPUID指令
 1. CPUID指令代码: 0a20f
   例:
   {
     CPUID MACRO
          dw 0a20fh
     ENDM
   }
 2. CPUID有效检测
     如果程序可以改变EFLAGE(扩展标志字)的第21位,那么CPUID有效,
     否则无效。
     注:对于Cyrix的CPU,在打开其内部CPUID标志位之前,用此方法检测
     无效。
    例:
     {
      ...
      pushfd
      pop eax            
      mov ecx,eax
      xor eax,200000h    ;强制扩展标志位第21位为1
      push eax
      popfd
      pushfd
      pop eax
      xor eax,ecx        ;如果扩展标志位的第21位为1,那么
      je no_cpuid        ;CPUID存在,否则不存在
      jmp have_cpuid
      ...
    }
 3. CPUID指令
   (1)基本指令
     1.第0号功能: (EAX=0)
     调用寄存器:
       EAX=0
     返回寄存器:
      EAX=最大功能号
      EBX:EDX:ECX=CPU厂商识别串
     例:
     {
      ...
      xor eax,eax        ;调用0号功能
      CPUID              ;执行CPUID指令
      cmp ebx,"Genu"     ;判断EBX:EDX:ECX是否为"GenuineIntel"
      jne no_intel       ;如果是则该CPU的厂商为Intel,否则则不是
      cmp edx,"ineI"
      jne no_intel
      cmp ecx,"ntel"
      jne no_intel
      jmp is_intel
      ...
     }


     2.第1号功能: (EAX=1)
     调用寄存器
      EAX=1
     返回寄存器
      EAX=CPU说明
       CPU说明(见附录1)
       {
         bit     内容
        0--3     节率 (stepping)
        4--7     型号 (model)
        8--11    家族 (family)
       }
      EDX=特征标志字
      {
        bit      内容                                 缩写
         0       FPU On-chip                          FPU
         1       Virtual Mode Extension               VME
         2       Debugging Extension                  DE
         3       Page Size Extension                  PSE
         4       Time Stamp Counter                   TSC
         5       RDMSR/WRMSR Instructions
         6       Physical Address Extension           PAE
         7       Machine Check Exception              MCE
         8       CMPXCHG8B Instruction
         9       On-chip APIC HardWare
         10      Undefined
         11      SYSENTER/SYSEXIT Instructions
         12      Memory Type Range Registers
         13      Page Global Enable                   PGE
         14      Machine Check Architecture           MCA
         15      Conditional Move Instruction         CMI
         16      Page Attribute Table                 PAT
         17--22  Undefined
         23      MMX Instructions                     MMX
         24      internet Streaming SIMD Extensions   SSE
         25--31  Undefined
       }

   (2)扩展指令
      1.第80000000号功能(EAX=80000000h)
        调用寄存器:
        EAX=80000000h
        返回寄存器:
        EBX,ECX,EDX=保留
        EAX=最大功能号

      2.第80000001号功能
        调用寄存器:
        EAX=80000001h
        返回寄存器:
        EAX=CPU说明(见第1号功能)
        EDX=扩展特征标志字
        {
          EDX[0] <- FPU: FPU on Chip
EDX[1] <- VME: Virtual Mode Extention present
EDX[2] <- DE: Debbuging Extentions
EDX[3] <- PSE: CPU support 4MB size pages
EDX[4] <- TSC: TSC present (See RDTSC command)
EDX[5] <- MSR: CPU have K5 Compatible MSRs
EDX[6] <- 0 (Reserved)
EDX[7] <- MCE: Machine Check exception
EDX[8] <- CX8: Support CMPXCHG8B instruction
EDX[9] <- Reserved
EDX[10]<- Support SYSCALL and SYSRET instruction (!!!)
EDX[11,12]<- reserved
EDX[13]<- PGE: Page Global Feature support
EDX[14]<- reserved
EDX[15]<- CMOV: CPU support CMOV instruction
EDX[16]<- FCMOV: CPU support FP. FCMOV (!!!)
EDX[22..16] <- Reserved
EDX[23] <- MMX: CPU support IA MMX
EDX[24] <- (Cyrix) Cyrix Extended MMX
EDX[30..24] <- Reserved
EDX[31] <- AMD 3DNow!
}
(附录1)各类CPU参数
1. Cyrix
厂商识别串: "CyrixInstead"
CPU名称 家族 型号
MediaGX 4 4
6x86 5 2 (特征标志字=0x1)
6x86L 5 2 (特征标志字=0x105)
GXm 5 4
6x86MX 6 0

2. NexGen
厂商识别串: "NexGenDriven"
CPU名称 家族 型号
Nx586 5

3. UMC
厂商识别串: "UMC UMC UMC "
CPU名称 家族 型号
U5D 4 1
U5S 4 2

4. AMD
厂商识别串: "AuthenticAMD"
CPU名称 家族 型号
486DX2WT 4 3
486DX2WB 4 7
486DX4WT 4 8
486DX4WB 4 9
5x86WT 4 0x0e
5x86WB 4 0x0f
486 4 Others
K5/SS 5 0
K5 5 1,2,3
K6 5 6,7
K6-2 5 8
K6-III 5 9
K5/K6 5 Others
K7工程样本 6 0
K7 6 Others

5. IDT
厂商识别串: "CentaurHauls"
CPU名称 家族 型号
WinChip C6 5 4
WinChip 2 5 8

6 Rise
厂商识别串: "RiseRiseRise"
CPU名称 家族 型号
mP6 5 0

7. Intel
厂商识别串: "GenuineIntel"
CPU名称 家族 型号
PentiumII 6 3
Celeron 6 5
CeleronA 6 6
PentiumIII 6 7
PentiumPro OverDrive P6 6 1
PentiumPro 6 Others
PentiumP5 5 1
PentiumP54C 5 2
Pentiumi486 5 3
PentiumMMX 5 4
PentiumDX4 5 5
Pentium OverDrive P5 5 6
Pentium 5 Others
486DX 4 0,1
486SX 4 2
486DX2 4 3
486SL 4 4
486SX2 4 5
486DX2_WB 4 7
486DX4 4 8

原创粉丝点击