RISCの場合、オペランドが3つであってもメモリアクセスと加算は別命令となるため、さらにロード命令とストア命令が必要になる。レジスタが32本なら、3つのオペランドを指定するのに15ビット必要となり、必然的に命令サイズは32ビットかそれ以上でなければならない。一部のCISCでは3つ以上のレジスタを指定してメモリアクセスを行う命令が存在する。コード密度を改善する機構として実行ファイル圧縮が研究されてきた。個々の命令から構成される。アーキテクチャにもよるが、命令は通常、以下のいずれか(あるいは複数)を指定する。算術演算、アドレス指定、制御用途にレジスタを指定する。メモリ位置やオフセットを指定する。オペランドを解釈するためのアドレッシングモードを指定する。このような単純な命令を組み合わせてより複雑な操作を構築し、(ノイマン型であれば)これを逐次的に実行したり、制御フロー命令で順序を変えたりする。多くの命令セットに共通な操作として、以下のものがある。移動(コピー)レジスタに固定の定数値を格納する。あるメモリ位置からレジスタにデータを移動する(または逆方向)。そのデータに対して後から何らかの計算を行い、結果をメモリに格納する。2つのレジスタの内容についてそれら演算を行い、結果をレジスタに格納する。2つのレジスタのビット位置毎の論理和や論理積を計算したり、1つのレジスタのビット毎の否定を計算する。2つのレジスタの値の比較(等しいかどうか、どちらが大きいかなど)制御フローの変更プログラム内の別の位置にジャンプし、そこの命令を実行する。ある条件が成り立つときだけ別の位置にジャンプする。別の位置にジャンプするが、その際にジャンプ元の次の命令の位置を記憶しておき、後でそこに戻る(サブルーチン)コンピュータによっては命令セット内に複雑な命令を持っている。通常ならいくつもの命令を使わなければならないような操作を1つの命令で実現している。一般にそのような命令は内部で複数のステップに分解され、複数の実行ユニットを使って実現される。なくば、プロセッサの回路規模が大きくなりすぎることになる。そのような複雑な命令として以下のようなものがある。複数のレジスタを一度にスタック上にセーブする。(コンテキストスイッチ)メモリを大きなブロックで移動する。複雑な浮動小数点演算(三角関数、平方根など)テスト・アンド・セット命令などの不可分操作を実行する。ALUへの入力にレジスタではなく、メモリ位置を指定する命令。メモリからの移動と計算が1つの命令で行われる。命令またはベクター命令がある。これは、同じ演算操作を複数のデータに同時に行うものである。よって大きなベクトルや行列の操作を短時間で行うことが可能となる。並列化されたアルゴリズムを高速に実行できる。実装には様々なマーケティング上の名称がつけられている(MMX、3DNow!、AltiVecなど)。命令セットの設計は複雑な問題である。マイクロプロセッサの歴史は命令セットの設計で2つの段階に分けられる。複雑な命令セットが実装されていた。1970年代、IBMなどで研究が行われ、多くの命令が省略可能であることが判明した。縮小された命令セットが登場した。命令セットが縮小されることで、クロックを高速化でき、プロセッサのサイズを小さくでき、電力消費を低減させることが可能となった。極端なRISCでなくとも、典型的な操作を最適化し、メモリやキャッシュの効率を向上させ、プログラミングを単純化させることができる。ISA一覧編集この一覧は完全ではない。古いものは省かれていて、新しいものはこれからも出てくるだろう。商用のマイクロプロセッサやマイクロコントローラは様々なISAを実装している。ISAのカスタマイズも非常によく見られる。BP、2006年、第三版。4-8222-8266-X。3.0のもとで利用可能です。プライバシーデスクトップ。