程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> CPU信息的獲得

CPU信息的獲得

編輯:Delphi
最近到整理了一份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  4  C6
         8  C2
         9  C3
       Rise  0  mP6 (0.25 μm)
         2  mP6 (0.18 μm)
       Transmeta  4  Crusoe TM3x00 and TM5x00
       Intel P6-core  0  P6 A-step
         1  P6
         3  P2 (0.28 μm)
         5  P2 (0.25 μm)
         6  P2 with on-dIE L2 cache
         7  P3 (0.25 μm)
         8  P3 (0.18 μm)
  with 256 KB on-dIE L2 cache
         A  P3 (0.18 μm)
  with 1 or 2 MB on-dIE L2 cache
         B  P3 (0.13 μm)
  with 256 or 512 KB on-dIE L2 cache
       AMD K7  1  Athlon (0.25 μm)
         2  Athlon (0.18 μm)
         3  Duron (SF core)
         4  Athlon (TB core)
         6  Athlon (PM core)
         7  Duron (MG core)
         8  Athlon (TH core)
         A  Athlon (Barton core)
       Intel P4-core  0  P4 (0.18 μm)
         1  P4 (0.18 μm)
         2  P4 (0.13 μm)
         3  P4 (0.09 μm)
     stepping  stepping 在 bits 3..0.
       Stepping描述的是處理器的細節.
   EBX=aall_ccbbh  brand ID  brand ID是 7..0.
       00h  不支持
       01h  0.18 μm Intel Celeron
       02h  0.18 μm Intel Pentium III
       03h  0.18 μm Intel Pentium III Xeon
       03h  0.13 μm Intel Celeron
       04h  0.13 μm Intel Pentium III
       07h  0.13 μm Intel Celeron mobile
       06h  0.13 μm Intel Pentium III mobile
       0Ah  0.18 μm Intel Celeron 4
       08h  0.18 μm Intel Pentium 4
       09h  0.13 μm Intel Pentium 4
       0Eh  0.18 μm Intel Pentium 4 Xeon
       0Bh  0.18 μm Intel Pentium 4 Xeon MP
       0Bh  0.13 μm Intel Pentium 4 Xeon
       0Ch  0.13 μm Intel Pentium 4 Xeon MP
       08h  0.13 μm Intel Celeron 4 mobile
       0Eh  0.13 μm Intel Pentium 4 mobile (production)
       0Fh  0.13 μm Intel Pentium 4 mobile (samples)
     CLFLUSH  CLFLUSH (8-byte)在 bits 15..8.
     CPU count  邏輯處理器數量 bits 23..16.
     APIC ID  默認(固定的)APIC ID是bits 31..24.
   ECX=xxxx_xxxxh  feature flags  描述
     bits 31...11  保留
     bit 10 (CID)  context ID: L1數據緩存能被設置成適應或共享模式
     bit 9  保留
     bit 8 (TM2)  熱量監控 2
     bit 7  保留
     bit 6  保留
     bit 5  保留
     bit 4 (DSCPL)  CPL-qualifIEd Debug Store
     bit 3 (MON)  監控器
     bit 2  保留
     bit 1  保留
     bit 0 (SSE3)  SSE3, MXCSR, CR4.OSXMMEXCPT, #XF, 如果FPU=1也支持 FISTTP
   EDX=xxxx_xxxxh  面貌標志  說明
     bit 31 (PBE)  Pending Break Event, STPCLK, FERR#, MISC_ENABLE MSR
     bit 30 (IA-64)  IA-64
     bit 29 (TM)  THERM_INTERRUPT, THERM_STATUS, and MISC_ENABLE MSRsxAPIC thermal LVT entry
     bit 28 (HTT)  Hyper-Threading Technology
     bit 27 (SS)  selfsnoop
     bit 26 (SSE2)  SSE2, MXCSR, CR4.OSXMMEXCPT, #XF
     bit 25 (SSE)  SSE, MXCSR, CR4.OSXMMEXCPT, #XF
     bit 24 (FXSR)  FXSAVE/FXRSTOR, CR4.OSFXSR
     bit 23 (MMX)  MMX
     bit 22 (ACPI)  THERM_CONTROL MSR
     bit 21 (DTES)  Debug Trace and EMON Store MSRs
     bit 20  保留
     bit 19 (CLFL)  CLFLUSH
     bit 18 (PSN)  PSN (see standard EAX=l 0000_0003h), PSN_DISABLE MSR #1
     bit 17 (PSE36)  4 MB PDE bits 16..13, CR4.PSE
     bit 16 (PAT)  PAT MSR, PDE/PTE.PAT
     bit 15 (CMOV)  CMOVcc, if FPU=1 then also FCMOVcc/F(U)COMI(P)
     bit 14 (MCA)  MCG_*/MCn_* MSRs, CR4.MCE, #MC
     bit 13 (PGE)  PDE/PTE.G, CR4.PGE
     bit 12 (MTRR)  MTRR* MSRs
     bit 11 (SEP)  SYSENTER/SYSEXIT, SEP_* MSRs#2
     bit 10  保留
     bit 9 (APIC)  APIC #3, #4
     bit 8 (CX8)  CMPXCHG8B #5
     bit 7 (MCE)  MCAR/MCTR MSRs, CR4.MCE, #MC
     bit 6 (PAE)  64bit PDPTE/PDE/PTEs, CR4.PAE
     bit 5 (MSR)  MSRs, RDMSR/WRMSR
     bit 4 (TSC)  TSC, RDTSC, CR4.TSD (doesn't imply MSR=1)
     bit 3 (PSE)  PDE.PS, PDE/PTE.res, CR4.PSE, #PF(1xxxb)
     bit 2 (DE)  CR4.DE, DR7.RW=10b, #UD on MOV from/to DR4/5
     bit 1 (VME)  CR4.VME/PVI, EFLAGS.VIP/VIF, TSS32.IRB
     bit 0 (FPU)  FPU
  說明  說明
  #1  如果PSN無效PSN 面貌標志就是0.        
  #2  盡管Intel P6 處理器不支持 SEP,在這裡仍然會虛報(真不知Intel是怎麼想的).
  #3  APIC無效那麼APIC面貌標志就是0.
  #4  早期AMD K5 處理器 (SSA5)會假報支持 PGE.
  #5  處理器確實支持 CMPXCHG8B但默認卻是報告不支持. 其實這是Windows NT的一個Bug.
  EAX= 0000_0002h
       
  輸入  EAX=0000_0002h  得到處理器配置描述
  輸出  EAX.15..8
  EAX.23..16
  EAX.31..24
  EBX.0..7
  EBX.15..8
  EBX.23..16
  EBX.31..24
  ECX.0..7
  ECX.15..8
  ECX.23..16
  ECX.31..24
  EDX.0..7
  EDX.15..8
  EDX.23..16
  EDX.31..24  配置描述
     值  說明
     00h  null descriptor (=unused descriptor)
     01h  code TLB, 4K pages, 4 ways, 32 entrIEs
     02h  code TLB, 4M pages, fully, 2 entrIEs
     03h  data TLB, 4K pages, 4 ways, 64 entrIEs
     04h  data TLB, 4M pages, 4 ways, 8 entrIEs
     06h  code L1 cache, 8 KB, 4 ways, 32 byte lines
     08h  code L1 cache, 16 KB, 4 ways, 32 byte lines
     0Ah  data L1 cache, 8 KB, 2 ways, 32 byte lines
     0Ch  data L1 cache, 16 KB, 4 ways, 32 byte lines
     10h  data L1 cache, 16 KB, 4 ways, 32 byte lines (IA-64)
     15h  code L1 cache, 16 KB, 4 ways, 32 byte lines (IA-64)
     1Ah  code and data L2 cache, 96 KB, 6 ways, 64 byte lines (IA-64)
     22h  code and data L3 cache, 512 KB, 4 ways (!), 64 byte lines, dual-sectored
     23h  code and data L3 cache, 1024 KB, 8 ways, 64 byte lines, dual-sectored
     25h  code and data L3 cache, 2048 KB, 8 ways, 64 byte lines, dual-sectored
     29h  code and data L3 cache, 4096 KB, 8 ways, 64 byte lines, dual-sectored
     39h  code and data L2 cache, 128 KB, 4 ways, 64 byte lines, sectored
     3Bh  code and data L2 cache, 128 KB, 2 ways, 64 byte lines, sectored
     3Ch  code and data L2 cache, 256 KB, 4 ways, 64 byte lines, sectored
     40h  no integrated L2 cache (P6 core) or L3 cache (P4 core)
     41h  code and data L2 cache, 128 KB, 4 ways, 32 byte lines
     42h  code and data L2 cache, 256 KB, 4 ways, 32 byte lines
     43h  code and data L2 cache, 512 KB, 4 ways, 32 byte lines
     44h  code and data L2 cache, 1024 KB, 4 ways, 32 byte lines
     45h  code and data L2 cache, 2048 KB, 4 ways, 32 byte lines
     50h  code TLB, 4K/4M/2M pages, fully, 64 entrIEs
     51h  code TLB, 4K/4M/2M pages, fully, 128 entrIEs
     52h  code TLB, 4K/4M/2M pages, fully, 256 entrIEs
     5Bh  data TLB, 4K/4M pages, fully, 64 entrIEs
     5Ch  data TLB, 4K/4M pages, fully, 128 entrIEs
     5Dh  data TLB, 4K/4M pages, fully, 256 entrIEs
     66h  data L1 cache, 8 KB, 4 ways, 64 byte lines, sectored
     67h  data L1 cache, 16 KB, 4 ways, 64 byte lines, sectored
     68h  data L1 cache, 32 KB, 4 ways, 64 byte lines, sectored
     70h  trace L1 cache, 12 KμOPs, 8 ways
     71h  trace L1 cache, 16 KμOPs, 8 ways
     72h  trace L1 cache, 32 KμOPs, 8 ways
     77h  code L1 cache, 16 KB, 4 ways, 64 byte lines, sectored (IA-64)
     79h  code and data L2 cache, 128 KB, 8 ways, 64 byte lines, dual-sectored
     7Ah  code and data L2 cache, 256 KB, 8 ways, 64 byte lines, dual-sectored
     7Bh  code and data L2 cache, 512 KB, 8 ways, 64 byte lines, dual-sectored
     7Ch  code and data L2 cache, 1024 KB, 8 ways, 64 byte lines, dual-sectored
     7Eh  code and data L2 cache, 256 KB, 8 ways, 128 byte lines, sect. (IA-64)
     81h  code and data L2 cache, 128 KB, 8 ways, 32 byte lines
     82h  code and data L2 cache, 256 KB, 8 ways, 32 byte lines
     83h  code and data L2 cache, 512 KB, 8 ways, 32 byte lines
     84h  code and data L2 cache, 1024 KB, 8 ways, 32 byte lines
     85h  code and data L2 cache, 2048 KB, 8 ways, 32 byte lines
     88h  code and data L3 cache, 2048 KB, 4 ways, 64 byte lines (IA-64)
     89h  code and data L3 cache, 4096 KB, 4 ways, 64 byte lines (IA-64)
     8Ah  code and data L3 cache, 8192 KB, 4 ways, 64 byte lines (IA-64)
     8Dh  code and data L3 cache, 3096 KB, 12 ways, 128 byte lines (IA-64)
     90h  code TLB, 4K...256M pages, fully, 64 entrIEs (IA-64)
     96h  data L1 TLB, 4K...256M pages, fully, 32 entrIEs (IA-64)
     9Bh  data L2 TLB, 4K...256M pages, fully, 96 entrIEs (IA-64)
     值  描述
     70h  Cyrix specific: code and data TLB, 4K pages, 4 ways, 32 entrIEs
     74h  Cyrix specific: ???
     77h  Cyrix specific: ???
     80h  Cyrix specific: code and data L1 cache, 16 KB, 4 ways, 16 byte lines
     82h  Cyrix specific: ???
     84h  Cyrix specific: ???
     值  描述
     others  保留
  舉個例子有一塊 P6  EAX=0302_0101h
  EBX=0000_0000h
  ECX=0000_0000h
  EDX=0604_0A43h  這塊P6處理器包含4K/M code/data TLB,8+8 KB code/data L1 cache 和混合 512 KB code/data L2 cache.
  說明  說明
  #1  在多處理器系統中要特別注意,應該執行.
  EAX=0000_0003h
  輸入  EAX=0000_0003h  得到處理器序列號 #1
  輸出  EBX=xxxx_xxxxh  處理器序列號(只只是Transmeta Crusoe)
   ECX=xxxx_xxxxh  處理器序列號
   EDX=xxxx_xxxxh  處理器序列號
  說明  說明
  #1  僅當PSN有效時.
  EAX= 8000_0000h
  輸入  EAX=8000_0000h  得到擴展CPUID指令所支持的最大值和廠家的名稱字符串
  輸出  EAX=xxxx_xxxxh  最大值
   EBX-EDX-ECX  廠家的名稱字符串
     AuthenticAMD  AMD
     保留  Cyrix
     保留  Centaur
     保留  Intel
     TransmetaCPU  Transmeta
     保留  National Semiconductor
  extended EAX= 8000_0001h
  輸入  EAX=8000_0001h  得到處理器 family/model/stepping and features flags #0
  輸出  EAX=0000_0xxxh  處理器 family/model/stepping
     family  Family是 bits 11..8.
         5  AMD K5
  Centaur C2
  Transmeta Crusoe TM3x00 and TM5x00
         6  AMD K6
  VIA Cyrix III
         7  AMD K7
     model  model 是bits 7..4.
       AMD K5  1  5k86 (PR120 or 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)
       AMD K7  1  Athlon (0.25 μm)
         2  Athlon (0.18 μm)
         3  Duron (SF core)
         4  Athlon (TB core)
         6  Athlon (PM core)
         7  Duron (MG core)
         8  Athlon (TH core)
         A  Athlon (Barton core)
       Centaur  8  C2
         9  C3
       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)
       Transmeta  4  Crusoe TM3x00 and TM5x00
     stepping  stepping是bits 3..0.
       Stepping的值是處理器的細節.
   EDX=xxxx_xxxxh  feature flags  description of indicated feature
     bit 31 (3DNow!)  3DNow!
     bit 30 (3DNow!+)  extended 3DNow!
     bit 29 (LM)  AA-64, Long Mode(也就是AMD的X86-64指令集)
     bit 28  保留
     bits 27..25  保留
     bit 24 (MMX+)
  bit 24 (FXSR)  Cyrix specific: extended MMX
  AMD K7: FXSAVE/FXRSTOR, CR4.OSFXSR
     bit 23 (MMX)  MMX
     bit 22 (MMX+)  AMD specific: MMX-SSE and SSE-MEM
     bit 21  保留
     bit 20 (NX)  EFER.NXE, P?E.NX, #PF(1xxxx)
     bit 19 (MP)  MP-capable #3
     bit 18  保留
     bit 17 (PSE36)  4 MB PDE bits 16..13, CR4.PSE
     bit 16 (FCMOV)
  bit 16 (PAT)  FCMOVcc/F(U)COMI(P) (implIEs FPU=1)
  AMD K7: PAT MSR, PDE/PTE.PAT
     bit 15 (CMOV)  CMOVcc
     bit 14 (MCA)  MCG_*/MCn_* MSRs, CR4.MCE, #MC
     bit 13 (PGE)  PDE/PTE.G, CR4.PGE
     bit 12 (MTRR)  MTRR* MSRs
     bit 11 (SEP)  SYSCALL/SYSRET, EFER/STAR MSRs #1
     bit 10  保留 #1
     bit 9 (APIC)  APIC #2
     bit 8 (CX8)  CMPXCHG8B
     bit 7 (MCE)  MCAR/MCTR MSRs, CR4.MCE, #MC
     bit 6 (PAE)  64bit PDPTE/PDE/PTEs, CR4.PAE
     bit 5 (MSR)  MSRs, RDMSR/WRMSR
     bit 4 (TSC)  TSC, RDTSC, CR4.TSD (doesn't imply MSR=1)
     bit 3 (PSE)  PDE.PS, PDE/PTE.res, CR4.PSE, #PF(1xxxb)
     bit 2 (DE)  CR4.DE, DR7.RW=10b, #UD on MOV from/to DR4/5
     bit 1 (VME)  CR4.VME/PVI, EFLAGS.VIP/VIF, TSS32.IRB
     bit 0 (FPU)  FPU
  說明  內容
  #0  Intel 處理器不支持; 返回值EAX, EBX, ECX, 和 EDX都是0.
  #1  AMD K6 處理器, model 6, uses 使用第十位指示SEP.
  #2  如果APIC是無效的,那麼APIC讀到的是0.
  #3  AMD CPUID=0662h的K7 處理器如果是具有多處理器能力的版本可能也報告時0
  EAX= 8000_0002h, 8000_0003h, and 8000_0004h
  輸入  EAX=8000_0002h  得到處理器名稱的第一部分
   EAX=8000_0003h  得到處理器名稱的第二部分
   EAX=8000_0004h  得到處理器名稱的第三部分
  輸出  EAX
  EBX
  ECX
  EDX  處理器名稱字符串#1
     AMD K5  AMD-K5(tm) 處理器
     AMD K6  AMD-K6tm w/ multimedia extensions
     AMD K6-2  AMD-K6(tm) 3D 處理器
  AMD-K6(tm)-2 處理器
     AMD K6-III  AMD-K6(tm) 3D+ 處理器
  AMD-K6(tm)-III 處理器
     AMD K6-2+  AMD-K6(tm)-III 處理器 (?)
     AMD K6-III+  AMD-K6(tm)-III 處理器 (?)
     AMD K7  AMD-K7(tm) 處理器 (model 1)
  AMD Athlon(tm) 處理器 (model 2)
  AMD Athlon(tm) 處理器 (models 3/4, 6/7, and 8 -- programmable)
     Centaur C2 #2  IDT WinChip 2
  IDT WinChip 2-3D
     VIA Cyrix III  CYRIX III(tm) (?)
  VIA Samuel (?)
  VIA Ezra (?)
     Intel P4  Intel(R) Pentium(R) 4 CPU xxxxMHz (right-justifIEd, leading whitespaces)順便說一句,Intel只有P4以上才支持。
     Transmeta  Transmeta(tm) Crusoe(tm) 處理器 TMxxxx
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved