命令セット(めいれいせっと、英: instruction set)はプロセッサ命令の集まりである。すなわちコンピュータのハードウェアに対して命令を伝えるための言葉の語彙である[1]。 プロセッサは命令を実行することで処理をおこなう。プロセッサが受け入れ可能な命令はプロセッサごとに異なり、あるプロセッサが受け入れ可能な命令の集合を命令セットという。 命令はバイナリ形式であるため、命令セットは受け入れ可能なバイナリの単なる一覧である。しかし実際に命令セットを利用するには各命令の意味(セマンティクス)を理解する必要がある。命令セットはこのセマンティクスをバイナリ列で表現したものとも言えるため、「命令セット」という語はレジスタ種別やアドレッシングモードなどを含む「プロセッサモデルとその命令群」という意味で用いられる[2]。 プロセッサ間で共通化された、インターフェースとしての論理的な命令セットは命令セットアーキテクチャ(英: instruction set architecture, ISA)と呼ばれる。ISAに対してプログラミングをおこない、ISAに対してプロセッサ実装をおこなうことで、単一のISAに対して書かれたプログラムが様々なプロセッサで動作する。 命令セットは複数の要素を組み合わせて設計されている。 これらの要素は最終的に「利用可能な命令の一覧」という形でインターフェースとなる。 ISAにおけるレジスタ(英: register)はオペランドとして利用できる記憶領域である。論理レジスタ(英: logical register)とも呼ばれる。レジスタの構成(用途・bit深度・数/本数)はISAによって異なる。例えばIA-32は8本のGPレジスタを持つ[3]がX64は16本のGPレジスタを持つ[4]。 論理レジスタという名称はマイクロアーキテクチャ上で定義されるレジスタ(物理レジスタ/physical registers)との区別を意図した名称である。ソフトウェアはインターフェースとしての論理レジスタに対してプログラミングされ、処理系であるCPUは論理レジスタを物理レジスタへマッピングして実処理をおこなう。この抽象化により並行計算などの最適化が可能になっている。詳細は「レジスタ・リネーミング」を参照 マイクロアーキテクチャを設計するとき、技術者はRegister Transfer Language(コンパイラの中間形式と同じ名前だが直接の関係はない)を使って ISAの各命令の処理を定義する。 ISAをプロセッサとして実装する方法が歴史的に大きく2つ存在している。この記事は実装についての記事ではないので深くは扱わない。詳細はCPU設計などの記事を参照のこと。 この他、エミュレータや仮想機械などインタプリタ型のソフトウェアによる実装や、ハードウェア記述言語などでFPGAなどのプログラマブルロジックデバイスのコンフィギュレーションとして記述されたソフトプロセッサがある。 今日、新たなISA(あるいはマイクロアーキテクチャ)を開発しようとするベンダーはソフトウェアエミュレータを作って、ハードウェアが完成する前にソフトウェア開発者が開発に取り掛かることができるようにするのが一般的である。 命令セットの設計では、一部のオペコードをソフトウェア割り込みに利用する。例えば、6502では0x00、Z80では0xFF[5]など、68000では0xA000から0xAFFFがソフトウェア割り込みに使われた。
概要
要素
計算モデル: レジスタマシンかスタックマシンか
演算: CISC型かRISC型か。対応するオペコードの設定
レジスタ: 用途、bit幅、本数
アドレッシングモード
レジスタ詳細は「レジスタ (コンピュータ)」を参照
命令セットの設計
ワイヤードロジック
マイクロプログラム方式
Size:43 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef