国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Delphi中獲取CPU序列號信息 - 【電腦技術(shù)】 - 廣西民族大學(xué)論壇 ‖‖相思湖論壇...



最近到整理了一份CPU的信息,應(yīng)該算是比較全面的吧。
幾乎現(xiàn)在所有的X86 CPU都內(nèi)置了CPUID指令以辨別真?zhèn)?,一些CPU廠商例如AMD,VIA等還內(nèi)置了更加豐富的擴展CPUID指令,用著更方便了。
下面我們利用Delphi來實現(xiàn)一個CPU檢測的軟件。
CPUID的調(diào)用方式如下:
asm
push eax
push ebx
push ecx
push edx
mov eax,X
//******************************************************
//cpuid指令,因為Delphi的匯編編譯器沒有內(nèi)置該指令,
//所以用該指令的機器語言代碼$0F,$A2來實現(xiàn)
//******************************************************
db $0F,$A2
pop edx
pop ecx
pop ebx
pop eax
end;
CPUID指令的參數(shù)就是EAX,mov eax,X這一句就是把X賦給EAX 。
返回的參數(shù)存儲在EAX,EBX,ECX,EDX之中。
我們可以寫一個函數(shù):
type
TCPUIDResult = record
  EAX: DWord;
  EBX: DWord;
  ECX: DWord;
  EDX: DWord;
end;
……
function CPUID(EAX
Word): TCPUIDResult;
asm
push eax
push ebx
push ecx
push edx
mov eax,EAX
//******************************************************
//cpuid指令,因為Delphi的匯編編譯器沒有內(nèi)置該指令,
//所以用該指令的機器語言代碼$0F,$A2來實現(xiàn)
//******************************************************
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參數(shù)及返回值列表:
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和 面貌標(biāo)識
輸出  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描述的是處理器的細(xì)節(jié).
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  邏輯處理器數(shù)量 bits 23..16.
  APIC ID  默認(rèn)(固定的)APIC ID是bits 31..24.
ECX=xxxx_xxxxh  feature flags  描述
  bits 31...11  保留
  bit 10 (CID)  context ID: L1數(shù)據(jù)緩存能被設(shè)置成適應(yīng)或共享模式
  bit 9  保留
  bit 8 (TM2)  熱量監(jiān)控 2
  bit 7  保留
  bit 6  保留
  bit 5  保留
  bit 4 (DSCPL)  CPL-qualified Debug Store
  bit 3 (MON)  監(jiān)控器
  bit 2  保留
  bit 1  保留
  bit 0 (SSE3)  SSE3, MXCSR, CR4.OSXMMEXCPT, #XF, 如果FPU=1也支持 FISTTP
EDX=xxxx_xxxxh  面貌標(biāo)志  說明
  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 面貌標(biāo)志就是0.        
#2  盡管Intel P6 處理器不支持 SEP,在這里仍然會虛報(真不知Intel是怎么想的).
#3  APIC無效那么APIC面貌標(biāo)志就是0.
#4  早期AMD K5 處理器 (SSA5)會假報支持 PGE.
#5  處理器確實支持 CMPXCHG8B但默認(rèn)卻是報告不支持. 其實這是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  在多處理器系統(tǒng)中要特別注意,應(yīng)該執(zhí)行.
EAX=0000_0003h
輸入  EAX=0000_0003h  得到處理器序列號 #1
輸出  EBX=xxxx_xxxxh  處理器序列號(只只是Transmeta Crusoe)
ECX=xxxx_xxxxh  處理器序列號
EDX=xxxx_xxxxh  處理器序列號
說明  說明
#1  僅當(dāng)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的值是處理器的細(xì)節(jié).
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
說明  內(nèi)容
#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
說明  內(nèi)容
#1  是一個字符數(shù)組,以0H結(jié)尾.
#2  WinChip是否支持決定于是否支持3D Now!.
EAX= 8000_0005h
輸入  EAX=8000_0005h  得到L1緩存容量和入口數(shù)量 #1
輸出  EAX  4/2 MB L1 入口信息
  EAX的位  描述
  31..24  data TLB associativity (FFh=full)
  23..16  data TLB entries
  15..8  code TLB associativity (FFh=full)
  7..0  code TLB entries
EBX  4 KB L1入口信息
  bits  description
  31..24  data TLB associativity (FFh=full)
  23..16  data TLB entries
  15..8  code TLB associativity (FFh=full)
  7..0  code TLB entries
ECX  data L1 信息描述
  bits  description
  31..24  data L1 cache size in KBs
  23..16  data L1 cache associativity (FFh=full)
  15..8  data L1 cache lines per tag
  7..0  data L1 cache line size in bytes
