命令セット
マイクロアーキテクチャを設計するとき、技術者はRegister Transfer Language(コンパイラの中間形式と同じ名前だが直接の関係はない)を使って ISAの各命令の処理を定義する。
ISAをプロセッサとして実装する方法が歴史的に大きく2つ存在している。この記事は実装についての記事ではないので深くは扱わない。詳細はCPU設計などの記事を参照のこと。
ワイヤードロジック
マイクロプログラム方式
この他、エミュレータや仮想機械などインタプリタ型のソフトウェアによる実装や、ハードウェア記述言語などでFPGAなどのプログラマブルロジックデバイスのコンフィギュレーションとして記述されたソフトプロセッサがある。
今日、新たなISA(あるいはマイクロアーキテクチャ)を開発しようとするベンダーはソフトウェアエミュレータを作って、ハードウェアが完成する前にソフトウェア開発者が開発に取り掛かることができるようにするのが一般的である。
命令セットの設計では、一部のオペコードをソフトウェア割り込みに利用する。例えば、6502では0x00、Z80では0xFFなど、68000では0xA000から0xAFFFがソフトウェア割り込みに使われた。
PopekとGoldbergの仮想化要件に適合した命令セットでは、高速な仮想機械の実装が容易になる。
複数プロセッサを搭載するシステムでは、命令セットでフェッチ・アンド・アッド、LL/SC、コンペア・アンド・スワップなどの機能をサポートすることで排他制御の実装が容易になる。
SECDマシン
ALGOL Object Code
MMIX - ドナルド・クヌースの The Art of Computer Programming で使われている教育用途のマシン
プロセッサは命令を実行することで処理をおこなう。プロセッサが受け入れ可能な命令はプロセッサごとに異なり、あるプロセッサが受け入れ可能な命令の集合を命令セットという。
命令はバイナリ形式であるため、命令セットは受け入れ可能なバイナリの単なる一覧である。しかし実際に命令セットを利用するには各命令の意味(セマンティクス)を理解する必要がある。命令セットはこのセマンティクスをバイナリ列で表現したものとも言えるため、「命令セット」という語はレジスタ種別やアドレッシングモードなどを含む「プロセッサモデルとその命令群」という意味で用いられる。
プロセッサ間で共通化された、インターフェースとしての論理的な命令セットは命令セットアーキテクチャ(英: instruction set architecture, ISA)と呼ばれる。ISAに対してプログラミングをおこない、ISAに対してプロセッサ実装をおこなうことで、単一のISAに対して書かれたプログラムが様々なプロセッサで動作する。