ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
x86系プロセッサーの命令の一つで、CPUの種類などを得ることができる。互換CPUでも利用可能。
この命令は、i386末期から利用可能となった。公式にはi486以降対応。
元々、CPUID命令対応以前のCPUでも、CPUリセット時にDXレジスターに16ビットでCPUの種類を表わすIDがセットされていた(これはEAX=1としてCPUID命令で得られる32ビット値中の下位16ビットそのままである)。これを32ビットに拡張し、また他の情報も得られるようにし、命令で取得可能にしたものである。
具体的には、フラグレジスター(EFLAGS)のビット21が変更可能である場合に命令が利用できる。オペコードは「0F A2」の2バイトである。
この命令を使うとCPUの種類を表わすコードやプロセッサーシリアルナンバー、そのCPUが持つ機能、メーカーなどを取得することができる。
cpuidという命令であることからも分かるように、CPUIDを得ることが主たる目的となる命令である。詳細は後述するが、これはEAX=1でcpuidを呼び出してEAXに返る32ビットの値である。
下位16ビットが従来から使われていたコードで、上位16ビットは拡張された内容である。
このコードは、最下位4ビットがステッピング、つぎの4ビットがモデル、次の4ビットがファミリー、残りの4ビットがタイプと予備(CPUの種類により微妙に違っている)となる。
CPUの大まかな種類はファミリーで表わし、i486=4、Pentiumシリーズ=5、Pentium Pro、Peintium Ⅱ〜Ⅲまで=6、Pentium 4=15となる。そして、各ファミリー中の細かい違い(SXとDXや、Pentium ⅡとⅢの違いなど)はモデルで表わされる。ステッピングはダイのバージョンなどを表わすものである。
実際には、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対象。
i486以降の内容は次のとおり。
0 | SSE3 | ストリーミングSIMD拡張命令3対応 |
1 | PCLMULQDQ | PCLMULQDQ Instruction |
2 | DTES64 | 64bit Debug Trace and EMON Store MSRs |
3 | MONITOR | MONITOR/MWAIT命令対応 |
4 | DS-CPL | CPLの条件を満たすデバッグストア拡張機能 |
5 | VMX | Intel VT (Virtual Machine Extensions) |
6 | SMX | Safer Mode Extensions |
7 | EST | 拡張版 Intel SpeedStep テクノロジー |
8 | TM2 | 温度モニター2の温度制御回路(TCC)を実装 |
9 | SSSE3 | Supplemental SSE3 |
10 | CID | コンテキストID、BIOSからL1データキャッシュモードを設定可 |
11 | 予約 | |
12 | FMA | FMA |
13 | CX16 | CMPXCHG16B命令対応 |
14 | xTPR | タスク・プライオリティ・メッセージの送信を停止する機能に対応 |
15 | PDCM | Performance/Debug Capability MSR |
16 | 予約 | |
17 | PCID | Process-context Identifiers |
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 | MOVBE | MOVBE |
23 | POPCNT | Population Count Instruction |
24 | TSC-Deadline | TSC-Deadline |
25 | AESNI | AES |
26 | XSAVE | CR4.OSXSAVE |
27 | OSXSAVE | CR4.OSXSAVE |
28 | AVX | AVX |
29 | F16C | 16ビット浮動小数点変換命令 |
30 | RDRAND | RDRAND instruction |
31 | HYPERVISOR | 何らかのHYPERVISOR状態 |
0 | FPU | x87浮動小数点命令に対応するFPU機能 |
1 | VME | 仮想8086モード拡張機能 |
2 | DE | I/Oブレークポイントをサポートするデバッグ拡張機能 |
3 | PSE | 4Miバイトページをサポートするページサイズ拡張機構 |
4 | TSC | タイムスタンプ・カウンター、RDTSC命令に対応 |
5 | MSR | モデル固有レジスター、RDMSR命令、WRMSR命令 |
6 | PAE | 32ビットを超える物理アドレスをサポートする物理アドレス拡張機構 |
7 | MCE | マシンチェック例外(例外18)とCR4.MCEイネーブル・ビットに対応 |
8 | CX8 | CMPXCHG8命令のサポート |
9 | APIC | オンチップAPICハードウェアのサポート |
10 | 予約 | |
11 | SEP | 高速システムコール命令SYSENTER/SYSEXITに対応 |
12 | MTRR | メモリータイプ範囲レジスター(MTRR_CAPレジスター)対応 |
13 | PGE | ページ・グローバル・イネーブル、PDE内とPTE内でグローバル・ビットに対応 |
14 | MCA | マシン・チェック・アーキテクチャー(MCG_CAPレジスター)対応 |
15 | CMOV | 条件付MOVE命令、CMOVcc(FPU対応時はFCMOVccとFCOMI命令も)対応 |
16 | PAT | ページ属性テーブル対応 |
17 | PSE-36 | 36ビット・ページ・サイズ拡張機構 |
18 | PSN | プロセッサーシリアルナンバー対応かつ有効 |
19 | CLFSH | CLFLUSH命令対応 |
20 | 予約 | |
21 | DS | デバッグストア(アドレスへ/からの分岐履歴をメモリーバッファに書く機能)対応 |
22 | ACPI | ACPI機能対応 |
23 | MMX | MMXテクノロジー拡張命令セット対応 |
24 | FXSR | 高速浮動小数点セーブ/リストア命令FXSAVE/FXRSTOR対応 |
25 | SSE | ストリーミングSIMD拡張命令対応 |
26 | SSE2 | ストリーミングSIMD拡張命令2対応 |
27 | SS | 自己スヌープ対応 |
28 | HTT | ハイパースレッディング・テクノロジー機能を搭載 |
29 | TM | T温度モニターの自動温度制御回路(TCC)を実装 |
30 | IA-64 | IA-64 Processor Capable |
31 | PBE | ペンディング・ブレーク・イネーブルFERR#/PBE#ピン対応 |
現在のIA-32プロセッサーの仕様書では、ビット30は予約としか記載がない。IA-64は名を出すことも憚られる黒歴史だったらしい。
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ならL1D、1ならL2の情報、あるいは、0ならL1D、1ならL1I、2ならL2、を得る、といった動作をする。
いずれも、MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。
EAX=6でcpuidを実行すると、パワーマネージメント情報が得られる。基本CPUID情報の最大入力値が6以上の場合のみ有効。
ECXにサブリーフ番号を入れ、EAX=7でcpuidを実行すると、拡張Feature flags情報が得られる。基本CPUID情報の最大入力値が7以上の場合のみ有効。
今後の拡張も考慮し、ECXで最大4294967296種類の情報が得られるらしい。
0 | FSGSBASE | RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE |
1 | TSC_ADJUST | TSC adjustment MSR 0x3b |
2 | 予約 | |
3 | BMI1 | 1st group bit manipulation extensions |
4 | HLE | Hardware Lock Elision |
5 | AVX2 | AVX2 instructions |
6 | 予約 | |
7 | SMEP | Supervisor Mode Execution Protection |
8 | BMI2 | 2nd group bit manipulation extensions |
9 | ERMS | Enhanced REP MOVSB/STOSB |
10 | INVPCID | Invalidate Processor Context ID |
11 | RTM | Restricted Transactional Memory |
12 | 予約 | |
13 | 予約 | |
14 | MPX | Intel Memory Protection Extensions |
15 | 予約 | |
16 | AVX512F | |
17 | AVX512DQ | |
18 | RDSEED | The RDSEED instruction |
19 | ADX | The ADCX and ADOX instructions |
20 | SMAP | Supervisor Mode Access Prevention |
21 | AVX512IFMA52 | |
22 | 予約 | |
23 | CLFLUSHOPT | |
24 | 予約 | |
25 | PT | Intel Processor Trace |
26 | AVX512PF | |
27 | AVX512ER | |
28 | AVX512CD | |
29 | SHA | |
30 | AVX512BW | |
31 | AVX512VL |
0 | PREFETCHWT1 | |
1 | AVX512VBMI | |
2 | 予約 | |
3 | 予約 | |
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 | 予約 |
予約 (未使用)
EAX=9でcpuidを実行すると、DCA(Direct Cache Access)パラメーターが得られる。基本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以上の場合のみ有効。
引数としてECXを求める。ECX=0でcpuidを実行するとSMTの情報が得られる。
MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。
予約 (未使用)
EAX=13でcpuidを実行すると、extended state enumeration情報が得られる。基本CPUID情報の最大入力値が13以上の場合のみ有効。
引数としてECXを求める。0でメイン、1でサブ、2〜62でXCR0.nのsub情報が得られる。
MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。
ECXにサブリーフ番号を入れ、EAX=20(=14H)でcpuidを実行すると、Intel Processor Trace Enumeration情報が得られる。基本CPUID情報の最大入力値が20以上の場合のみ有効。
今後の拡張も考慮し、ECXで最大4294967296種類の情報が得られるらしい。
EAX=22(=16H)でcpuidを実行すると、CPUの周波数情報が得られる。基本CPUID情報の最大入力値が22以上の場合のみ有効。
後述する他社による実装EAX=8000_0000にIntelが対応するにあたり用意した範囲。未実装である。
これは、元々は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 | LAHF | 64ビットモードでのlahf/sahfの使用可否 |
1 | CMPL | HTT=1がHTT(0)かCMP(1)を示す |
2 | SVM | Secure Virtual Machine |
3 | EAS | Extended APIC |
4 | AMC8 | LOCK MOV CR0 means MOV CR8 |
5 | ABM | Advanced Bit Manipulation. LZCNT |
6 | SSE4A | Streaming SIMD Extensions 4a |
7 | MASSE | Misaligned SSE mode |
8 | PREFETCH | PREFETCHとPREFETCHW命令のサポート |
9 | OSVW | OS Visible Workaround |
10 | IBS | instruction based sampling |
11 | XOP | eXtended Operations |
12 | SKINIT | SKINITとSTGIのサポート |
13 | WDT | ウォッチドッグタイマーのサポート |
14 | 予約 | |
15 | LWP | Light Weight Profiling |
16 | FMA4 | 4 operands MAC instructions |
17 | TCE | translation cache extension |
18 | 予約 | |
19 | MSR | NodeId MSR |
20 | 予約 | |
21 | TBM | trailing bit manipulations |
22 | TOPOEXT | topology extensions CPUID leafs |
23 | PERFCTR_CORE | core performance counter extensions |
24 | PERFCTR_NB | NB performance counter extensions |
25 | 予約 | |
26 | 予約 | |
27 | 予約 | |
28 | PERFCTR_L2 | L2 performance counter extensions |
29 | 予約 | |
30 | 予約 | |
31 | 予約 |
0 | Feature flags(EAX=0000_0001、EDX) 0〜9と同じ | |
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | 予約 | |
11 | SYSCALL | syscall/sysret命令のサポート |
12 | Feature flags 12〜17と同じ | |
13 | ||
14 | ||
15 | ||
16 | ||
17 | ||
18 | 予約 | |
19 | MP | Multiprocessing Capable |
20 | NX/XD | No-execute Page Protection |
21 | 予約 | |
22 | MMX+ | MMX Instruction Extensions |
23 | Feature flags 23〜24と同じ | |
24 | ||
25 | FFXSR | FXSAVE/FXRSTOR命令オプティマイズ |
26 | P1GB | 1GB large pageの対応 |
27 | RDTSCP | RDTSCP命令とIA32_TSC_AUXのサポート |
28 | 予約 | |
29 | LM | AMD64/Intel 64 ロングモード |
30 | 3DNow!+ | 3DNow! Instruction Extensions (Enhanced 3DNow!) |
31 | 3DNow! | 3DNow! Instructions |
Feature flagsと同じ、とされている領域については、CPU種類によっては別の情報が格納されていることもある。
殆どがAMD用の情報ビットで、Intelの仕様書では、ECXのビット0と、EDXのビット11、20、26、27、29のみ明記があり、他は予約で値は0としている。
対応しているCPUでEAX=80000002〜4Hでcpuidを実行すると、EAX,EBX,ECX,EDXにプロセッサーブランド文字列が得られる。最大48バイト。
Intelのプロセッサーも対応している。
EAX=80000005Hでcpuidを実行すると、1次キャッシュの情報が得られる。対応しているCPUのみ。
Intelのプロセッサーは対応せず、予約で値は全て0としている。
EAX=80000006Hでcpuidを実行すると、2次キャッシュ、3次キャッシュの情報が得られる。対応しているCPUのみ。
Intelプロセッサーの仕様書では、次のような記載がある。
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 | 予約 |
Intelプロセッサーでは、ビット8(ITSC)のみ定義していたことがあったが、最新の資料ではなくなり、全ビットが予約で0となっている。
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 | 予約 |
EAX=80860002Hでcpuidを実行すると、プロセッサーの情報を返す。対応しているCPUのみ。
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_EN | Alternate Instruction Set enabled |
2 | RNG | Random Number Generator (XSTORE) |
3 | RNG_EN | Random Number Generator (XSTORE) enabled |
4 | LH | LongHaul MSR 0000_110Ah |
5 | FEMMS | FEMMS |
6 | ACE | Advanced Cryptography Engine (XCRYPT) |
7 | ACE_EN | Advanced Cryptography Engine (XCRYPT) enabled |
8 | ACE2 | Advanced Cryptography Engine v2 |
9 | ACE2_EN | ACE v2 enabled |
10 | PHE | PadLock Hash Engine |
11 | PHE_EN | PHE enabled |
12 | PMM | PadLock Montgomery Multiplier |
13 | PMM_EN | PMM enabled |
14 | 予約 | |
15 | 予約 | |
16 | 予約 | |
17 | 予約 | |
18 | 予約 | |
19 | 予約 | |
20 | 予約 | |
21 | 予約 | |
22 | 予約 | |
23 | 予約 | |
24 | 予約 | |
25 | 予約 | |
26 | 予約 | |
27 | 予約 | |
28 | 予約 | |
29 | 予約 | |
30 | 予約 | |
31 | 予約 |
コメントなどを投稿するフォームは、日本語対応時のみ表示されます