第四章 命令システム#
4.1 命令システムの発展と性能要求#
命令システムの基本概念
- 命令:コンピュータに特定の操作を実行させるためのコマンドです。コンピュータ構成の階層構造から見ると、コンピュータの命令にはマイクロ命令、機械命令、マクロ命令の区別があります。
- マイクロ命令はマイクロプログラムレベルのコマンドで、ハードウェアに属します;
- マクロ命令:いくつかの機械命令から構成されるソフトウェア命令で、ソフトウェアに属します;
- 機械命令:マイクロ命令とマクロ命令の中間に位置し、通常は命令と略されます。
- 各命令は独立した算術演算または論理演算操作を完了できます。本章で議論する命令は機械命令です。
- コンピュータ内のすべての機械命令の集合は、そのコンピュータの命令システムと呼ばれます。
- 命令システムはコンピュータの性能を表す重要な要素であり、その形式と機能は機械のハードウェア構造に直接影響を与えるだけでなく、システムソフトウェアにも直接影響を与え、機械の適用範囲に影響を与えます。
4.1.1 命令システムの発展#
発展状況#
-
1950 年代、命令システムには定点加減算、論理演算、データ転送、転送などの十数から数十の命令しかありませんでした。
-
1960 年代後半、乗算、除算、浮動小数点、10 進数、文字列処理などの命令が追加され、命令の数は 200 以上に達し、アドレッシング方式も多様化し、シリーズコンピュータが登場し始めました。
-
1970 年代末、大多数のコンピュータの命令システムは数百の命令に達し、これらのコンピュータは複雑命令セットコンピュータ(CISC、Complex Instruction Set Computer)と呼ばれます。
- しかし、このように膨大な命令システムは、コンピュータの開発周期を長くし、正確性を保証するのが難しく、デバッグやメンテナンスが困難になるだけでなく、使用頻度の非常に低い複雑な命令を大量に採用することによってハードウェアリソースの浪費を引き起こし、命令セットのいわゆる20:80 の法則を生じさせます。
- つまり、最も頻繁に使用される単純な命令は命令総数の 20%しか占めていませんが、プログラム中に現れる頻度は 80%を占めます。
-
そこで、人々は VLSI 技術の実現を容易にするために、リデュースド命令セットコンピュータ(RISC、Reduced Instruction Set Computer)を提案しました。
4.1.2 命令システム性能に対する要求#
- 完全性:完全性とは、アセンブリ言語でさまざまなプログラムを書くときに、命令システムが直接提供する命令が十分に使用でき、ソフトウェアを使用する必要がないことを指します。 完全性は、命令システムが豊富で、機能が完全で、使いやすいことを要求します。コンピュータ内で最も基本的で不可欠な命令は多くありません。多くの命令は最も基本的な命令プログラミングで実現できます。
- 有効性:有効性とは、この命令システムを使用して書かれたプログラムが高効率で実行できることを指します。 高効率は、プログラムが占めるストレージスペースが小さく、実行速度が速いことに主に表れます。
- 整合性:整合性には、命令システムの対称性、均一性、命令形式とデータ形式の一貫性が含まれます。
- 対称性:命令システム内のすべてのレジスタとメモリ単位は同等に扱われ、すべての命令はさまざまなアドレッシング方式を使用できます;
- 均一性:ある操作特性の命令はさまざまなデータ型をサポートできます。たとえば、算術演算命令はバイト、ワード、ダブルワード整数の演算、10 進数演算、単精度および倍精度浮動小数点数演算などをサポートできます;
- 命令形式とデータ形式の一貫性:命令の長さとデータの長さには一定の関係があり、処理とアクセスを容易にします。たとえば、命令の長さとデータの長さは通常バイト長の整数倍です。
- 互換性:シリーズ機の各機種間には同じ基本構造と共通の基本命令セットがあるため、命令システムは互換性があります。つまり、各機種の基本ソフトウェアは共通で使用できます。しかし、異なる機種が異なる時期に導入され、構造と性能に差異があるため、すべてのソフトウェアが完全に互換性を持つことは不可能であり、**「上位互換性」** を実現することしかできません。つまり、低価格の機種で実行されるソフトウェアは高価格の機種でも実行できます。
4.2 命令形式#
- 命令形式:命令語は二進数コードで表される構造形式
- 命令は以下の情報を反映できます:
- 何の操作をするか
- 操作数が必要な場合、どこから取るか
- 結果はどこに送られ、次の命令はどこから取るか
- 命令形式は二つの側面を含みます:
操作コードフィールド OP | アドレスコードフィールド A |
---|---|
命令の操作特性と機能を示す | 操作に参加する操作数のアドレスを指定する |
4.2.1 操作コード#
- コンピュータを設計する際、命令システムの各命令には操作コードを規定する必要があります。
- 命令の操作コード OP は、その命令がどのような性質の操作を行うべきかを示します。たとえば、加算、減算、乗算、除算、数値取得、数値保存などです。異なる命令は操作コードフィールドの異なるエンコーディングで表され、各エンコーディングは一つの命令を表します。たとえば、操作コード 001 は加算操作として規定されることがあります;操作コード 010 は減算操作として規定されることがあります。
- 操作コードフィールドを構成するビット数は、一般的にコンピュータの命令システムの規模に依存します。大規模な命令システムは、各特定の命令を表すためにより多くのビット数を必要とします。たとえば、命令システムに 32 の命令がある場合、5 ビットの操作コードが必要です。一般的に、n ビットを含む操作コードは最大で 2^n^ の命令を表すことができます。
4.2.2 アドレスコード(重点)#
- 一つの命令にいくつの操作数アドレスがあるかに応じて、その命令をいくつかの操作数命令またはいくつかのアドレス命令と呼ぶことができます。
ゼロアドレス命令#
操作コード OP |
---|
機能:操作数を必要としない命令、例えば「停止」、「空操作」、「クリア」などの制御命令。 |
一アドレス命令#
操作コード OP | 操作数 A1 |
---|---|
機能説明: OP (A1) →A1 | |
(AC) OP (A1) →AC | |
暗黙の約定として操作数は累積器 AC にあります |
二アドレス命令#
操作コード OP | 操作数 A1 | 操作数 A2 |
---|---|---|
A1: ソース / 目的操作数アドレス | ||
A2: 目的 / ソース操作数アドレス | ||
機能説明: | ||
(A1) OP (A2)→A1 | ||
(A1) OP (A2)→A2 |
二アドレス命令は操作数の物理的位置に基づいて次のように分類されます。
- SS メモリ - メモリタイプ
- RS レジスタ - メモリタイプ
- RR レジスタ - レジスタタイプ
三アドレス命令#
操作コード | A1 | A2 | A3 |
---|---|---|---|
A1: 被操作数アドレス、ソース操作数アドレスとも呼ばれます | |||
A2: 操作数アドレス、目的操作数アドレスとも呼ばれます | |||
A3: 操作結果を格納するアドレス | |||
機能説明:(A1) OP (A2)→A3 |
4.2.3 命令語の長さ (重点)#
概念#
- 命令語の長さ:一つの命令語は二進数コードのビット数を含みます。
- 機械語の長さ:コンピュータが直接処理できる二進数データのビット数。
- 単語長命令: 命令語の長さが機械語の長さに等しい命令。
- 半単語長命令: 命令語の長さが半分の機械語の長さに等しい命令。
- 双単語長命令: 命令語の長さが二つの機械語の長さに等しい命令。
多単語長命令の利点と欠点#
- 利点:メモリの任意の単位にアクセスするための十分なアドレスビットを提供します;
- 欠点:一つの命令を取り出すために二回またはそれ以上メモリにアクセスする必要があり、CPU の計算速度を低下させ、より多くのストレージスペースを占有します。
- 命令システムにおける命令の等長命令の利点:さまざまな命令語の長さが等しく、命令語の構造が単純であり、命令語の長さは不変です;
- 非等長命令の利点:さまざまな命令語の長さが命令機能に応じて異なり、構造が柔軟で、命令の長さを十分に活用できますが、命令の制御が複雑です。
- 問題は一般的に機械語の長さを 16 ビットと仮定します。以下の問題
4.3 操作数の種類#
4.3.1 一般的なデータ型#
- アドレスデータ: アドレスは実際にはデータの一種の形式です。
- 数値データ: コンピュータで一般的に使用される三種類の数値データ。
- 定点整数または定点小数、浮動小数点、圧縮 10 進数
- 文字データ: テキストデータまたは文字列で、現在広く使用されている ASCII コード。
- 論理データ: 一つの単位にいくつかの二進数ビット項目が構成されており、各ビットの値は 1 または 0 です。このようにデータを見たとき、それは論理データと呼ばれます。
4.4 命令とデータのアドレッシング方式 (重点!)#
- メモリ内で、操作数または命令語が書き込まれるまたは読み取られる方法には、アドレス指定方式、関連ストレージ方式、スタックアクセス方式があります。ほぼすべてのコンピュータは、メモリ内でアドレス指定方式を採用しています。
- アドレッシング方式:操作数または命令のアドレスを形成する方法
- 命令アドレッシング方式:メモリ内の命令のアドレスを形成するために使用されます。
- データアドレッシング方式:メモリ内の操作数のアドレスを形成するために使用されます。
4.4.1 命令アドレッシング方式#
- 順次アドレッシング方式
- ジャンプ方式
4.4.2 操作数アドレッシング方式#
命令中に与えられたアドレスコードフィールドを使用して実際の操作数を探す方法、すなわち操作数の有効アドレスを形成する方法を操作数のアドレッシング方式と呼びます。たとえば、一つの単一アドレス命令の構造は次のようになります:
操作コード OP | 変址 X 間址 I | 形式アドレス A |
---|---|---|
アドレッシング方式の特徴ビット | 偏移量 |
アドレッシングプロセスは、操作数の形式アドレスを操作数の有効アドレスに変換するプロセスです。
1、暗黙アドレッシング#
- 特徴:命令中に操作数のアドレスが明示的に示されず、操作数のアドレスが暗黙的に示されます。
- 単一アドレスの命令形式では、命令アドレスフィールドに第二の操作数のアドレスが明示されておらず、累積器 AC を第二の操作数アドレスとして規定しています。AC は暗黙のアドレスです。
2、即時アドレッシング#
- 特徴:即時アドレッシングは特別なアドレッシング方式で、命令のアドレスフィールドが示すのは操作数のアドレスではなく、操作数そのものです。
- データは命令中に含まれており、命令を取り出すと即座に使用できる操作数が取り出されるため、このような操作数は即時数と呼ばれます。
- 命令中に含まれる操作数は即座に使用でき、メモリへのアクセス時間を節約します。
- 命令形式:操作コード OP 操作数 A
- 例: 命令 mov ax, 100
3、直接アドレッシング#
- 特徴:命令中のアドレスコードフィールドが示すアドレス A は操作数の有効アドレス EA(Effective Address)であり、直接アドレスとも呼ばれます。すなわち、EA=A。
4、間接アドレッシング#
- 特徴:命令アドレスフィールドの形式アドレス A は操作数の真のアドレスではなく、操作数アドレスの指示器です。すなわち、A の内容が操作数の有効アドレスです:EA=(A)【いわゆる入れ子構造】
5、レジスタアドレッシング#
- 特徴:操作数はメモリ内に存在せず、汎用レジスタに格納されています。
- 命令中に示される操作数アドレスはメモリのアドレス単位番号ではなく、汎用レジスタの番号であり、命令の操作数は対応するレジスタに格納されます。すなわち、EA=R~i~
利点
- レジスタは CPU 内部にあるため、命令実行時にレジスタから操作数を取得する方が主記憶にアクセスするよりもはるかに速い;
- レジスタの数が少ないため、レジスタ番号が占めるビット数も少なく、命令のアドレスコードフィールドの長さを効果的に減少させることができます。
6、レジスタ間接アドレッシング#
-
特徴:命令中のレジスタの内容は操作数ではなく、操作数のアドレスであり、真の操作数はメモリ内にあります。すなわち、操作数を主記憶に格納し、操作数のアドレスを特定の汎用レジスタに格納し、その後、命令のアドレスコード部分にその汎用レジスタの番号を示します。この時、EA=(Ri)【入れ子構造の再入れ子】
-
利点:このアドレッシング方式の命令は短く、命令取得後に一度のメモリアクセスで操作数を得ることができるため、命令実行速度は前述の間接アドレッシング方式よりも速く、現在コンピュータで広く使用されているアドレッシング方式の一つです。
7、オフセットアドレッシング#
- 直接アドレッシングとレジスタ間接アドレッシング方式の組み合わせ
- 有効アドレス:EA=A+(R)、A は形式アドレス
- 命令中に二つのアドレスフィールドが必要で、少なくとも一つは明示的である必要があります。
- 形式アドレス A は直接使用されます。
- 一般的な三つのオフセットアドレッシングは:
- 相対アドレッシング、基準アドレッシング、変址アドレッシング
- 相対アドレッシング:プログラムカウンタ PC が基準アドレスを提供し、命令のアドレスコード部分が相対的なオフセット量 D を示し、両者を加算して操作数の有効アドレスを形成します。すなわち、EA=(PC)+D。プログラムカウンタの内容は現在の命令のアドレスです。
- 基準アドレッシング:基準アドレスレジスタのビット数は非常に長く設定できるため、より大きなストレージスペースでアドレッシングが可能です。
- 変址アドレッシング:変址アドレッシングは、命令のアドレスコード部分で示された基準アドレス A と CPU 内の特定の変址レジスタ Rx の内容を加算して操作数の有効アドレスを形成します!ここに画像の説明を挿入
8、セグメントアドレッシング方式#
- マイクロコンピュータではセグメントアドレッシング方式が採用されており、その本質は基準アドレッシングです。
- 1MB の主記憶空間を最大 64KB の長さでいくつかのセグメントに分割し、特定のメモリ単位にアドレッシングする際には、基準アドレスレジスタ(セグメントレジスタ)と命令中に提供された 16 ビットのオフセット量を加算して実際の 20 ビットの物理アドレスを形成します。
9、スタックアドレッシングスタック#
- データを格納できる一時的なストレージ単位
- 二つの形式:レジスタスタックとメモリスタック
- ストレージ原則:先入れ後出し
- データの格納と取得はスタックのトップを通じて行われ、暗黙的または明示的なスタックインジケーター(スタックポインタ)が必要です。
- スタック命令:PUSH、POP
[例 4] 二アドレス RS 型命令の構造は次のようになります:
6 ビット 4 ビット 1 ビット 2 ビット 16 ビット
OP 汎用レジスタ I X オフセット量 D
ここで I は間接アドレッシングフラグビット、X はアドレッシングモードフィールド、D はオフセットフィールドです。I、X、D の組み合わせによって、次のようなアドレッシング方式を構成できます:
6 つのアドレッシング方式の名称を挙げてください。