2011-05-05 コンピュータアーキテクチャのエッセンスを読んだときのメモ:第6章 オペランドアドレッシングと命令表現 6.1 はじめに 本章では、命令について細かく焦点を当てる すなわち、命令の表現方法とオペランドの指定の仕方について述べる オペランドの形式はプログラマにとって重要 命令表現がどのようにオペランド形式を決定するのかを理解する 6.2 0, 1, 2, 3-アドレス設計 命令はオペコードとオペランドのセットからなる いくつのオペランドが必要になるのか 加算の場合、入力が二つで出力が一つの合計三つ 任意の数のオペランドを各命令で指定できる方が直感的には良さそうだが たいていのプロセッサではオペランドの数が限られている その方が効率が良いから 命令長が可変だと命令のフェッチ及びデコードの効率が固定長に比べて悪い 任意の数のオペランドをフェッチするのは効率が悪い 並列に動作させるプロセッサならばある程度は解決できるが オペランド数を固定せずに命令セットを設計できるか 存在する 6.3 オペランドのない命令 オペランドを持たない命令セット:0アドレスアーキテクチャ オペランドが暗黙的に決まっている、どこにあるかがすでに分かっているケース オペランドがスタック状に配置されるケース 6.4 1オペランド命令 各命令のオペランドを1つに限定するケース 暗黙のオペランドが備わっているケース アキュムレータ 暗黙のオペランドを取り出し、1つのオペランドを加えて戻す、という流れ 6.5 2オペランド命令 足し算などに適用 6.6 3オペランド命令 足し算してその結果の行き先 6.7 ソースオペランドと即値 ここまでは、オペランドの詳細な中身については無し オペランドの数についてだけ 命令において、オペランドはどのように表現されるのか、全てのオペランドは同じ表現を使うべきだろうか。 演算に用いられるオペランドは、様々な方法で得られる。その一例を示す。 オペランドが定数である場合、それを命令に組み込むことでレジスタの節約になる オペランドに定数値が示された場合、それを即値と呼ぶ。 6.8 フォン・ノイマンボトルネック オペランドにはメモリでは無くレジスタを使うべき 6.9 明示的又は暗黙的なオペランドの符号化 6.9.1 暗黙のオペランド符号化 複数のオペコードが用意され、適切な物が使われる 6.9.2 明示的オペランド符号化 6.10 複数の値を結合するオペランド