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