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プロセッサは命令の追加を続けているためである。
自分の理解
コンピュータのハードウェアとソフトウェアがやり取りするための、ルールや言語のようなものだと捉えている。
関連
- レジスタ
- CISC
- RISC
- SIMD
- WebAssembly