CPUID
概要
CPUIDとは、米インテル(Intel)社のCPUなどに実装された機械語(マシン語)の命令の一つで、CPUの機種や製造元の情報を返すもの。製品によって対応状況が異なる機能の使い分けなどに用いられる。同社製品や他社の互換製品などx86系CPUで利用できる命令の一つで、1990年代にi486シリーズの一部製品に導入され、後継のPentium以降の製品では標準的に利用できるようになっている。命令の種類を表すオペコード(opcode)は16進数で「0FA2」である。
オペランドは無く単体で実行する命令だが、EAXレジスタの内容によって結果が変化する。EAXが「0」の場合は製造元を表すベンダーIDを文字列で返す。12文字のASCIIコードがEBX、EDX、ECXの各レジスタに3文字分ずつ格納される。例えば、Intel社製は「GenuineIntel」を返す。
EAXが「1」の場合はCPUの機種や機能に関する複数の情報を返す。EAXにCPUの製品モデルを表すステッピング、モデル、ファミリー、プロセッサタイプなどが格納され、EDXとECXには拡張機能が実装されているか否かを表す機能フラグが格納される。これ以外に追加の情報がある場合はEBXに格納される。
他にも、EAXが「2」の場合にはキャッシュメモリやTLB(Translation Lookaside Buffer)の情報を、「3」の場合には製品個体ごとに異なるプロセッサシリアルナンバー(Pentium 4以降では廃止)を返す。さらに、EAXが16進数で「80000000」以降に拡張機能が用意されており、米AMD社が独自に策定した機能の有無を問い合わせたり、CPUの製品名を表すプロセッサブランド文字列を取得することができる。
CPUIDで実行環境のCPUを調査することで、ソフトウェアを特定世代以降の製品でのみ実行できるようにしたり、マルチメディア拡張命令など製品のモデルや世代によって対応状況が異なる拡張機能の有無を調べてコードを使い分けるといった挙動を実装することができる。CPUIDで調べられる情報を一覧表示するユーティリティソフトなども公開されている。