80x86系プロセッサの命令の一つで、CPUの種類などを得ることができる。互換CPUでも利用可能。
この命令は、i386末期から利用可能となった。公式にはi486以降対応。
フラグレジスタ(EFLAGS)のビット21が変更可能である場合に命令が利用できる。オペコードは0fh、0a2h、の2バイトである。
この命令を使うとCPUの種類を表わすコードやプロセッサシリアルナンバ、そのCPUが持つ機能、メーカーなどを取得することができる。
実際には、EAXレジスタに取得したい情報の番号を入れ、CPUID命令を実行すると、EAXに応じた内容が各レジスタに返る。
利用できるEAXの範囲は、CPUID命令にて取得できる。
まずEAX=0でCPUID命令を実行すると、EAXに利用できる最大の番号(例えばEAX=2)が返る。
また拡張で、EAX=8000_0000でCPUID命令を実行すると、EAXに利用できる最大の番号(例えばEAX=8000_0004)が返る。
この範囲を越える値を入れて実行した場合、返却値は未定義となる。無効オペコード例外などは生成されないので注意。
EAX=0でCPUIDを実行すると、次の値が得られる。CPUID対応の全CPU対象。
EAX=1でCPUIDを実行すると、次の値が得られる。CPUID対応の全CPU対象。
| 0 | SSE3 | Streaming SIMD Extensions 3 |
| 1 | 予約 | |
| 2 | 予約 | |
| 3 | MON | MONITOR/MWAIT Instructions |
| 4 | DSCPL | CPL Qualified Debug Store |
| 5 | VMX | Virtual Machine Extensions |
| 6 | SMX | Safer Mode Extentions |
| 7 | EST | Enhanced SpeedStep Technology |
| 8 | TM2 | Thermal Monitor 2 |
| 9 | SSSE3 | Supplemental SSE3 |
| 10 | CID | Context ID |
| 11 | 予約 | |
| 12 | 予約 | |
| 13 | CX16 | CMPXCHG16B |
| 14 | ETPRD | MISC_ENABLE.ETPRD |
| 15 | PDCM | Performance Debug Capability MSR |
| 16 | 予約 | |
| 17 | 予約 | |
| 18 | DCA | Direct Cache Access |
| 19 | SSE4.1 | Streaming SIMD Extensions 4.1 |
| 20 | SSE4.2 | Streaming SIMD Extensions 4.2 |
| 21 | x2APIC | x2APIC |
| 22 | 予約 | |
| 23 | POPCNT | Population Count Instruction |
| 24 | 予約 | |
| 25 | 予約 | |
| 26 | 予約 | |
| 27 | 予約 | |
| 28 | 予約 | |
| 29 | 予約 | |
| 30 | 予約 | |
| 31 | 予約 | |
| 32 | 予約 |
| 0 | FPU | Floating-point unit on-chip |
| 1 | VME | Virtual Mode Extension |
| 2 | DE | Debugging Extension |
| 3 | PSE | Page Size Extension |
| 4 | TSC | Time Stamp Counter |
| 5 | MSR | Model Specific Registers |
| 6 | PAE | Physical Address Extension |
| 7 | MCE | Machine Check Extension |
| 8 | CXB | CMPXCHG8B Instruction |
| 9 | APIC | On-chip APIC Hardware |
| 10 | 予約 | |
| 11 | SEP | Fast System Call |
| 12 | MTRR | Memory Type Range Registers |
| 13 | PGE | Page Global Enable |
| 14 | MCA | Machine Check Architecture |
| 15 | CMOV | Conditional Move Instruction |
| 16 | PAT | Page Attribute Table |
| 17 | PSE36 | 36-bit Page Size Extension |
| 18 | PSN | プロセッサシリアルナンバ |
| 19 | CLFL | CLFLUSH Instruction |
| 20 | 予約 | |
| 21 | DTES | Debug Trace and EMON Store MSRs |
| 22 | ACPI | Advanced Configuration and Power Interface |
| 23 | MMX | Intel Architecture MMX technology |
| 24 | FXSR | Fast floating point save and restore |
| 25 | SSE | Streaming SIMD Extensions |
| 26 | SSE2 | Streaming SIMD Extensions 2 |
| 27 | SS | Self-Snoop |
| 28 | HTT | ハイパー・スレッディング・テクノロジ |
| 29 | TM1 | Thermal Monitor |
| 30 | IA-64 | IA-64 Processor Capable |
| 31 | PBE | Pending Break Enable |
EAX=2でCPUIDを実行すると、次の値が得られる。CPUID対応の全CPU対象。
EAX=3でCPUIDを実行すると、次の値が得られる。これは、プロセッサシリアルナンバ対応製品のみで有効で、事前にEAX=0で最大入力値を確認せねばならない。
Transmetaの場合、EAXとEBXにも値を返す。CrusoeではEBXに、EfficeonではEAXとEBXに返される。
基本CPUID情報の最大入力値が4〜5以上で、かつIA32_CR_MISC_ENABLES.BOOT_NT4(ビット22)が0(デフォルト)時には、EAX=4またはEAX=5で、次の値が得られる。
EAX=4では、引数ECXが必要で、0ならL1、1ならL2の情報を得る、といった動作をする。
いずれも、MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。
EAX=6でCPUIDを実行すると、パワーマネージメント情報が得られる。基本CPUID情報の最大入力値が6以上の場合のみ有効。
詳細不明。
EAX=9でCPUIDを実行すると、DCAパラメータが得られる。基本CPUID情報の最大入力値が9以上の場合のみ有効。
MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。
EAX=10でCPUIDを実行すると、DCAパラメータが得られる。基本CPUID情報の最大入力値が10以上の場合のみ有効。
EDXのビット12〜0は、リビジョン2以降で有効。
MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。
EAX=11でCPUIDを実行すると、topology enumeration情報が得られる。基本CPUID情報の最大入力値が11以上の場合のみ有効。
引数としてCLを求める。CL=0でCPUIDを実行するとSMTの情報が得られる。
MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。
これは、元々はAMDが自社プロセッサの情報取得用に作った仕様である。
Intel製品にない機能の有無を表現するのに、Intelの用意したフラグの空きを使っては、のちのち競合する恐れがあったためである。このため、この仕様においてビットの定義についてはAMD側に主導権があるようである。なお、IntelもPentium 4以降で対応するようになった。
EAX=80000000HでCPUIDを実行すると、次の値が得られる。拡張機能対応チェックも兼ねている。
拡張CPUIDに対応していない場合、EAXは80000000Hよりも小さな値を返す。
IntelではEBX,ECX,EDXは0だが、他のブランドではEAX=0000_0000と同じベンダー文字列を返すことがある(AMD、Transmeta、NSCのGX2など)。
EAX=80000001HでCPUIDを実行すると、次の値が得られる。対応しているCPUのみ。
| 0 | AHF64 | PM64でのLAHF/SAHFの使用可否 |
| 1 | CMP | HTT=1がHTT(0)かCMP(1)を示す |
| 2 | SVM | Secure Virtual Machine |
| 3 | EAS | Extended APIC |
| 4 | CR8D | LOCK MOV CR0 means MOV CR8 |
| 5 | LZCNT | LZCNT |
| 6 | SSE4a | Streaming SIMD Extensions 4a |
| 7 | MASSE | Misaligned SSE |
| 8 | 3DNow!- | PREFETCHとPREFETCHW |
| 9 | OSVW | OS Visible Workaround |
| 10 | IBS | instruction based sampling |
| 11 | SSE5 | Streaming SIMD Extensions 5 |
| 12 | SKINIT | SKINIT |
| 13 | WDT | ウォッチドッグタイマ |
| 14 | 予約 | |
| 15 | 予約 | |
| 16 | 予約 | |
| 17 | 予約 | |
| 18 | 予約 | |
| 19 | 予約 | |
| 20 | LAHF | LAHF/SAHFの使用可否 (Intel) |
| 21 | 予約 | |
| 22 | 予約 | |
| 23 | 予約 | |
| 24 | 予約 | |
| 25 | 予約 | |
| 26 | 予約 | |
| 27 | 予約 | |
| 28 | 予約 | |
| 29 | 予約 | |
| 30 | 予約 | |
| 31 | 予約 | |
| 32 | 予約 |
| 0 | Feature flags(EAX=0000_0001、EDX) 0〜9と同じ | |
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 | ||
| 6 | ||
| 7 | ||
| 8 | ||
| 9 | ||
| 10 | 予約 | |
| 11 | SEP | SYSCALL/SYSRET Instructions |
| 12 | Feature flags 12〜18と同じ | |
| 13 | ||
| 14 | ||
| 15 | ||
| 16 | ||
| 17 | ||
| 18 | 予約 | |
| 19 | MP | Multiprocessing Capable |
| 20 | NX | No-execute Page Protection |
| 21 | 予約 | |
| 22 | MMX+ | MMX Instruction Extensions |
| 23 | Feature flags 23〜24と同じ | |
| 24 | ||
| 25 | FFXSR | Fast FXSAVE/FXRSTOR |
| 26 | P1GB | 1GB Page Size |
| 27 | TSCP | RDTSCP Instructions |
| 28 | 予約 | |
| 29 | LM | AMD64/Intel 64 ロングモード |
| 30 | 3DNow!+ | 3DNow! Instruction Extentions (Enhanced 3DNow!) |
| 31 | 3DNow! | 3DNow! Instructions |
Feature flagsと同じ、とされている領域については、CPU種類によっては別の情報が格納されていることもある。
EAX=80000002〜4HでCPUIDを実行すると、EAX,EBX,ECX,EDXにプロセッサブランド文字列が得られる。最大48バイト。対応しているCPUのみ。
EAX=80000005HでCPUIDを実行すると、1次キャッシュの情報が得られる。対応しているCPUのみ。
EAX=80000006HでCPUIDを実行すると、2次キャッシュ、3次キャッシュの情報が得られる。対応しているCPUのみ。
EAX=80000007HでCPUIDを実行すると、電源管理関係の機能の情報が得られる。対応しているCPUのみ。
| 0 | TS | Temperature Sensor |
| 1 | FID | Frequency ID Control |
| 2 | VID | Voltage ID Control |
| 3 | TTP | Thermal Trip |
| 4 | TM | Thermal Monitoring |
| 5 | STC | Software Thermanl Control |
| 6 | MUL | 100MHz Multiplier Steps |
| 7 | HWPS | Hardware P-State Control |
| 8 | ITSC | Invariant TSC |
| 9 | 予約 | |
| 10 | 予約 | |
| 11 | 予約 | |
| 12 | 予約 | |
| 13 | 予約 | |
| 14 | 予約 | |
| 15 | 予約 | |
| 16 | 予約 | |
| 17 | 予約 | |
| 18 | 予約 | |
| 19 | 予約 | |
| 20 | 予約 | |
| 21 | 予約 | |
| 22 | 予約 | |
| 23 | 予約 | |
| 24 | 予約 | |
| 25 | 予約 | |
| 26 | 予約 | |
| 27 | 予約 | |
| 28 | 予約 | |
| 29 | 予約 | |
| 30 | 予約 | |
| 31 | 予約 | |
| 32 | 予約 |
EAX=80000008HでCPUIDを実行すると、拡張アドレス長機能の情報が得られる。対応しているCPUのみ。
EAX=8000000AHでCPUIDを実行すると、SVM情報が得られる。対応しているCPUのみ。
EAX=80000019HでCPUIDを実行すると、TLBコンフィギュレーションディスクリプタが得られる。対応しているCPUのみ。
EAX=8000001AHでCPUIDを実行すると、パフォーマンス最適化に関する情報が得られる。対応しているCPUのみ。
AMDの拡張とは別に、TransmetaとVIAは、それぞれ独自のFeature Flagを提供している。
EAX=80860000HでCPUIDを実行すると、次の値が得られる。拡張機能対応チェックも兼ねている。
拡張CPUIDに対応していない場合、EAXは80860000Hよりも小さな値を返す。
EAX=80860001HでCPUIDを実行すると、CPUの情報を返す。対応しているCPUのみ。
EAX,EBXにCPUの種類、ECXにコアクロック周波数、EDXにFeature Flagが得られる。EDXの内容は次の通り。
| 0 | BAD | recovery CMS active |
| 1 | LR | LongRun |
| 2 | 予約 | |
| 3 | LRTI | LongRun Table Interface |
| 4 | 予約 | |
| 5 | 予約 | |
| 6 | 予約 | |
| 7 | 予約 | |
| 8 | 予約 | |
| 9 | 予約 | |
| 10 | 予約 | |
| 11 | 予約 | |
| 12 | 予約 | |
| 13 | 予約 | |
| 14 | 予約 | |
| 15 | 予約 | |
| 16 | 予約 | |
| 17 | 予約 | |
| 18 | 予約 | |
| 19 | 予約 | |
| 20 | 予約 | |
| 21 | 予約 | |
| 22 | 予約 | |
| 23 | 予約 | |
| 24 | 予約 | |
| 25 | 予約 | |
| 26 | 予約 | |
| 27 | 予約 | |
| 28 | 予約 | |
| 29 | 予約 | |
| 30 | 予約 | |
| 31 | 予約 | |
| 32 | 予約 |
EAX=80860003〜6HでCPUIDを実行すると、CPUの情報文字列を返す。対応しているCPUのみ。
EAX=80860007HでCPUIDを実行すると、CPUの情報を返す。対応しているCPUのみ。
EAX=C0000000HでCPUIDを実行すると、次の値が得られる。拡張機能対応チェックも兼ねている。
拡張CPUIDに対応していない場合、EAXはC0000000Hよりも小さな値を返す。
EAX=C0000001HでCPUIDを実行すると、EDXにFeature Flagが得られる。対応しているCPUのみ。
| 0 | AIS | Alternate Instruction Set |
| 1 | AIS-E | Alternate Instruction Set enabled |
| 2 | RNG | Random Number Generator |
| 3 | RNG-E | Random Number Generator enabled |
| 4 | LH | LongHaul MSR 0000_110Ah |
| 5 | FEMMS | FEMMS |
| 6 | ACE | Advanced Cryptography Engine |
| 7 | ACE-E | Advanced Cryptography Engine enabled |
| 8 | MM/HE | Montgomery Multiplier and Hash Engine |
| 9 | MM/HE-E | Montgomery Multiplier and Hash Engine enabled |
| 10 | 予約 | |
| 11 | 予約 | |
| 12 | 予約 | |
| 13 | 予約 | |
| 14 | 予約 | |
| 15 | 予約 | |
| 16 | 予約 | |
| 17 | 予約 | |
| 18 | 予約 | |
| 19 | 予約 | |
| 20 | 予約 | |
| 21 | 予約 | |
| 22 | 予約 | |
| 23 | 予約 | |
| 24 | 予約 | |
| 25 | 予約 | |
| 26 | 予約 | |
| 27 | 予約 | |
| 28 | 予約 | |
| 29 | 予約 | |
| 30 | 予約 | |
| 31 | 予約 | |
| 32 | 予約 |