0から作るソフトウェア開発

日々勉強中。。。

0から作るOS開発

環境準備

環境設定

ブートローダ

カーネルローダ

GRUB

カーネル

ドライバーその他

Tips IA32(x86)汎用命令一覧 Cから始まる命令 CPUID命令

IA32(x86)汎用命令一覧

このサイトで挙げる命令は汎用命令の一覧となります

調べたい命令の頭文字をクリックすると、表の下に詳細が表示されます
IA32(x86)汎用命令一覧
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 補足


Cから始まる命令

クリックすると、表の下に詳細が表示されます
Cから始まる命令一覧
命令 代表命令の説明
(英語)
代表命令の説明
(日本語)
CALL Call Procedure 指定したアドレスをコールする
CBW Convert Byte to Word 符号拡張する
CDQ Convert Doubleword to Quadword 符号拡張する
CLC Clear Carry Flag CFフラグをクリアする
CLD Clear Direction Flag DFフラグをクリアする
CLI Clear Interrupt Flag 割り込みフラグをクリアする
CLTS Clear Task-Switched Flag in CR0 CR0のTSフラグをクリアする
CMC Complement Carry Flag CFフラグの状態を反転する
CMP Compare Two Operands 比較を行う
CMPS/CMPSB/CMPSW/CMPSD Compare String Operands 文字列を比較する
CMPXCHG Compare and Exchange 値を比較し、値を交換する
CMPXCHG8B Compare and Exchange 8 Bytes 64ビット値を比較し、値を交換する
CPUID CPU Identification プロセッサの識別情報と機能情報を取得する
CWD Convert Word to Doubleword 符号拡張する
CWDE Convert Word to Doubleword 符号拡張する


CPUID命令(CPU Identification)

CPUID命令
オペコード 命令 説明
0xF8 CPUID 最初に入力された値に応じてEAXレジスタに、プロセッサの識別情報と機能情報をEAX、EBX、ECX、EDXの各レジスタに格納します


詳細

EFLAGSのIDフラグ(ビット21)は、CPUID命令のサポート有無を示しています。プログラムでIDフラグを設定、クリアできる場合

そのプログラムを実行するプロセッサはCPUID命令をサポートしていることになります



CPUID命令は、プロセッサの識別情報と機能情報をEAX、EBX、ECX、EDXの各レジスタに格納します

各レジスタの値は、この命令を実行する前のEAXの値によって変わります。例えば、下記の擬似コードはEAXに0x00をロードし

CPUID命令が最大の戻り値とベンダ識別文字列を各レジスタに格納するようにします


    MOV EAX, 00H
    CPUID



下記に「CPUID命令が格納する情報(EAXの値に基づいて、格納される情報)」と

「IA-32プロセッサに対するCPUID命令のEAX最大値

(CPUID命令が実装されているIA-32プロセッサの各ファミリについて、CPUID命令が認識する最大入力値」を

示しています



基本機能情報と拡張機能情報の2つの情報が格納されます。入力された値より大きな値が特定のプロセッサに

有効である場合、基本情報についての最大値に対する情報が格納されます。例えばIntel® Pentium4™

プロセッサの場合には、0x80000005以上の値を入力すると、入力値が2のときの情報が格納されます

CPUID命令はどの特権レベルでも実行でき、命令を逐次実行することができます。命令を逐次実行することにより、

前の命令でフラグ、レジスタ、メモリに対して値が変更された場合、その変更が全て完了してから次の命令が

フェッチされて実行されることが保証されています



下記資料も参照してください。

「IA-32 インテル アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル」下巻の

第7章「シリアル化命令」を参照してください



「AP-485、インテル プロセッサの識別と CPUID 命令」(資料番号241618J)

を参照してください

CPUID命令が格納する情報

CPUID命令が格納する情報
EAXの初期値 格納されるプロセッサに関する情報
CPUID基本情報
0x00 EAX CPUID基本情報の最大入力値
(下記表「IA-32プロセッサに対するCPUID命令のEAX最大値」を参照してください)
EBX "Genu"
ECX "ntel"
EDX "intel"
0x01 EAX バージョン情報:タイプ、ファミリ、モデル、ステッピングID
(下図「CPUID命令によってEAXに格納されるバージョン情報」を参照してください)
EBX ビット00-ビット07:ブランドインデックス
ビット08-ビット15:CLFUSHのラインサイズ(値×8=キャッシュラインサイズ(バイト単位))
ビット16-ビット23:*IDが付与できる、この物理プロセッサ中の論理プロセッサの最大数。例えば、ハイパースレッディングテクノロジをサポートしているインテル® Pentium® 4プロセッサでは2です
ビット24-ビット31:初期APIC ID

*:EBXのビット16-ビット24より大きく、2の累乗に一番近い整数値が、物理プロセッサが持つ論理プロセッサに 付与できるユニークな初期APIC ID数となります。
ECX 拡張機能情報
(下表「CPUID命令によってECXに格納される拡張機能情報」を参照してください)
EDX 機能情報
(下表「CPUID命令によってEDXに格納される機能情報」を参照してください)
0x02 EAX キャッシュ及びTLB情報
(下記表「キャッシュ及びTLB記述子のコード化」を参照してください)
EBX キャッシュ及びTLB情報
(下記表「キャッシュ及びTLB記述子のコード化」を参照してください)
ECX キャッシュ及びTLB情報
(下記表「キャッシュ及びTLB記述子のコード化」を参照してください)
EDX キャッシュ及びTLB情報
(下記表「キャッシュ及びTLB記述子のコード化」を参照してください)
0x03 EAX 予約
EBX 予約
ECX 96ビットのプロセッサシリアル番号のビット0-ビット31
(インテル® Pentium® IIIプロセッサのみ。それ以外のプロセッサはこのレジスタの値は予約されています)
EDX 96ビットのプロセッサシリアル番号のビット32-ビット64
(インテル® Pentium® プロセッサのみ。それ以外のプロセッサはこのレジスタの値は予約されています)

注:プロセッサシリアル番号(PSN:Processor Serial Number)は、インテルPentium4プロセッサおよびそれ以降 のプロセッサではサポートしていません。すべてのモデルで、PSN機能を利用する前に、PSNフラグ(CPUIDによって確認できます) を使用してPSNのサポート有無をチェックします。PSNに関する詳細は
「AP-485、インテル® プロセッサの識別とCPUID命令」(資料番号241618J)を参照してください
EAXの初期値が0x03< EAX < 0x80000000はIA32_CR_MISC_ENABLES.BOOT_NT4(ビット22)が0の場合(デフォルト設定)のみ参照可能です
決定性キャッシュパラメータ
0x04 EAX ビット0-ビット4:キャッシュタイプ
    0 = Null(キャッシュ無し)
    1 = データキャッシュ
    2 = 命令キャッシュ
    3 = データ・命令キャッシュ
    4-31 = 予約
ビット5-ビット7:キャシュレベル(1から始まります)
ビット8:キャシュレベルの自己初期化(ソフトウェアによる初期化は不要です)
ビット9:フルアソシエイティブキャッシュ(完全連想キャッシュ)
ビット10-ビット13:予約
ビット14-ビット25:このキャッシュを共有する、ID付与されたスレッドの最大数**、***
ビット26-ビット31:物理プロセッサが持つID付与された論理プロセッサの最大数**、****、*****
EBX ビット00-ビット11:L = システムコヒーレンシラインサイズ(キャッシュ一貫性サイズ)**
ビット12-ビット21:P = 物理ラインパーティション(ライン区分)**
ビット22-ビット31:W = アソシエイティブウェイト(連想ウェイト)**
ECX セット数
EDX IA-32:予約

IA-64以降のIA-32とIA-64:
ビット0:ライトバック有効/無効
    0 = キャッシュを共有するスレッド用のローレベルキャッシュ上で動作するスレッドのライトバックの有効/無効が可能です
    1 = キャッシュ上で動作する、異なるプロセスから派生したスレッドが共有するキャッシュのライトバックの有効/無効は保証されません
ビット1:キャッシュ包含性
    0 = ローレベルキャッシュは含まれません
    1 = ローレベルキャッシュは含まれます
ビット2:複合キャッシュインデックス
    0 = ダイレクトマップドキャッシュ
    1 = すべてのアドレスビットを使用して、キャッシュのインデックスに複合機能が使用されます ビット3-ビット31:予約
注:EAX=0x04はECXの初期値に依存します。ECXが無効な値だとEAX/EBX/ECX/EDXには0が格納されます。 無効なECXの値は3以上の値です
**:正確な値は格納された値に1を足します
***:(1 + (EAXのビット14-ビット25))より大きく、2の累乗に一番近い整数値が、キャッシュを共有する異なる論理プロセッサに 付与できるユニークな初期APIC ID数となります
****:(1 + (EAXのビット26-ビット31))より大きく、2の累乗に一番近い整数値が、物理プロセッサが持つ異なる論理プロセッサに 付与できるユニークなCore ID数となります。Core IDはAPIC IDのサブセットです
*****:有効なECXの値に対し、定数が格納されます。有効なECXの値は0から始まります
MONITOR/MWAIT
0x05 EAX ビット00-ビット15:最小モニタラインサイズ(バイト単位)(デフォルト値はプロセッサのモニタ粒度)
ビット16-ビット31:予約 = 0
EBX ビット00-ビット15:最大モニタラインサイズ(バイト単位)(デフォルト値はプロセッサのモニタ粒度)
ビット16-ビット31:予約 = 0
ECX IA-32:予約

IA-64以降のIA-32とIA-64:
ビット0:MONITOR/MWAIT(EAXとEBXを超える)拡張モニタラインサイズのリストがサポートされています
ビット1:割り込み無効時でも、MWAIT用の割り込み回数の合計を合わせます
ビット2-ビット31:予約
EDX IA-32:予約

IA-64以降のIA-32とIA-64:
ビット00-ビット03:MWAITを使用してサポートされる、C0*サブC状態数が格納されます
ビット04-ビット07:MWAITを使用してサポートされる、C1*サブC状態数が格納されます
ビット08-ビット11:MWAITを使用してサポートされる、C2*サブC状態数が格納されます
ビット12-ビット15:MWAITを使用してサポートされる、C3*サブC状態数が格納されます
ビット20-ビット31:MWAITを使用してサポートされる、C4*サブC状態数が格納されます
ビット31-ビット20:予約

注:MWAIT拡張用のC0-C4の状態は、ACPIのC状態ではなく各プロセッサが固有に持つC状態です。
温度と電源の管理
IA-64以降のIA-32とIA-64でサポートされています
0x06 EAX ビット00:1がセットされている場合、デジタル温度センサがサポートされています
ビット01:インテルターボブートテクノロジが利用できます(IA32_MISC_ENABLE[38]を参照してください)
ビット02:1がセットされている場合、ARAT(APIC Timer Always Running:APICタイマ常時動作)機能がサポートされています
ビット03:予約
ビット04:1がセットされている場合、PLN(Power Limit Notification:電源限界通知)がサポートされています
ビット05:1がセットされている場合、ECMD(Extended Clock Modulation Duty:拡張クロックモジュレーションデューティ)がサポートされています
ビット06:1がセットされている場合、PTM(Package Thermal Management:パッケージ温度管理)がサポートされています
ビット07-ビット31:予約
EBX ビット00-ビット03:デジタル温度センサにおける割り込み回数のしきい値が格納されます
ビット04-ビット31:予約
ECX ビット00:ハードウェア調整フィードバック機能(IA32_MPERFとIA32_APERFにあります)。この機能は、CPUIDで取得するブランド名によって 指定される周期で、(カウンタが最後にリセットされてからの)プロセッサパフォーマンスを%として提供します
ビット01-ビット02:予約 = 0
ビット03:1がセットされている場合パフォーマンスエナジーバイアス選択機能がサポートされています。 また、IA32_ENERGY_PERF_BIAS(0x1B0)で呼ばれる新MSRアーキテクチャが存在しています
ビット04-ビット31:予約 = 0
EDX 予約 = 0
拡張機能フラグのリスト構造
(格納される結果はECXの初期値によって変わります)
IA-64以降のIA-32とIA-64でサポートされています
サブ機能0(ECXの初期値が0の場合*
0x07 EAX ビット00-ビット31:EAXの初期値に0x07とした場合の(この機能を使用した場合の)、ECXに指定する初期値の最大数が格納されます
EBX ビット00:FSGSBASEがサポートされているかどうかを示しています。1がセットされている場合、 RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASEがサポートされています
ビット01:IA32_TSC_ADJUSTです。1がセットされている場合、MSRがサポートされています
ビット06:予約
ビット07:SMEP(Supervisor Mode Execution Protection:特権モード実行保護)です。1がセットされている場合SMEPがサポートされています
ビット08:予約
ビット09:1がセットされている場合、改良されてたREP MOVSB/STOSB命令がサポートされています
ビット10:1がセットされている場合、プロセス実行IDを管理するシステムソフトウェアが使用するINVPCID命令がサポートされています
ビット11-ビット31:予約
ECX 予約
EDX 予約
注:*ECXに無効な初期値を指定した場合には、EAX/EBX/ECX/EDXに0が格納されます。 無効なECXの初期値は0以上の初期値です
ダイレクトキャッシュアクセス情報
IA-64以降のIA-32とIA-64でサポートされています
0x09 EAX IA32_PLATFORM_DCA_CAP MSR(アドレス0x1F8)の[ビット00-ビット31]の値が格納されます
EBX 予約
ECX 予約
EDX 予約
パフォーマンスモニタリングのアーキテクチャ
IA-64以降のIA-32とIA-64でサポートされています
0x0A EAX ビット00-ビット07:パフォーマンスモニタリングアーキテクチャのバージョンIDが格納されます
ビット08-ビット15:論理プロセッサ毎の汎用パフォーマンスモニタリングカウンタ数が格納されます
ビット16-ビット23:汎用パフォーマンスモニタリングカウンタのビット長が格納されます
ビット24-ビット31:EBXのビットに格納される、パフォーマンスモニタリングアーキテクチャのイベント数が格納されます
EBX ビット00:1にセットされている場合、コアサイクルイベントは利用できません
ビット01:1にセットされている場合、命令断念イベントは利用できません
ビット02:1にセットされている場合、参照サイクルイベントは利用できません
ビット03:1にセットされている場合、ラストレベルキャッシュ参照イベントは利用できません
ビット04:1にセットされている場合、ラストレベルキャッシュミスイベントは利用できません

ビット05:1にセットされている場合、分岐命令断念イベントは利用できません
ビット06:1にセットされている場合、分岐予測ミス断念は利用できません
ビット07-ビット31:予約 = 0
ECX 予約 = 0
EDX ビット00-ビット04:固定機能パフォーマンスカウンタ数が格納されます(バージョンIDが1より大きい場合)
ビット05-ビット12:固定機能パフォーマンスカウンタのビット長が格納されます(バージョンIDが1より大きい場合)
ビット13-ビット31:予約
拡張トポロジ(接続形態)リスト
IA-64以降のIA-32とIA-64でサポートされています
0x0B EAX ビット00-ビット04:次のレベルのタイプ*のユニークなトポロジIDを取得するために、x2APIC IDを右シフトする数が格納されます 次のレベルIDが同じ論理プロセッサは現在のレベルを共有します
ビット05-ビット31:予約
EBX ビット00-ビット15:このレベルのタイプの論理プロセッサ数が格納されます。格納される値はIntel**が出荷するときの設定によってい変わります
ビット16-ビット31:予約
ECX ビット00-ビット07:レベル数が格納されます。ECXの初期値と同じ値が格納されます
ビット08-ビット15:レベルタイプ***
ビット16-ビット31:予約
EDX ビット00-ビット31:現在の論理プロセッサのX2APIC IDが格納されます
注:CPUID.EAX=0x0Bの結果はECXの初期値によって変わります。(EDXに格納される値はECXの初期値には依存しません) ECXのビット00-ビット07に格納される値はECXの初期値と同じ値が格納されます。 ECXの初期値に無効な値を指定した場合、EAX/EBX/EDXは0が格納されます。 無効なECXの初期値は1より大きな値です。EBXのビット00-ビット15に0以外の値が格納されている場合に、 格納されている値は有効と判断します
*ソフトウェアはシステムのプロセッサトポロジをリスト化するためにEAXのビット00-ビット04を使用すべきです
**ソフトウェアはシステムのプロセッサトポロジをリスト化するためにEBXのビット00-ビット15を使用すべきではありません。 EBXのビット00-ビット15の値は表示/診断のためにのみ使用します。BIOS/OS/アプリケーションが利用できる 実際の論理プロセッサ数はEBXのビット00-ビット15の値と異なる可能性があります。 (ソフトウェアとハードウェアプラットフォームの設定により変わります)
***レベルタイプの値はレベル数とは全く関係ありません。”より高いレベルタイプ値”は”より高いレベル”ではありません。 レベルタイプは下記値をとります
0:無効です
1:SMT
2:コア
3-255:予約
プロセッサ拡張状態リスト メインパラメータ (ECXに0を指定します)
0x0D EAX ビット00-ビット31:XCR0(64ビットレジスタ)の下位32ビットの有効なビットが格納されます。ビットが0の場合、そのビットに 対応するXCR0レジスタのビットは予約です

ビット00:レガシーx87
ビット01:128ビットSSE
ビット02:256ビットAVX
ビット03-ビット31:予約
EBX ビット00-ビット31:XCR0で有効にした機能が必要とする最大サイズです(XSAVE/XRSTOR命令の記録領域の最初から必要 とするサイズです。バイト単位です)。XSAVE記憶領域の最後でいつくかの機能が無効となっている場合に、 ECXに格納される値とは違う値が格納されます。
ECX ビット00-ビット31:プロセッサがサポートする全機能(XCR0で有効なビット)が必要とするXSAVE/XRSTOR記憶領域の最大サイズです (XSAVE/XRSTOR命令の記録領域の最初から必要 とするサイズです。バイト単位です)。
EDX ビット00-ビット31:ビット00-ビット31:XCR0(64ビットレジスタ)の上位32ビットの有効なビットが格納されます。ビットが0の場合、そのビットに 対応するXCR0レジスタのビットは予約です
プロセッサ拡張状態リスト サブパラメータ (ECXに1を指定します)
0x0D EAX ビット00:XSAVEOPTが利用可能です
ビット01-ビット31:予約
EBX 予約
ECX 予約
EDX 予約
プロセッサ拡張状態リスト その他のサブパラメータ (ECXに1より大きい値を指定します)
注:その他の有効なサブパラメータはXCROレジスタのビット2からはじまるビットに対応しています(例えば、ビット2ならばECX=2を指定します)
※無効なECXの初期値を指定するとEAX/EBX/ECX/EDXに0が格納されます。無効なECXの初期値は2より大きな値です
0x0D EAX ビット00-ビット31:XCR0のビットn(ECXで指定したビット)に対応した拡張状態機能のための 記憶領域のバイトサイズ(EBXで指定されるオフセットから始まります)が格納されます。ECXの初期値が無効な値のとき、0が格納されます
EBX ビット00-ビット31:拡張状態機能の記憶領域のオフセットが格納されます(XSAVE/XRSTORの記憶領域の開始位置を最初としたオフセット値です)
ECX 予約。ECXの初期値が無効な値のとき、0が格納されます
EDX 予約。ECXの初期値が無効な値のとき、0が格納されます
未実装CPUIDパラメータ機能
0x40000000-0x4FFFFFFF EAX 無効なパラメータ機能です。EAXの初期値として0x40000000-0x4FFFFFFFを指定されても、 現存するCPUおよび将来開発されるCPUはCPU ID情報、機能情報を格納しません
拡張機能CPUID情報
0x80000000 EAX 拡張機能CPUID情報の最大入力値
(表「CPUID命令のソースオペランドの最大値」を参照してください)
EBX 予約
ECX 予約
EDX 予約
0x80000001 EAX 拡張プロセッサシグネチャと機能ビットが格納されます
EBX 予約
ECX IA-32:予約

IA-64以降のIA-32とIA-64:
ビット00:64ビットモードでLAHF/SAHF命令が利用可能です
ビット01-ビット31:予約
EDX IA-32:予約

IA-64以降のIA-32とIA-64:
ビット00-ビット10:予約 = 0
ビット11:64ビットモードでSYSCALL/SYSRET命令が利用可能です
ビット12-ビット19:予約 = 0
ビット20:拡張無効ビットが利用可能です
ビット21-ビット25:予約 = 0
ビット26:1GBページのページサイズが利用可能です
ビット27:1がセットされている場合、RDTSCP命令とIA32_TSC_AUXが利用可能です
ビット28:予約 = 0
ビット29:1がセットされている場合、Intel® 64アーキテクチャが利用かのうです
ビット30-ビット31:予約 = 0
0x80000002 EAX プロセッサブランド名が格納されます
EBX プロセッサブランド名(続き)が格納されます
ECX プロセッサブランド名(続き)が格納されます
EDX プロセッサブランド名(続き)が格納されます
0x80000003 EAX プロセッサブランド名(続き)が格納されます
EBX プロセッサブランド名(続き)が格納されます
ECX プロセッサブランド名(続き)が格納されます
EDX プロセッサブランド名(続き)が格納されます
0x80000004 EAX プロセッサブランド名(続き)が格納されます
EBX プロセッサブランド名(続き)が格納されます
ECX プロセッサブランド名(続き)が格納されます
EDX プロセッサブランド名(続き)が格納されます
0x80000005 EAX 予約 = 0
EBX 予約 = 0
ECX 予約 = 0
EDX 予約 = 0
0x80000006 EAX 予約 = 0
EBX 予約 = 0
ECX ビット00-ビット07:キャッシュレインサイズが格納されます
ビット08-ビット11:予約
ビット12-ビット15:L2アソシエイティビティ(L2連想)*
ビット16-ビット31:キャッシュサイズ(1K単位)
EDX 予約 = 0
注:L2アソシエイティビティ(L2連想)の値
0x00:無効
0x01:ダイレクトマッピング
0x02:2ウェイ
0x04:4ウェイ
0x06:8ウェイ
0x08:16ウェイ
0x0F:フルアソシエイティブ(完全連想)
0x80000007 EAX 予約 = 0
EBX 予約 = 0
ECX 予約 = 0
EDX IA-32:予約 = 0

IA-64以降のIA-32とIA-64:
ビット00-ビット07:予約 = 0
ビット08:1の場合、不変(値が変わらない)TSCが利用可能です
ビット09-ビット31:予約 = 0
0x80000008 EAX IA-32:予約 = 0

IA-64以降のIA-32とIA-64:
ライナー物理アドレスサイズ
ビット00-ビット07:物理アドレスビット*
ビット08-ビット15:ライナーアドレスビット
ビット16-ビット31:予約 = 0
EBX 予約 = 0
ECX 予約 = 0
EDX 予約 = 0
注:*EAX=0x80000008がサポートされている場合、最大物理アドレスはこのフィールドから得られます


EAX = 0を指定したときのCPUID命令

入力EAX = 0:のプロセッサ基本情報とベンダ識別文字列について、CPUID命令が識別可能な最大値を返します

EAXレジスタに0を指定してCPUID命令を実行した場合、プロセッサはCPUID命令が識別可能な最大値を返します

値がEAXレジスタに格納されます(下記表「IA-32プロセッサに対するCPUID命令のEAX最大値」を参照してください)

この値はプロセッサごとに固有の値が格納されます

EBX、EDX、ECXレジスタには文字列が格納されます。インテルプロセッサの場合は"GenuineIntel"が格納されます


    EAX = 0x756E6547    ("Genu"、リトルエンディアンなのでGがBLに格納されます)
    EDX = 0x49656E69    ("ineI"、トルエンディアンなのでiがDLに格納されます)
    ECX = 0x6C65746E    ("ntel"、トルエンディアンなのでnがCLに格納されます)



入力EAX = 0x80000000:CPUID命令のEAX最大値

EAXレジスタに0x80000000を設定して、CPUID命令を実行した場合、プロセッサは、プロセッサの拡張情報を返すために

CPUID命令が認識可能な最大値を返します。この値はEAXレジスタに格納されます。この値はプロセッサ毎に異なります

IA-32プロセッサに対するCPUID命令のEAX最大値
IA-32およびIA-64プロセッサ EAXレジスタの最大値
基本情報 拡張機能情報
Intel486初期のプロセッサ CPUIDは実装されていません CPUIDは実装されていません
Intel486後期のプロセッサ 0x01 実装されていません
Pentium ProとPentium Ⅱ、Intel® Celeron® プロセッサ 0x02 実装されていません
Pentium IIIプロセッサ 0x03 実装されていません
Pentium 4プロセッサ 0x02 0x80000004
Intel Xeonプロセッサ 0x02 0x80000004
Pentium Mプロセッサ 0x02 0x80000004
ハイパースレッディング対応Pentium 4プロセッサ 0x05 0x80000008
Pentium Dプロセッサ(8xx) 0x05 0x80000008
Pentium Dプロセッサ(9xx) 0x06 0x80000008
Intel Core Duoプロセッサ 0x0A 0x80000008
Intel Core 2 Duoプロセッサ 0x0A 0x80000008
Intel Xenonプロセッサ3000、5100、5200、5300、5400シリーズ 0x0A 0x80000008
Intel Core 2 Duoプロセッサ 8000シリーズ 0x0D 0x80000008
Intel Xeonプロセッサ 5200、5400シリーズ 0x0A 0x80000008
Intel Atomプロセッサ 0x0A 0x80000008
Intel Corei7プロセッサ 0x0B 0x80000008


EAX = 1を指定したときのCPUID命令

EAX = 1を指定したときのCPUID命令:EAXに格納されるモデル、ファミリ、ステッピング情報

EAXレジスタの初期値に1を指定して、CPUID命令を実行した場合、プロセッサはEAXレジスタに

バージョン情報を格納します(下図を参照してください)。例えば、インテル® Pentium 4® ファミリの

最初のプロセッサのモデル、ファミリ、プロセッサタイプは次のようになります

ステッピングIDについては必要に応じて格納されます

使用可能なプロセッサタイプは表「プロセッサタイプフィールド」を参照してください

EAXに初期値1を指定した場合にCPUID命令を実行したときのEAXに格納される値のビットアサイン

CPUID命令によってEAXに格納されるバージョン情報
ビット ラベル 説明
0-3 Stepping ID ステッピングIDが格納されます
4-7 Model モデルが格納されます
8-11 Family ID ファミリIDが格納されます
(インテルPentium 4 プロセッサファミリの場合は0x0F)
12-13 Processor Type プロセッサタイプが格納されます
(インテルPentium 4 プロセッサファミリの場合は00)
14-15 Reserved 予約
16-19 Extended Model ID 拡張モデルIDが格納されます
(インテルPentium 4 プロセッサファミリの場合は0)
20-27 Extended Family ID 拡張ファミリIDが格納されます
(インテルPentium 4 プロセッサファミリの場合は0)
28-31 Reserved 予約


プロセッサタイプフィールド
タイプ
オリジナルOEMプロセッサ 00b
インテル® OverDrive® プロセッサ※ 01b
デュアルプロセッサ(Inter486™ プロセッサには適用不可) 10b
予約(インテル用) 11b
注:※初期のIA-32プロセッサの識別については、「AP-485、インテル® プロセッサの識別とCPUID命令」(資料番号241618J)および
「IA-32 インテル® アーキテクチャソフトウェア・デベロッパーズマニュアル」上巻の第14章を参照してください


ファミリIDが0x0F以上の場合のみ、拡張ファミリIDと拡張モデルIDを確認する必要があります

プロセッサ情報は常に、ファミリ、モデル、ステッピングを組み合わせて表示するようにします

各フィールドを次のように計算して、ファミリを表示します


    表示するファミリ = (拡張ファミリID(4ビット) << 4 )(8ビット)
                     + ファミリID(4ビットを8ビットに0拡張)



モデルの表示には、モデルIDと拡張モデルIDから次のように計算します


    表示するモデル = (拡張モデルID(4ビット) << 4 )(8ビット)
                   + モデルID(4ビットを8ビットに0拡張)



EAX = 1を指定したときのCPUID命令:EBXに格納される追加情報

EAXに1を指定してCPUID命令を実行した場合、EBXには追加情報が格納されます

EAX = 1を指定したときのCPUID命令:ECXとEDXに格納される機能情報

EAXに1を指定してCPUID命令を実行した場合、ECXとEDXには機能情報が格納されます

対応する機能フラグのビットに1がセットされていると、その機能をサポートしていることを示しています

※プログラムはプロセッサの特定の機能を使用する前に、CPUID命令によって取得できる機能フラグを利用して
その機能がサポートされていることを事前に確認する必要があります。将来的に開発されるプロセッサに
特定の機能がサポートされることを前提としたプログラムを作成しないようにします

ECXに格納される拡張機能情報

EAXに初期値1を指定した場合にCPUID命令を実行したときのECXに格納される値のビットアサイン

CPUID命令によってECXに格納される拡張機能情報
ビット ラベル 説明
0 SSE3 ストリーミングSIMD拡張命令(SSE3)。このビットに1がセットされている場合プロセッサはこの機能をサポートしています
1 PCLMULQDQ IA-32:予約

IA-64以降のIA-32とIA-64:
PCLMULQDQ命令。このビットに1がセットされている場合プロセッサはこの機能をサポートしています
2 DTES64 IA-32:予約

IA-64以降のIA-32とIA-64:
64ビットDSエリアサポート機能。このビットに1がセットされている場合プロセッサはこの機能をサポートしています
3 MONITOR MONITOR/MWAIT命令。このビットに1がセットされている場合プロセッサはこの機能をサポートしています
4 DS-CPL CPL Qualified Debug Store(CPLの条件を満たすデバッグストア)。このビットに1がセットされている場合、 プロセッサはCPLの条件満たす分岐メッセージを格納できるデバッグストア拡張機能をサポートしています
5 VMX IA-32:予約

IA-64以降のIA-32とIA-64:
バーチャルマシン拡張。このビットに1がセットされている場合プロセッサはこの機能をサポートしています
6 SMX IA-32:予約

IA-64以降のIA-32とIA-64:
セイファモード拡張(より安全なモードの拡張)。このビットに1がセットされている場合プロセッサはこの機能をサポートしています
7 EST Enhanced Intel SpeedSpte® テクノロジ。このビットに1がセットされている場合プロセッサはこの機能をサポートしています
8 TM2 温度モニタ2。このビットに1がセットされている場合プロセッサはこの機能をサポートしています
9 SSSE3 IA-32:予約

IA-64以降のIA-32とIA-64:
SSSE3(Supplemental Streaming SIMD Extenshons 3)命令。 このビットに1がセットされている場合プロセッサはこの命令をサポートしています
10 CNXT-ID L1コンテキストID。このビットに1がセットされている場合、プロセッサをL1データキャッシュモードをアダプティブモードまたは 共有モードに設定することができます。0にセットされている場合、この機能はサポートされていません。 詳細はIA_MISC_ENABLE MSRビット24(L1データキャッシュコンテキストモード)の定義を参照してください
11 Reserved 予約
12 FMA IA-32:予約

IA-64以降のIA-32とIA-64:
YMM状態を使用したFMA拡張機能。 このビットに1がセットされている場合プロセッサはこの機能をサポートしています
13 CMPXCHG16B IA-32:予約

IA-64以降のIA-32とIA-64:
CMPXCHG16命令。 このビットに1がセットされている場合プロセッサはこの命令をサポートしています
14 xTPR Update Control IA-32:予約

IA-64以降のIA-32とIA-64:
xTPR更新制御。 このビットに1がセットされている場合プロセッサはIA32_MISC_ENABELビット23の変更をサポートしています
15 PDCM IA-32:予約

IA-64以降のIA-32とIA-64:
パフォーマンスとデバッグ機能。 このビットに1がセットされている場合プロセッサはIA32_PERF_CAPABILITIES MSRが示すパフォーマンスとデバッグ機能をサポートしています
16 Reserved 予約
17 PCID IA-32:予約

IA-64以降のIA-32とIA-64:
プロセッサコンテキストID機能。 このビットに1がセットされている場合プロセッサはコンテキストID機能をサポートしています。 ソフトウェアはCR4レジスタのPCIDEを1にして機能を有効にします
18 DCA IA-32:予約

IA-64以降のIA-32とIA-64:
DCA機能。 このビットに1がセットされている場合プロセッサはメモリマップドデバイスからデータをプリフェッチする機能をサポートしています
19 SSE4_1 IA-32:予約

IA-64以降のIA-32とIA-64:
SSE4.1。 このビットに1がセットされている場合プロセッサはSSE4.1をサポートしています
20 SSE4_2 IA-32:予約

IA-64以降のIA-32とIA-64:
SSE4.2。 このビットに1がセットされている場合プロセッサはSSE4.2をサポートしています
21 x2APIC IA-32:予約

IA-64以降のIA-32とIA-64:
x2APIC。 このビットに1がセットされている場合プロセッサはx2APIC機能をサポートしています
22 MOVBE IA-32:予約

IA-64以降のIA-32とIA-64:
MOVBE命令。 このビットに1がセットされている場合プロセッサはMOVBE命令をサポートしています
23 POPCNT IA-32:予約

IA-64以降のIA-32とIA-64:
POPCNT命令。 このビットに1がセットされている場合プロセッサはPOPCNT命令をサポートしています
24 TSC-Deadline IA-32:予約

IA-64以降のIA-32とIA-64:
TSCデッドライン。 このビットに1がセットされている場合プロセッサのローカルAPICタイマはTSCデッドライン値を使用することでワンショットタイマをサポートしています
25 AES IA-32:予約

IA-64以降のIA-32とIA-64:
AESNI命令。 このビットに1がセットされている場合プロセッサはAESNI命令拡張をサポートしています
26 XSAVE IA-32:予約

IA-64以降のIA-32とIA-64:
XSAVE命令関連。 このビットに1がセットされている場合プロセッサはXSAVE/XRSTOR命令、プロセッサ拡張状態機能、XSETBV/XGETBV命令 をサポートしています XCR0を変更することでこの機能を有効にします。
27 OSXSAVE IA-32:予約

IA-64以降のIA-32とIA-64:
OSXSAVE関連機能。 このビットに1がセットされている場合プログラム(OS)がXCR0を変更してXSETBV/XGETBV命令を有効にしたことを示しています また、XSAVE/XRSTOR命令を使用することで プロセッサの拡張状態管理することができます
28 AVX IA-32:予約

IA-64以降のIA-32とIA-64:
AVX命令関連。 このビットに1がセットされている場合プロセッサはAVX命令拡張をサポートしています
29 F16C IA-32:予約

IA-64以降のIA-32とIA-64:
F16C命令関連。 このビットに1がセットされている場合プロセッサは16ビット浮動小数点変換命令をサポートしています
30 RDRAND IA-32:予約

IA-64以降のIA-32とIA-64:
RDRAND命令関連。 このビットに1がセットされている場合プロセッサはRDRAND命令をサポートしています
30 Reserved IA-32:予約

IA-64以降のIA-32とIA-64:
予約。常に0がセットされます。


EDXに格納される機能情報

EAXに初期値1を指定した場合にCPUID命令を実行したときのEDXに格納される値のビットアサイン

CPUID命令によってEDXに格納される拡張機能情報
ビット ラベル 説明
0 FPU オンチップ浮動小数点ユニット。プロセッサはx87 FPUを搭載しています
1 VME 改良仮想8086モード。改良仮想8086モードの制御には以下を使用します。 CR4の機能制御VMEビット、CR4のプロテクティッドモード通う割り込み用のPVIビット。 正規の使用方法以外のソフトウェア割り込みの使用、正規の使用方法以外の ソフトウェアビットマップによるTSS拡張、EFLAGSレジスタのVIF、VIPビット。
2 DE デバッグ拡張。機能を制御するにはCR4のDEビットを変更します。オプションのDR4およびDR5への アクセストラップを含め、I/Oブレークポイントがサポートされています
3 PSE ページサイズ拡張。機能を制御するにはCR4のPSEビットとPDEのダーティビット、CR3、PDE・PTEの 予約ビット・トラッピングを使用します。4Mのラージページサイズがサポートされています
4 TSC タイムスタンプカウンタ。機能を制御するにはCR4のTSDビットを使用します。 RDTSC命令がサポートされています
5 MSR モデル固有レジスタのRDMSR、WRMSR命令がサポートされています。MSRによっては、プロセッサに依存しないものもあります
6 PAE 物理アドレス拡張。32ビットを超える物理アドレスがサポートされています。拡張ページテーブルエントリのフォーマット、 ページ変換テーブルに特別レベルが定義され、PAEビットが1の場合は4MBページのかわりに、2MBページが サポートされます。32ビットを超える場合の実際のアドレスビット数は定義されていません。プロセッサによってい違います。
7 MCE マシンチェック例外。機能を制御するにはCR4のMCEを変更します。有効にするとマシンチェック用例外(ベクタ番号18)が 発生するようになります。この機能は、モデル固有実装である、マシンチェックエラーのロギング、レポート、プロセッサ シャットダウンについては定義していません。マシンチェック例外ハンドラは、プロセッサのバージョンに従って、 モデル固有の例外処理を実行するか、マシンチェック機能の有無の確認を行います。
8 CX8 CMPXCHG8B命令。8バイト(64ビット)比較交換命令がサポートされています (暗黙的にロックされて、アトミックに処理が行われます)
9 APIC オンチップAPIC。プロセッサは、アドバンスドプログラム可能割り込み(APIC)を内蔵し、 物理アドレス0xFFFE0000-0xFFFE0FFFでメモリマップコマンドに応答します (デフォルトではプロセッサによってはAPICの再配置を許可するものもあります)
10 Reserved 予約
11 SEP SYSENTER/SYSEXIT命令及び関連するMSRがサポートされています
12 MTRR メモリタイプ範囲レジスタMTRRがサポートされています。MSRにMTRRcapビットがあり、 サポートされているメモリタイプ、可変MTRRの個数、固定MTRRのサポート有無について示しています
13 PGE PTEグローバルビット。PDEおよびPTEのグローバルビットがサポートされています。このビットは、各種の処理に共通で、 フラッシュする必要のないTLBエントリであることを示しています。この機能はCR4のPGEビットを変更することで使用可能になります
14 MCA マシンチェックアーキテクチャ。P6ファミリプロセッサ、インテル® Pentium® 4 プロセッサ、インテル® Xeon™ プロセッサ、将来開発されるプロセッサのエラーレポート用の互換メカニズムがサポートされています。 MSRのMCG_CAPはサポートされているエラーレポート用MSRバンクの個数を示しています。
15 CMOV 条件付き転送命令CMOVがサポートされています。また、x87 FPUが搭載されている場合は(ビット0のFPUビットが1にセットされている場合) FCOMI命令、FCMOV命令がサポートされています
16 PAT ページ属性テーブルがサポートされています。この機能は、メモリタイプ範囲レジスタ(MTRR)の数を増やします。 これにより、OSはリニアアドレスを使用して4KB単位でメモリの属性を指定できます
17 PSE-36 32ビットページサイズ拡張。拡張4MBページがサポートされています。これにより、4GBを超える物理メモリの アドレスを指定できるようになります。この機能は、4MBページの物理アドレスの上位4ビットがPDEの ビット13-16によってエンコーディングされることを示しています
18 PSN 96ビットのプロセッサ識別番号機能がサポートされ、機能が 有効になっています。
19 CFLSH CLFLUSH命令がサポートされています
20 Reserved 予約
21 DS メモリ常駐バッファにデバッグ情報を書き込む機能がサポートされています。この機能は、分岐トレースストア(BTS) 及び高精度イベントベースサンプリング(PEBS)機能によって使用されます(詳細は「IA-32 インテル アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル」下巻の

第15章「デバッグと性能モニタリング」を参照してください)
22 ACPI 温度モニタおよびソフトウェア制御クロック機能。プロセッサはMSRを内部に実装しています。 MSRを使用すると、ソフトウェアからプロセッサ温度を監視できるとともに、事前に定義した デューティサイクルでプロセッサのパフォーマンスを調整することができます
23 MMX インテル® MMX® テクノロジがサポートされています
24 FXSR 浮動小数点コンテキストの高速な保存/復元用のFXSAVE/FXRSTOR命令がサポートされています。 また、OSはCR4のOSFXSRビットをセットすることで他のプログラムにFXSAVE/FXRSTOR命令がサポートされていることを 示すことができます
25 SSE SSE拡張命令がサポートされています
26 SSE2 SSE2拡張命令がサポートされています
27 SS セルフスヌープ(Self Snoop:自己探索)がサポートされています。 競合するメモリタイプの管理機能をサポートしており、プロセッサのキャッシュ構造を探索して、 バスに対して発行されたトランザクションを検出することができます。
28 HTT プロセッサはハイパースレッディングテクノロジをサポートしています
29 TM プロセッサに、温度モニタ自動温度制御回路(TCC)が実装されています
30 Reserved 予約
31 PBE ペンディングブレークイネーブル。プロセッサはストップブロック状態(STPCLK#がアサートされている状態)での FERRR#/PBE#ピンの使用をサポートしています。このピンによって、割り込みがペンディングになっており、 通常動作に戻ってその割り込みを処理する必要があることを、プロセッサに指示することができます。 この機能はIA32_MISC_ENABLE MSRのビット10(PBEイネーブル)によって有効にすることができます


EAX = 2を指定したときのCPUID命令

EAX = 2を指定したときのCPUID命令:EAX、EBX、ECX、EDXにキャッシュ・TLB情報が格納される

EAXに2を指定してCPUID命令を実行した場合、プロセッサは内部キャッシュおよびTLBに関する情報を

EAX、EBX、ECX、EDXに格納します

コード化については下記となります

キャッシュおよびTLB記述子のコード化
記述子の値 キャッシュまたはTLBの種類 説明
0x00 なし Null記述子
0x01 命令TLB 4KBページ、4ウェイセットアソシエイティブ、32エントリ
0x02 命令TLB 4MBページ、フルアソシエイティブ、2エントリ
0x03 データTLB 4KBページ、4ウェイセットアソシエイティブ、64エントリ
0x04 データTLB 4MBページ、4ウェイセットアソシエイティブ、8エントリ
0x05 データTLB 4MBページ、4ウェイセットアソシエイティブ、32エントリ
0x06 第1レベルの命令キャッシュ 8KB、4ウェイセットアソシエイティブ、32バイトラインサイズ
0x08 第1レベルの命令キャッシュ 16KB、4ウェイセットアソシエイティブ、32バイトラインサイズ
0x09 第1レベルの命令キャッシュ 32KB、4ウェイセットアソシエイティブ、64バイトラインサイズ
0x0A 第1レベルのデータキャッシュ 8KB、2ウェイセットアソシエイティブ、32バイトラインサイズ
0x0B 命令TLB 4MBページ、4ウェイセットアソシエイティブ、4エントリ
0x0C 第1レベルのデータキャッシュ 16KB、4ウェイセットアソシエイティブ、32バイトラインサイズ
0x0D 第1レベルのデータキャッシュ 16KB、4ウェイセットアソシエイティブ、64バイトラインサイズ
0x0E 第1レベルのデータキャッシュ 24KB、6ウェイセットアソシエイティブ、64バイトラインサイズ
0x21 第2レベルのキャッシュ 256KB、8ウェイセットアソシエイティブ、64バイトラインサイズ
0x22 第3レベルのキャッシュ 512KB、4ウェイセットアソシエイティブ、64バイトラインサイズ、128バイトセクタサイズ
0x23 第3レベルのキャッシュ 1MB、8ウェイセットアソシエイティブ、64バイトラインサイズ、128バイトセクタサイズ
0x25 第3レベルのキャッシュ 2MB、8ウェイセットアソシエイティブ、64バイトラインサイズ、128バイトセクタサイズ
0x29 第3レベルのキャッシュ 4MB、8ウェイセットアソシエイティブ、64バイトラインサイズ、128バイトセクタサイズ
0x2C 第1レベルのデータキャッシュ 32KB、8ウェイセットアソシエイティブ、64バイトラインサイズ
0x30 第1レベルのデータキャッシュ 32KB、8ウェイセットアソシエイティブ、64バイトラインサイズ
0x40 第2レベルのキャッシュ無し プロセッサに有効な第2レベルのキャシュが実装されている場合は第3レベルのキャッシュ無し
0x41 第2レベルのキャッシュ 128KB、4ウェイセットアソシエイティブ、32バイトラインサイズ
0x42 第2レベルのキャッシュ 256KB、4ウェイセットアソシエイティブ、32バイトラインサイズ
0x43 第2レベルのキャッシュ 512KB、4ウェイセットアソシエイティブ、32バイトラインサイズ
0x44 第2レベルのキャッシュ 1MB、4ウェイセットアソシエイティブ、32バイトラインサイズ
0x45 第2レベルのキャッシュ 2MB、4ウェイセットアソシエイティブ、32バイトラインサイズ
0x46 第3レベルのキャッシュ 4MB、4ウェイセットアソシエイティブ、64バイトラインサイズ
0x47 第3レベルのキャッシュ 8MB、8ウェイセットアソシエイティブ、64バイトラインサイズ
0x48 第2レベルのキャッシュ 3MB、12ウェイセットアソシエイティブ、64バイトラインサイズ
0x49 第3レベルのキャッシュ 4MB、16ウェイセットアソシエイティブ、64バイトラインサイズ(インテルXeonプロセッサMP、ファミリ0x0F、モデル0x06)
第2レベルのキャッシュ 4MB、16ウェイセットアソシエイティブ、64バイトラインサイズ
0x4A 第3レベルのキャッシュ 6MB、12ウェイセットアソシエイティブ、64バイトラインサイズ
0x4B 第3レベルのキャッシュ 8MB、16ウェイセットアソシエイティブ、64バイトラインサイズ
0x4C 第3レベルのキャッシュ 12MB、12ウェイセットアソシエイティブ、64バイトラインサイズ
0x4D 第3レベルのキャッシュ 16MB、16ウェイセットアソシエイティブ、64バイトラインサイズ
0x4F 命令TLB 4KBページ、32エントリ
0x50 命令TLB 4KB、2MB、4MBページ、64エントリ
0x51 命令TLB 4KB、2MB、4MBページ、128エントリ
0x52 命令TLB 4KB、2MB、4MBページ、256エントリ
0x55 命令TLB 2MB、4MBページ、フルアソシエイティブ、7エントリ
0x56 データTLB 4MBページ、4ウェイセットアソシエイティブ、16エントリ
0x57 データTLB 4MBページ、4ウェイアソシエイティブ、16エントリ
0x59 データTLB 4MBページ、フルアソシエイティブ、16エントリ
0x5A データTLB 2MB、4MBページ、4ウェイセットアソシエイティブ、32エントリ
0x5B データTLB 4KB、4MBページ、64エントリ
0x5C データTLB 4KB、4MBページ、128エントリ
0x5D データTLB 4KB、4MBページ、256エントリ
0x60 第1レベルのデータキャッシュ 16KB、8ウェイセットアソシエイティブ、64バイトラインサイズ
0x66 第1レベルのデータキャッシュ 8KB、4ウェイセットアソシエイティブ、64バイトラインサイズ
0x67 第1レベルのデータキャッシュ 16KB、4ウェイセットアソシエイティブ、64バイトラインサイズ
0x68 第1レベルのデータキャッシュ 32KB、4ウェイセットアソシエイティブ、64バイトラインサイズ
0x70 トレースキャッシュ 12K-μ op、8ウェイセットアソシエイティブ
0x71 トレースキャッシュ 16K-μ op、8ウェイセットアソシエイティブ
0x72 トレースキャッシュ 32K-μ op、8ウェイセットアソシエイティブ
0x76 命令TLB 2MB、4MBページ、フルアソシエイティブ、8エントリ
0x78 第2レベルのキャッシュ 1MB、8ウェイセットアソシエイティブ、64バイトラインサイズ
0x79 第2レベルのキャッシュ 128KB、8ウェイセットアソシエイティブ、64バイトラインサイズ、128バイトセクタサイズ
0x7A 第2レベルのキャッシュ 256KB、8ウェイセットアソシエイティブ、64バイトラインサイズ、128バイトセクタサイズ
0x7B 第2レベルのキャッシュ 512KB、8ウェイセットアソシエイティブ、64バイトラインサイズ、128バイトセクタサイズ
0x7C 第2レベルのキャッシュ 1MB、8ウェイセットアソシエイティブ、64バイトラインサイズ、128バイトセクタサイズ
0x7D 第2レベルのキャッシュ 2MB、8ウェイセットアソシエイティブ、64バイトラインサイズ
0x7F 第2レベルのキャッシュ 512KB、2ウェイセットアソシエイティブ、64バイトラインサイズ
0x80 第2レベルのキャッシュ 512KB、8ウェイセットアソシエイティブ、64バイトラインサイズ
0x82 第2レベルのキャッシュ 256KB、8ウェイセットアソシエイティブ、32バイトラインサイズ
0x83 第2レベルのキャッシュ 512KB、8ウェイセットアソシエイティブ、32バイトラインサイズ
0x84 第2レベルのキャッシュ 1MBB、8ウェイセットアソシエイティブ、32バイトラインサイズ
0x85 第2レベルのキャッシュ 2MB、8ウェイセットアソシエイティブ、32バイトラインサイズ
0x86 第2レベルのキャッシュ 512KB、4ウェイセットアソシエイティブ、64バイトラインサイズ
0x87 第2レベルのキャッシュ 1MB、8ウェイセットアソシエイティブ、64バイトラインサイズ
0xB0 命令TLB 4KBページ、4ウェイセットアソシエイティブ、128エントリ
0xB1 命令TLB 2MBページ、4ウェイセットアソシエイティブ、8エントリまたは4MBページ、4ウェイセットアソシエイティブ、4エントリ
0xB2 命令TLB 4KBページ、4ウェイセットアソシエイティブ、64エントリ
0xB3 データTLB 4KBページ、4ウェイセットアソシエイティブ、128エントリ
0xB4 データTLB 4KBページ、4ウェイセットアソシエイティブ、256エントリ
0xBA データTLB 4KBページ、4ウェイセットアソシエイティブ、64エントリ
0xC0 データTLB 4KB、4MBページ、4ウェイセットアソシエイティブ、8エントリ
0xCA 共有第2レベルTLB 4KBページ、4ウェイセットアソシエイティブ、512エントリ
0xD0 第3レベルキャッシュ 512KBページ、4ウェイセットアソシエイティブ、64バイトラインサイズ
0xD1 第3レベルキャッシュ 1MBページ、4ウェイセットアソシエイティブ、64バイトラインサイズ
0xD2 第3レベルキャッシュ 2MBBページ、4ウェイセットアソシエイティブ、64バイトラインサイズ
0xD6 第3レベルキャッシュ 1MBページ、8ウェイセットアソシエイティブ、64バイトラインサイズ
0xD7 第3レベルキャッシュ 2MBページ、8ウェイセットアソシエイティブ、64バイトラインサイズ
0xD8 第3レベルキャッシュ 4MBページ、8ウェイセットアソシエイティブ、64バイトラインサイズ
0xDC 第3レベルキャッシュ 1.5MBページ、12ウェイセットアソシエイティブ、64バイトラインサイズ
0xDD 第3レベルキャッシュ 3MBページ、12ウェイセットアソシエイティブ、64バイトラインサイズ
0xDE 第3レベルキャッシュ 6MBページ、12ウェイセットアソシエイティブ、64バイトラインサイズ
0xE2 第3レベルキャッシュ 2MBページ、16ウェイセットアソシエイティブ、64バイトラインサイズ
0xE4 第3レベルキャッシュ 8MBページ、16ウェイセットアソシエイティブ、64バイトラインサイズ
0xEA 第3レベルキャッシュ 12MBページ、24ウェイセットアソシエイティブ、64バイトラインサイズ
0xEB 第3レベルキャッシュ 18MBページ、24ウェイセットアソシエイティブ、64バイトラインサイズ
0xEC 第3レベルキャッシュ 24MBページ、24ウェイセットアソシエイティブ、64バイトラインサイズ
0xF0 プリフェッチ 64バイトプリフェッチ
0xF1 プリフェッチ 128バイトプリフェッチ
0xFF 一般 CPUIDのEAX=2ではキャッシュ記述子はサポートされていません。CPUIDのEAX=4を使用してキャッシュパラメータを取得してください


キャッシュおよびTLB記述子の解釈の例

インテルPentium 4プロセッサファミリの最初のメンバで、CPUID命令をEAX=2で実行すると

キャッシュとTLBに関する以下の情報を返します


    EAX    0x66 0x5B 0x50 0x01
    EBX    0x00 0x00 0x00 0x00
    ECX    0x00 0x00 0x00 0x00
    EDX    0x00 0x7A 0x70 0x00



これらの値は次のことを意味します

ブランド情報の取得

以下の方法でブランド情報を取得します

※初期のプロセッサで利用出来る方法については

「IA-32 インテル アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル」上巻の

第14章「従来のインテル® アーキテクチャ・プロセッサの識別」を参照してください

プロセッサブランドストリング

下記フローでブランドストリングの検出を行います。プロセッサブランド識別するプログラムは、すべてのIA-32

アーキテクチャ互換プロセッサ上でこのフローを実行する必要があります



この方法(インテルPentium 4プロセッサで導入)は、ASCIIブランド識別文字列とプロセッサの最大周波数を

EAX、EBX、ECX、EDXの各レジスタに格納します

プロセッサブランドストリング検出フロー

ブランドストリングの機能

ブランドストリング機能を使用するにはEAXの入力値を0x80000002-0x80000004に設定してCPUID命令を

実行します。各EAXの入力値に対してCPUID命令はEAX、EBX、ECX、EDXに16個のASCII文字列を格納します

(格納された文字列はNULLで終わります)



次の表は、インテルPentium 4プロセッサファミリの最初の頃のプロセッサが格納するブランドストリングです

インテルPentium 4プロセッサが格納するプロセッサブランドストリング
EAX入力値 格納値 ASCII文字列
0x80000002 EAX = 0x20202020
EBX = 0x20202020
ECX = 0x20202020
EDX = 0x6E492020
"    "
"    "
"    "
"nl  "
0x80000003 EAX = 0x286C6574
EBX = 0x50202952
ECX = 0x69746E65
EDX = 0x52286D75
"(let"
"P )R"
"itne"
"R(mu"
0x80000004 EAX = 0x20342029
EBX = 0x20555043
ECX = 0x30303531
EDX = 0x007A484D
" 4 )"
" UPC"
"0051"
"\0zHM"


ブランドストリングからのプロセッサ最大周波数抽出

下図はプログラムがプロセッサブランドストリングからプロセッサの最大周波数を抽出するフローとなります

プロセッサの最大周波数を抽出するフロー

プロセッサのブランドインデックス

プロセッサのブランドインデックス(インテル® Pentium® Xeon™ プロセッサで導入)は、ブランド識別テーブルへのエントリポイントです

ブランド識別テーブルはOSがメモリ上に保存しておくことで、システムまたはユーザプログラムからアクセスできる

ようになります。ブランド識別テーブルは、各ブランドインデックスが、インテル公認のインテルプロセッサファミリであることを

示すASCIIブランド識別ストリングとプロセッサのモデル番号と関連付けられています



EAXに1を指定してCPUID命令を実行すると、EBXの下位バイトにブランドインデックスが格納されます

プログラムでインデックスから、ブランド識別テーブルに格納されているプロセッサのブランド識別ストリングを

特定することができます。ブランド識別テーブルの最初のエントリ(ブランドインデックス0)は、予約されており、

ブランド識別機能をサポートしていないプロセッサとの下位互換性が保たれています



下記表がブランドインデックスと識別ストリングの対応表となります

ブランドインデックスとIA-32とIA-64のブランドストリング
ブランドインデックス ブランドストリング
0x00 このプロセッサはブランドID機能をサポートしていません
0x01 インテル® Celeron® プロセッサ※
0x02 インテル® Pentium® IIIプロセッサ※
0x03 インテル® Pentium® Xenon™ プロセッサ。プロセッサシグネチャ=0x000006B1の場合インテル® Celeron® プロセッサ
0x04 インテル® Pentium® IIIプロセッサ
0x06 モバイル インテル® Pentium® IIIプロセッサ-M
0x07 モバイル インテル® Celeron® プロセッサ※
0x08 インテル® Pentium® 4プロセッサ
0x09 インテル® Pentium® 4プロセッサ
0x0A インテル® Celeron® プロセッサ※
0x0B インテル® Xenon™ プロセッサ
プロセッサシグネチャ=0x00000F13の場合インテル® Xeon™ プロセッサMP
0x0C インテル® Xenon™ プロセッサMP
0x0E モバイル インテル® Pentium® 4プロセッサ
プロセッサシグネチャ=0x00000F13の場合、インテル® Xenon™ プロセッサ
0x0F モバイル インテル® Celeron® プロセッサ※
0x11 モバイル Genuine インテル® プロセッサ
0x12 インテル® Celeron® プロセッサ※
0x13 モバイル インテル® Celeron® プロセッサ※
0x14 インテル® Celeron® プロセッサ
0x15 モバイル Genuine インテル® プロセッサ
0x16 インテル® Pentium® Mプロセッサ
0x17 モバイル インテル® Celeron® プロセッサ※
0x18-0x0FF 予約


※インテルPentium IIIプロセッサ以降に発表されたプロセッサのバージョンを指します

IA-32アーキテクチャにおける互換性

CPUID命令は初期モデルのIntel486™ プロセッサまたはIntel486プロセッサよりも以前のすべてのIA-32プロセッサで

サポートされません

影響のあるEFLAGSレジスタのフラグ

影響のあるEFLAGSレジスタのフラグ
フラグ 説明
ID -
VIP -
VIF -
AC -
VM -
RF -
NT -
IOPL -
OF -
DF -
IF -
TF -
SF -
ZF -
AF -
PF -
CF -


inserted by FC2 system