CPUの判別方法

 ソフトウェア的にCPUを判断するには、CPUIDという命令を使う。
 32bitレジスタであるEAXに値をいれてからCPUID命令を実行するとEAX,EBX,ECX,EDXのそれぞれにCPU依存の値が返るので、それを見てCPUを判断する。
 一番簡単なのは、VendorIDとFamily-Model-Steppingを見て判断する方法。Intel製のCPUであれば、VenderIDには'GenuineIntel'が入り、Family以下にはCPU依存の数字が入る。例えばPentium Proであれば6-1-9。
 ただし、この方法だけではCeleronとPentiumIIIなどの判断が出来ない!!その解決策は次回以降に


【Family-Model-Steppingの例(intelのみ)】

  4-0-x  486 DX
  4-1-x  486 DX
  4-2-x  486 SX
  4-3-x  487 / DX2 / DX2 OverDrive
  4-4-x  486 SL
  4-5-x  SX2
  4-7-x  Write-Back Enhanced DX2
  4-8-x  DX4 / DX4 OverDrive
  5-1-x  Pentium 60 / 66
  5-2-x  Pentium
  5-3-x  Pentium OverDrive for 486
  5-4-x  MMX Pentium
  6-1-x  Pentium Pro
  6-3-x  Pentium II
  6-5-x  Pentium II / Pentium II Xeon / Celeron
  6-6-x  Celeron
  6-7-x  Pentium III / Petium III Xeon
  6-8-x  Pentium III / Petium III Xeon / Celeron
  6-A-x  Petium III Xeon
  6-B-x  Pentium II OverDrive
  F-0-x  Pentium 4







 CPUID命令と返り値の例

   【EAX = 0のCPUID実行結果】

     12文字で表されるVenderID

     EBX   0- 7bitにVendorIDの 1文字目 ex.'G'
     EBX   8-15bitにVendorIDの 2文字目 ex.'e'
     EBX  16-23bitにVendorIDの 3文字目 ex.'n'
     EBX  24-31bitにVendorIDの 4文字目 ex.'u'

     EDX   0- 7bitにVendorIDの 5文字目 ex.'i'
     EDX   8-15bitにVendorIDの 6文字目 ex.'n'
     EDX  16-23bitにVendorIDの 7文字目 ex.'e'
     EDX  24-31bitにVendorIDの 8文字目 ex.'I'

     ECX   0- 7bitにVendorIDの 9文字目 ex.'n'
     ECX   8-15bitにVendorIDの10文字目 ex.'t'
     ECX  16-23bitにVendorIDの11文字目 ex.'e'
     ECX  24-31bitにVendorIDの12文字目 ex.'l'


   【EAX = 1のCPUID実行結果】

     CPUのType,Model,Familyなど

     EAX   0- 3bitにCPUのStepping
     EAX   4- 7bitにCPUのModel
     EAX   8-11bitにCPUのFamily
     EAX  12-13bitにCPUのProcessor Type
     EAX  14-15bitは未使用
     EAX  16-19bitにCPUのExtended Model
     EAX  20-27bitにCPUのExtended Family
     EAX  28-31bitは未使用

     EDX   0bitは「Floating-point unit on-chip」(FPU)
     EDX   1bitは「Virtual Mode Extension」(VME)
     EDX   2bitは「Debugging Extension」(DE)
     EDX   3bitは「Page Size Extension」(PSE)
     EDX   4bitは「Time Stamp Counter」(TSC)
     EDX   5bitは「Model Specific Registers」(MSR)
     EDX   6bitは「Physical Address Extension」(PAE)
     EDX   7bitは「Machine Check Extension」(MCE)
     EDX   8bitは「CMPXCHG8 Instruction」(CXB)
     EDX   9bitは「On-chip APIC Hardware」(APIC)
     EDX  10bitは未使用
     EDX  11bitは「Fast System Call」(SEP)
     EDX  12bitは「Memory Type Range Registers」(MTRR)
     EDX  13bitは「Page Global Enable」(PGE)
     EDX  14bitは「Machine Check Architecture」(MCA)
     EDX  15bitは「Conditional Move Instruction」(CMOV)
     EDX  16bitは「Page Attribute Table」(PAT)
     EDX  17bitは「36-bit Page Size Extension」(PSE-36)
     EDX  18bitは「Processor serial number」(PSN)
     EDX  19bitは「CLFLUSH Instruction」(CLFLUSH)
     EDX  20bitは未使用
     EDX  21bitは「Debug Trace Store」(DTS)
     EDX  22bitは「Advcd. Configrtin. & Power Manage. I/F.」(ACPI)
     EDX  23bitは「Intel Architecture MMX technology」(MMX)
     EDX  24bitは「Fast floating point save and restore」(FXSR)
     EDX  25bitは「Streaming SIMD Extensions」(SSE)
     EDX  26bitは「Streaming SIMD Extensions 2」(SSE2)
     EDX  27bitは「Self-Snoop」(SS)
     EDX  28bitは未使用
     EDX  29bitは「Thermal Monitor」(TM)
     EDX  30bitは未使用
     EDX  31bitは未使用


カテゴリー「VC++ TIPS」 のエントリー