命令セットアーキテクチャ(ISA )は、コンピュータの抽象モデルであり、コンピュータアーキテクチャとも呼ばれます。ISAの実現は実装と呼ばれます。ISAは、性能、物理的サイズ、コストなどが異なる複数の実装を可能にします。ISAはソフトウェアとハードウェア間のインターフェースとして機能するため、ISA向けに記述またはコンパイルされたソフトウェアは、同じISAの異なる実装上で実行できます。これにより、異なる世代のコンピュータ間でのバイナリ互換性が容易に実現され、コンピュータファミリの開発が可能になりました。これらの発展はいずれも、コンピュータのコスト削減と適用範囲の拡大に貢献しています。こうした理由から、ISAは今日のコンピューティングにおいて最も重要な抽象概念の一つとなっています。
ISAは、機械語プログラマがコンピュータをプログラミングするために必要なすべての情報を定義します。ISAが定義する内容はISAによって異なりますが、一般的に、ISAはサポートされるデータ型、状態(メインメモリやレジスタなど)とその意味(メモリの一貫性やアドレッシングモードなど)、命令セット(コンピュータの機械語を構成する機械語命令のセット)、および入出力モデルを定義します。
コンピュータ黎明期には、バイナリ、10進数[ 1 ]、さらには3進数[ 2 ] [ 3 ]を使用するコンピュータが存在した。現代のコンピュータはほぼ完全にバイナリである。
文字は、さまざまな文字セットを使用してビット列または数字列としてエンコードされます。同じメーカー内でも文字セットに違いがありました。
整数は、符号付き絶対値、1の補数、2の補数、オフセットバイナリ、9の補数、10の補数など、さまざまな表現でエンコードされます。
Similarly, floating-point numbers are encoded with a variety of representations for the sign, exponent and mantissa. In contemporary machines IBM hexadecimal floating-point and IEEE 754 floating point have largely supplanted older formats.
Addresses are typically unsigned integers generated from a combination of fields in an instruction, data from registers and data from storage; the details vary depending on the architecture.
Computer architectures are often described as n-bit architectures. In the first three quarters of the 20th century, n was often 12, 18, 24, 30, 36, 48 or 60. In the last third of the 20th century, n was often 8, 16, or 32, and in the 21st century, n is often 16, 32 or 64, but other sizes have been used (including 6, 39, 128). This is actually a simplification as computer architecture often has a few more or less "natural" data sizes in the instruction set, but the hardware implementation of these may be very different. Many instruction set architectures have instructions that, on some implementations of that instruction set architecture, operate on half and/or twice the size of the processor's major internal datapaths. Examples of this are the Z80, MC68000, and the IBM System/360. On these types of implementations, a twice as wide operation typically also takes around twice as many clock cycles (which is not the case on high performance implementations). On the 68000, for instance, this means 8 instead of 4 clock ticks, and this particular chip may be described as a 32-bit architecture with a 16-bit implementation. The IBM System/360 instruction set architecture is 32-bit, but several models of the System/360 series, such as the IBM System/360 Model 30, have smaller internal data paths, while others, such as the 360/195, have larger internal data paths.
The external databus width is not used to determine the width of the architecture; the NS32008, NS32016 and NS32032 were basically the same 32-bit chip with different external data buses. IBM's PowerPC 604 has a 64-bit bus but only 32-bit registers. The System/360 processors, and some early 32-bit microprocessors such as the Motorola 68000, have 24-bit addresses.
アーキテクチャにおける命令のビット幅は、必ずしもそのアーキテクチャのビット幅と一致するとは限りません。例えば、System/360、PDP-11アーキテクチャ、VAXアーキテクチャ、x86アーキテクチャの命令は可変長です。SuperHの初期バージョンは、32ビットアーキテクチャでありながら固定長の16ビット命令を使用していましたが、後のバージョンでは16ビット命令と32ビット命令の両方が使用されるようになりました。
20世紀の最初の3四半期では、ワード指向の10進数コンピュータは通常、符号が別個の10桁のワードを持ち、整数では10桁すべてを使用し、浮動小数点数では指数に2桁を使用していた[ 4 ] [ 5 ] [ 6 ]。
アーキテクチャは、「ビッグ」エンディアンまたは「リトルエンディアン」、あるいはその両方を使用するか、どちらかを使用するように構成できます。リトルエンディアンのプロセッサは、マルチバイト値の最下位バイトがメモリ番号の最も小さい位置に配置されるように、メモリ内のバイトを並べます。一方、ビッグエンディアンのアーキテクチャは、最上位バイトがアドレス番号の最も小さい位置に配置されるようにバイトを配置します。x86アーキテクチャやいくつかの8ビットアーキテクチャはリトルエンディアンです。ほとんどのRISCアーキテクチャ(SPARC、Power、PowerPC、MIPS)は元々ビッグエンディアンでしたが(ARMはリトルエンディアン)、現在では(ARMを含め)多くがどちらにも構成可能です。
エンディアンは、一部のデータ形式よりも小さいデータ単位(バイトなど)を個別にアドレス指定できるプロセッサにのみ適用されます。
一部のアーキテクチャでは、命令は単一のオペコードを持ちます。他のアーキテクチャでは、一部の命令はオペコードと1つ以上の修飾子を持ちます。たとえば、IBM System/370では、バイト0はオペコードですが、バイト0がB2 16の場合、バイト1で特定の命令を選択します。たとえば、B205 16はストアクロック(STCK)です。一部の命令セットアーキテクチャでは、1つ以上のオペコード接頭辞を使用して、後続のオペコードを変更したり、オペコードの数を増やしたりします。
アーキテクチャでは通常、命令にオペランドアドレッシングモードの組み合わせを含めることができる。
ベクトルプロセッサは、要素ベースの演算に特有の追加モードを提供している。
オペランドの数は、命令セットのパフォーマンスを示す指標となる要素の1つです。3オペランドアーキテクチャ(2入力、1出力)では、
A := B + C
1つの命令で計算される
B、C、Aを追加
2オペランドアーキテクチャ(1入力、1入力および1出力)により
A := A + B
1つの命令で計算される
B、Aを追加
しかし、
A := B + C
2つの指示に従って行う
B、Aを動かす C、Aを追加
下の表に示すように、命令セットによっては非常に単純な固定長のエンコード方式を採用しているものと、可変長のものがあります。通常、固定長のエンコード方式を採用しているのはRISCアーキテクチャであり、可変長のエンコード方式を採用しているのはCISCアーキテクチャですが、常にそうとは限りません。
以下の表は、命令セットアーキテクチャに関する基本情報を比較したものです。
注: