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