set)は、コンピュータのハードウェアに対して命令を伝えるための言葉の語彙[1]。外部リンク命令セットアーキテクチャ編集コンピュータのアーキテクチャとは、もともとは、入出力インタフェースを含むコンピュータシステムのハードウェア全体(周辺機器自体は含まない)の、ユーザー(プログラマ、OSを設計するプログラマも含む)から見たソフトウェアインタフェースの定義である。(コンピュータ)とデータ型、アドレッシングモード、メモリマネジメント、割り込みと例外処理、さらに(もしあれば)入出力などである。ISAは、プロセッサに実装された命令形式を二進数のコード(オペコード)のセットで表現する。オペコードのセットは、機械語とも呼ばれる。マイクロアーキテクチャはプロセッサを設計する上での技術であり、マイクロコード、パイプライン、キャッシュシステムなどを含み、一般的にはアーキテクチャが異なればISAも異なるが、同じ命令セットを持つこともできる。後者の例としては、インテルのPentiumとAMDのAthlonとがある。これらは実装しているx86命令セットはほとんど同じだが内部設計は全く異なっている。あり、これはシステム/38とAS/400で使われている。TIMIは最近では仮想機械として知られるソフトウェアで実現されている。これはプラットフォームとそこで動作するアプリケーションの寿命を延ばすために設計されたもので、プラットフォーム全体を全く異なるハードウェアに移行してもTIMI自身だけを移植すれば、その上のオペレーティングシステムもアプリケーションもそのまま動作する。含めたソフトウェアは全く変更せずに済んだ。ISAの各命令の処理を定義する。ISAをプロセッサとして実装する方法が歴史的に大きく2つ存在している。この記事は実装についての記事ではないので深くは扱わない。詳細はCPU設計などの記事を参照のこと。ワイヤードロジックマイクロプログラム方式この他、エミュレータや仮想機械などインタプリタ型のソフトウェアによる実装や、ハードウェア記述言語などでFPGAなどのプログラマブルロジックデバイスのコンフィギュレーションとして記述されたソフトプロセッサがある。今日、新たなISA(あるいはマイクロアーキテクチャ)を開発しようとするベンダーはソフトウェアエミュレータを作って、ハードウェアが完成する前にソフトウェア開発者が開発に取り掛かることができるようにするのが一般的である。命令セットの設計では、一部のオペコードをソフトウェア割り込みに利用する。6502では0x00、Z80では0xFF[2]など、68000では0xA000から0xAFFFがソフトウェア割り込みに使われた。PopekとGoldbergの仮想化要件に適合した命令セットでは、高速な仮想機械の実装が容易になる。複数プロセッサを搭載するシステムでは、命令セットでフェッチ・アンド・アッド、LL/SC、コンペア・アンド・スワップなどの機能をサポートすることで排他制御の実装が容易になる。初期のコンピュータでは、メモリは高価で容量が少なかったため、メモリ上のプログラムのサイズを削減することが重要な課題であった。density」と呼び、命令セットの重要な特性の1つとしていた。コード密度の高い命令セットでは、1つの命令で一度にいくつもの機能を実行できるようになっている。基本的な操作(加算、乗算、サブルーチンへの分岐など)に加えて、メモリアクセス、レジスタのインクリメントといった操作を同時に行う。ソフトウェア実装の命令セットではさらに複雑な命令も存在する。RISCは、メモリの低価格化に伴って登場した考え方であり、命令セットを単純化することでコード密度は低下する。RISCでは、各命令はレジスタ同士の加算などといった単純な操作しか行わない。スタックマシンの一種であり、命令数は非常に少なく(16から64種)、1ワードに複数の命令を格納可能となっている。マルチコアでの実装に適している。コード密度はRISCと同程度である(メモリ当たりの命令密度は増加しているが、命令数が少ないため、より多くの命令実行を必要とする)。FORTH言語を実装したチップがある[1]。レジスタを意味する)。スタックマシンとも呼ばれ、全てのオペランドをスタックから取り出して使用する。初期のコンピュータでよく使われたモデルで、1つのオペランドを使って処理をし、結果をアキュムレータに格納する。RISCマシンのほとんどはここに分類される。CISCマシンもここに分類されるものが多い。