このプログラムでは、 ラベル DATA から並んだ16個のデータの中から最大値を見つけ出し、 その結果をラベル RESULT の場所に格納している。 MICRO-1に追加する「最大値を求める命令」は Raで指定したレジスタにデータの先頭アドレス、NDにデータの個数を設定すると、 データを検索し、その最大値を求める。 求めた最大値を Rbで指定したレジスタに格納する。
「最大値を求める命令」を使った場合の機械語プログラムでは 元のプログラムのループ処理(最大値を求める処理部分)を 1つの機械命令(EX命令)に置き換えている。
このプログラムと命令追加の変更を行った 'MICROONE' を組み合わせて実行する。
'MICROONE' 中でEX命令を処理している部分を変更することで、 最大値を求める追加命令を実現し、 シミュレータ上で実行せよ。
検索対象データの値(ラベル DATA 以降に格納されている値)を変えて、 それぞれについて動作確認を行うこと。
また、課題4と同様に、元のプログラム
maxval
と実行ステップ数を比較して、考察せよ。
実行ステップ数がどう変わったか?
何故そうなるのか?
を必ず説明すること。
(ヒント:
専用命令を使う場合、1つの命令で多くの処理を担うことになるため、
命令サイクルのうちフェッチフェーズの処理回数が減ることになる)
もしこれらのレジスタを使いたい場合は、
一旦レジスタの値をメモリ上に保存してから使用すること。
また、レジスタを使い終わったら、
メモリ上に保存しておいた値をレジスタにセットして元の値に戻すこと。
レジスタ4番と5番(R4, R5)については自由に使うことができる。
レジスタ4番(R4)にはフェッチフェーズにおいて
命令レジスタIRのND部の値が格納されているので、
必要に応じてこの値を使用することが出来る。
SET操作などを使って比較を行なう必要はない。