TL;DR

コンピュータやマイクロプロセッサが実行できる命令(命令セット)と、その命令を実行するための仕組みを定義したもの。

なぜ必要か

ISA はソフトウェアとハードウェアの橋渡しをする。プロセッサが実行できる基本的な操作を定義するので、プログラムはハードウェアに何をすべきかを指示できる。OS などのソフトウェアは、ISA という標準的なインタフェースを通してハードウェアとやり取りする。

ISA は互換性も生む。ある ISA を前提に作ったソフトウェアは、その ISA をサポートするどのプロセッサでも動く。

仕組み

ISA は次の要素を定める。

  • 命令セット: プロセッサが直接実行できる命令の一覧。加算、減算、データ転送、論理演算など
  • レジスタ: プロセッサ内の高速な記憶装置。使えるレジスタの数と役割を定める
  • アドレッシングモード: 命令がデータにどうアクセスするか。メモリを直接読み書きするのか、レジスタを介すのか
  • データ形式: 整数、浮動小数点数、文字列などの扱いとビット数。32 ビットと 64 ビットの違いもここに含まれる
  • I/O 操作: ディスク、ネットワーク、ディスプレイなどの外部デバイスとのデータのやり取り

例

ISA は大きく CISC と RISC に分かれる。CISC(Complex Instruction Set Computer)は、複雑な処理を 1 つの命令で実行できる。x86 がその代表である。RISC(Reduced Instruction Set Computer)は、単純で速い命令をたくさん実行して効率を上げる。ARM、RISC-V、MIPS がその例である。

WebAssembly は、仮想マシンとその命令セットを定めた仮想的な ISA である。

注意点

今では「RISC 対 CISC」という単純な優劣の議論に、技術的な意味はない。

x86などの代表的なCISCプロセッサは内部的にRISCのアーキテクチャを段階的に取り入れ、逆に代表的なRISCプロセッサは命令の追加を続けているためである。

自分の理解

コンピュータのハードウェアとソフトウェアがやり取りするための、ルールや言語のようなものだと捉えている。

関連

出典