EDX  code L1信息描述
  bits  description
  31..24  code L1 cache size in KBs
  23..16  code L1 cache associativity (FFh=full)
  15..8  code L1 cache lines per tag
  7..0  code L1 cache line size in bytes
說明  description
#1  Cyrix 處理器使用0000_0002h做類似的描述
EAX= 8000_0006h
輸入  EAX=8000_0006h  得到L1緩存容量和入口數(shù)量
輸出  EAX  4/2 MB L2 入口信息 #1
  位  描述
  31..28  data TLB associativity #2
  27..16  data TLB entries
  15..12  code TLB associativity #2
  11..0  code TLB entries
EBX  4 KB L2 入口信息
  位  描述
  31..28  data TLB associativity #1
  27..16  data TLB entries
  15..12  code TLB associativity #1
  11..0  code TLB entries
ECX  統(tǒng)一 L2 cache 信息 #32
  bits  description
  31..16 #4  unified L2 cache size in KBs #3
  15..12 #4  unified L2 cache associativity #1
  11..8 #4  unified L2 cache lines per tag
  7..0  unified L2 cache line size in bytes
說明  描述
#1  0000b=L2 off, 0001b=direct mapped, 0010b=2-way, 0100b=4-way, 0110b=8-way, 1000b=16-way, 1111b=full
#2  AMD K7 處理器 L2 cache 必須依賴于此信息.
#3  AMD PUID=0630h 的K7 處理器(Duron) 具有 64 KB二級緩存,但是卻報告只有1KB.
#4  VIA Cyrix III CPUID=0670..068Fh (C5B/C5C)的處理器錯誤報告bits 31..24, 23..16, and 15..8.
EAX 8000_0007h
輸入  EAX=8000_0007h  電源管理信息(EPM)
輸出  EDX  EPM flags
  位  說明
  31..3  保留
  2 (VID)  voltage ID control supported
  1 (FID)  frequency ID control supported
  0  temperature sensing diode supported
EAX= 8000_0008h
輸入  EAX=8000_0008h  得到地址大小信息
輸出  EAX  地址大小信息
  位  說明
  31..16  保留
  15..8  virtual address bits
  7..0  physical address bits
Transmeta EAX= 8086_0000h
輸入  EAX=8086_0000h  得到CPUID的最大支持和廠商字符串
輸出  EAX=xxxx_xxxxh  最大支持 EAX=l
EBX-EDX-ECX  廠商字符串
  TransmetaCPU  Transmeta processor
Transmeta EAX= 8086_0001h
輸入  EAX=8086_0001h  得到處理器信息
輸出  EAX=0000_0xxxh  處理器信息
  family  The family is encoded in bits 11..8.
      5  Transmeta Crusoe TM3x00 and TM5x00
  model  The model is encoded in bits 7..4.
    Transmeta  4  Crusoe TM3x00 and TM5x00
  stepping  The stepping is encoded in bits 3..0.
    The stepping values are processor-specific.
EBX=aabb_ccddh  hardware revision (a.b-c.d), if 2000_0000h: see EAX=l 8086_0002h register EAX instead
ECX=xxxx_xxxxh  nominal core clock frequency (MHz)
EDX=xxxx_xxxxh  feature flags  description of indicated feature
  bits 31..4  reserved
  bit 3 (LRTI)  LongRun Table Interface
  bit 2 (???)  unknown
  bit 1 (LR)  LongRun
  bit 0 (BAD)  recovery CMS active (due to a failed upgrade)
Transmeta EAX= 8086_0002h
輸入  EAX=8086_0002h  得到處理器信息
輸出  EAX  xxxx_xxxxh  reserved or hardware revision (xxxxxxxxh)
see EAX=l 8086_0001h register EBX for details
EBX  aabb_ccddh  software revision, part 1/2 (a.b.c-d-x)
ECX  xxxx_xxxxh  software revision, part 2/2 (a.b.c-d-x)
Transmeta EAX=8086_0003h, 8086_0004h, 8086_0005h, and 8086_0006h
輸入  EAX=8086_0003h  得到信息字符串第一部分
EAX=8086_0004h  得到信息字符串第一部分
EAX=8086_0005h  得到信息字符串第一部分
EAX=8086_0006h  得到信息字符串第一部分
輸出  EAX-EBX-ECX-EDX  信息字符串 #1
  Transmeta  20000805 23:30 official release 4.1.4#2 (例子)
說明  說明
#1  以00h為結(jié)尾的字符串.
Transmeta EAX= 8086_0007h
輸入  EAX=8086_0007h  得到處理器信息
輸出  EAX  xxxx_xxxxh  當(dāng)前時鐘頻率 (MHz)
EBX  xxxx_xxxxh  當(dāng)前電壓 (mV)
ECX  xxxx_xxxxh  當(dāng)前占用率 (0..100%)
EDX  xxxx_xxxxh  當(dāng)前的延遲 (fs)
神秘的功能 EAX= 8FFF_FFFEh
輸入  EAX=8FFF_FFFEh  未知 #1
輸出  EAX  0049_4544h  DEI (according to one source: Divide Et Impera = Divide And Rule)
EBX  0000_0000h  保留
ECX  0000_0000h  保留
EDX  0000_0000h  保留
說明  說明
#1  這個方法僅僅被 AMD K6 支持.
神秘的功能EAX= 8FFF_FFFFh
輸入  EAX=8FFF_FFFFh  未知 #1
輸出  EAX
EBX
ECX
EDX  string  NexGenerationAMD
說明  說明
#1  這個方法只被he AMD K6支持.
其他
輸入  EAX=xxxx_xxxxh  其他
輸出  EAX=xxxx_xxxxh
EBX=xxxx_xxxxh
ECX=xxxx_xxxxh
EDX=xxxx_xxxxh  不明確
代碼如下:
type
TCPUIDResult = packed record
  EAX: DWord;
  EBX: DWord;
  ECX: DWord;
  EDX: DWord;
end;
TCPUInfo =packed record
  Name: string[48];
  Brand: Word;
  APIC: DWORD;
  Vendor: string[12];
  Frequency: Real;
  Family: integer;
  Model: integer;
  Stepping: integer;
  EFamily: integer;
  EModel: integer;
  EStepping: integer;
  MMX: Boolean;
  MMXPlus: Boolean;
  AMD3DNow: Boolean;
  AMD3DNowPlus: Boolean;
  SSE: Boolean;
  SSE2: Boolean;
  IA64: Boolean;
  X86_64: Boolean;
end;

function CPUID(EAX: DWord): TCPUIDResult;
var
rEAX, rEBX, rECX, rEDX: DWord;
begin
asm
  push EAX
  push EBX
  push ECX
  push EDX
  mov EAX,EAX
  //******************************************************
  //cpuid指令,因為Delphi的匯編編譯器沒有內(nèi)置該指令,
  //所以用該指令的機器語言代碼$0F,$A2來實現(xiàn)
  //******************************************************
  db $0F,$A2
  mov rEAX,EAX
  mov rEBX,EBX
  mov rECX,ECX
  mov rEDX,EDX
  pop EDX
  pop ECX
  pop EBX
  pop EAX
end;
Result.EAX := rEAX;
Result.EBX := rEBX;
Result.ECX := rECX;
Result.EDX := rEDX;
end;

function GetCPUSpeed: Real;
const
timePeriod        = 1000;
var
HighFreq, TestFreq, Count1, Count2: int64;
TimeStart         : integer;
TimeStop          : integer;
ElapsedTime       : dword;
StartTicks        : dword;
EndTicks          : dword;
TotalTicks        : dword;
begin
StartTicks := 0;
EndTicks := 0;
if QueryPerformanceFrequency(HighFreq) then
begin

  TestFreq := HighFreq div 100;

  QueryPerformanceCounter(Count1);
  repeat
    QueryPerformanceCounter(Count2);
  until Count1 <> Count2;
  asm
    push ebx
    xor eax,eax
    xor ebx,ebx
    xor ecx,ecx
    xor edx,edx
    db $0F,$A2               /// cpuid
    db $0F,$31               /// rdtsc
    mov StartTicks,eax
    pop ebx
  end;

  repeat
    QueryPerformanceCounter(Count1);
  until Count1 - Count2 >= TestFreq;

  asm
    push ebx
    xor eax,eax
    xor ebx,ebx
    xor ecx,ecx
    xor edx,edx
    db $0F,$A2               /// cpuid
    db $0F,$31               /// rdtsc
    mov EndTicks,eax
    pop ebx
  end;

  ElapsedTime := MulDiv(Count1 - Count2, 1000000, HighFreq);
end
else
begin
  timeBeginPeriod(1);
  TimeStart := timeGetTime;

  repeat
    TimeStop := timeGetTime;
  until TimeStop <> TimeStart;

  asm
    push ebx
    xor eax,eax
    xor ebx,ebx
    xor ecx,ecx
    xor edx,edx
    db $0F,$A2               /// cpuid
    db $0F,$31               /// rdtsc
    mov StartTicks,eax
    pop ebx
  end;

  repeat
    TimeStart := timeGetTime;
  until TimeStart - TimeStop >= timePeriod;

  asm
    push ebx
    xor eax,eax
    xor ebx,ebx
    xor ecx,ecx
    xor edx,edx
    db $0F,$A2               /// cpuid
    db $0F,$31               /// rdtsc
    mov EndTicks,eax
    pop ebx
  end;
  timeEndPeriod(1);

  ElapsedTime := (TimeStart - TimeStop) * 1000;
end;
TotalTicks := EndTicks - StartTicks;
result := TotalTicks / ElapsedTime;
end;

function getCPUInfo: TCPUInfo;
type
TRegChar = array[0..3] of char;
var
lvCPUID           : TCPUIDResult;
I                 : Integer;
begin
lvCPUID := CPUID(0);
Result.Vendor := TRegChar(lvCPUID.EBX) + TRegChar(lvCPUID.EDX) +
  TRegChar(lvCPUID.ECX);
lvCPUID := CPUID(1);
Result.Frequency := GetCPUSpeed;
Result.Family := (lvCPUID.EAX and $F00) shr 8;
Result.Model := (lvCPUID.EAX and $78) shr 4;
Result.Stepping := (lvCPUID.EAX and $F);
Result.EFamily := (lvCPUID.EAX and $7800000) shr 20;
Result.EModel := (lvCPUID.EAX and $78000) shr 16;
Result.EStepping := (lvCPUID.EAX and $F);
Result.APIC := (lvCPUID.EBX and $1FE00000) shr 23;
Result.Brand := lvCPUID.EBX and $7F;
Result.MMX := (lvCPUID.EDX and $800000) = $800000;
Result.SSE := (lvCPUID.EDX and $2000000) = $2000000;
Result.SSE2 := (lvCPUID.EDX and $4000000) = $4000000;
Result.IA64 := (lvCPUID.EDX and $40000000) = $40000000;
lvCPUID := CPUID($80000001);
Result.MMXPlus := (lvCPUID.EDX and $800000) = $800000;
Result.AMD3DNow := (lvCPUID.EDX and $10000000) = $10000000;
Result.AMD3DNowPlus := (lvCPUID.EDX and $8000000) = $8000000;
Result.X86_64 := (lvCPUID.EDX and $40000000) = $40000000;
if (Result.Vendor = 'GenuineIntel') and ((Result.Family <> 15) or
  (Result.EFamily <> 0)) then
  Result.Name := Result.Vendor + ' Processor'
else
begin
  Result.Name := '';
  for i := 2 to 4 do
  begin
    lvCPUID := CPUID($80000000 + i);
    Result.Name := Result.Name +
      TRegChar(lvCPUID.EAX) +
      TRegChar(lvCPUID.EBX) +
      TRegChar(lvCPUID.ECX) +
      TRegChar(lvCPUID.EDX);
  end;
  Result.Name := Trim(Result.Name);
end;
end;

procedure TForm1.FormShow(Sender: TObject);

procedure WriteSupport(Edit: TEdit; Sup: Boolean);
begin
  if Sup then
    edit.Text := '支持'
  else
    edit.Text := '不支持';
end;
var
CPU               : TCPUInfo;
begin
CPU := getCPUInfo;
EditCPUName.Text := CPU.Name;
EditVendor.Text := CPU.Vendor;
EditF.Text := Inttostr(CPU.Family);
EditM.Text := Inttostr(CPU.Model);
EditStep.Text := Inttostr(CPU.Stepping);
EditFE.Text := Inttostr(CPU.EFamily);
EditME.Text := Inttostr(CPU.EModel);
EditStepE.Text := Inttostr(CPU.EStepping);
Edit33.Text := Inttostr(CPU.APIC);
EditBrand.Text := Inttostr(CPU.Brand);
EditSpeed.Text := FormatFloat('###.##', CPU.Frequency);
WriteSupport(EditMMX, CPU.MMX);
WriteSupport(EditSSE, CPU.SSE);
WriteSupport(EditSSE2, CPU.SSE2);
WriteSupport(EditIA64, CPU.IA64);
WriteSupport(EditMMXp, CPU.MMXPlus);
WriteSupport(Edit3DNow, CPU.AMD3DNow);
WriteSupport(Edit3DNowp, CPU.AMD3DNowPlus);
WriteSupport(EditX86_64, CPU.X86_64);
end;

一個真正的CPU檢測軟件還要能夠檢測到緩存信息等等。大家可以參考上面表格所示的參數(shù),在這些代碼中作擴展。

CPU的資料好難找啊。Intel和AMD得還好一些,其他公司的簡直是大海撈針。我盡力了,只能整理到這些了。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
簡明x86匯編語言教程(3)
簡明x86匯編語言教程
CPU阿甘:函數(shù)調(diào)用的秘密
匯編語言之寄存器(詳細(xì)介紹)
x264_cpu_detect
獲取CPU信息
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服