命令セット(めいれいせっと、英: 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がソフトウェア割り込みに使われた。 PopekとGoldbergの仮想化要件に適合した命令セットでは、高速な仮想機械の実装が容易になる。 複数プロセッサを搭載するシステムでは、命令セットでフェッチ・アンド・アッド、LL/SC、コンペア・アンド・スワップなどの機能をサポートすることで排他制御の実装が容易になる。 初期のコンピュータでは、メモリは高価で容量が少なかったため、メモリ上のプログラムのサイズを削減することが重要な課題であった。そのため、ある作業をするのに要する命令列のサイズを「コード密度; code density」と呼び、命令セットの重要な特性の1つとしていた。コード密度の高い命令セットでは、1つの命令で一度にいくつもの機能を実行できるようになっている。そのような複雑な命令セットを持つコンピュータ (CISC) では、基本的な操作(加算、乗算、サブルーチンへの分岐など)に加えて、メモリアクセス、レジスタのインクリメントといった操作を同時に行う。ソフトウェア実装の命令セットではさらに複雑な命令も存在する。 RISCは、メモリの低価格化に伴って登場した考え方であり、命令セットを単純化することでコード密度は低下する。RISCでは、各命令はレジスタ同士の加算などといった単純な操作しか行わない。 MISC (Minimal Instruction Set Computer) はスタックマシンの一種であり、命令数は非常に少なく(16から64種)、1ワードに複数の命令を格納可能となっている。
概要
要素
計算モデル: レジスタマシンかスタックマシンか
演算: CISC型かRISC型か。対応するオペコードの設定
レジスタ: 用途、bit幅、本数
アドレッシングモード
レジスタ詳細は「レジスタ (コンピュータ)」を参照
命令セットの設計
ワイヤードロジック
マイクロプログラム方式
コード密度
Size:43 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef