サポート命令
区分 | 命令 | 例 | 意味 | 備考 |
算術演算 | add | add R1,R2,R3 | R1 <= R2 + R3 | 加算 |
subtract | sub R1,R2,R3 | R1 <= R2 - R3 | 減算 | |
論理演算 | and | and R1,R2,R3 | R1 <= R2 and R3 | 各ビットごとにAND |
or | or R1,R2,R3 | R1 <= R2 or R3 | 各ビットごとにOR | |
データ転送 | load word | lw R1, 100(R2) | R1 <= メモリ[R2+100] | メモリからレジスタへの転送 |
store word | sw R1, 100(R2) | メモリ[R2+100] <= R1 | レジスタからメモリへの転送 | |
条件分岐 | branch on equal | beq R1,R2,25 | if (R1=R2) go to PC+4+100 | 等しい時にPC相対分岐 |
set on less than | slt R1,R2,R3 | if (R2<R3) R1<=1 else R1<=0 | ||
無条件ジャンプ | jump | j 2500 | go to 10000 | 絶対アドレスジャンプ |
データRAMと命令ROMの初期状態は以下に示すようになっている。
プログラムカウンタPC=0として命令ROMのアセンブラプログラムが実行される。
プログラムの実行を紙の上で追い、以下の質問の答えを含むレポートを提出せよ
以下のプログラムはCで言うfor i=? のようなループを2重に含んでいる、ループインデックスに相当するレジスタはどれか?
このプログラムは0番地から始まり、最後に88番地を実行するが、0番地から始まり88番値を実行するのにのべいくつの命令の実行を行うか?
388番地の32という整数値は何を示すか
このプログラムの実行後のデータRAMの内容はどうなるか
このプログラムの行う処理は何か、一般にこの処理方法はなんと呼ばれるアルゴリズムを使用しているか?
データRAMの内容
データRAM | ||||
バイトアドレス | 00 | 01 | 10 | 11 |
256 | 0 | |||
260 | 1 | |||
264 | 2 | |||
268 | 3 | |||
272 | 4 | |||
276 | 5 | |||
280 | 6 | |||
284 | 7 | |||
... | ||||
384 | 256 | |||
388 | 32 | |||
392 | 4 | |||
... |
命令ROMの内容
命令ROMの内容 | ||||||
バイトアドレス | 1/4アドレス | 00 | 01 | 10 | 11 | 説明 |
0 | 0 | NOP | ||||
4 | 1 | NOP | ||||
8 | 2 | LW R1, 388(R0) | R1 <= 32 | |||
12 | 3 | LW R2, 384(R0) | R2 <= 256, 先頭番地 | |||
16 | 4 | LW R3, 392(R0) | R3 <= 4 | |||
20 | 5 | ADD R5, R1, R2 | R5 <= 288, 最終番地の次 | |||
24 | 6 | SUB R5, R5, R3 | R5 <= R5 - 4 = 284, 最終番地 | |||
28 | 7 | ADD R6, R2, R0 | R6 <= R2 = 256 転送、R0は0固定 | |||
32 | 8 | ADD R7, R6, R0 | R7 <= R6、比較するデータ1のアドレス | |||
36 | 9 | ADD R8, R7, R3 | R8 <= R7 + 4、比較するデータ2のアドレス | |||
40 | 10 | LW R10, 0(R7) | R10 <= 比較するデータ1 | |||
44 | 11 | LW R11, 0(R8) | R11 <= 比較するデータ2 | |||
48 | 12 | SLT R9, R10, R11 | R10 < R11ならR9 <= 1、違うならR9 <=0 | |||
52 | 13 | BEQ R9, R0, +2 | R9が0ならばPC=PC+4+2*4=64へ分岐 | |||
56 | 14 | SW R10, 0(R8) | 比較データ1をスワップしてメモリへ | |||
60 | 15 | SW R11, 0(R7) | 比較データ2をスワップしてメモリへ | |||
64 | 16 | ADD R7, R7, R3 | R7 <= R7 +4, アレイインデックスを進める | |||
68 | 17 | BEQ R7, R5, +1 | インデックスが最終アドレスならLOOP1を抜ける | |||
72 | 18 | J 9 | 4*9=36番地へジャンプ、LOOP1 | |||
76 | 19 | SUB R5, R5, R3 | R5 <= R5 - 4, 最終番地を下げる。ここに最小値がある。 | |||
80 | 20 | BEQ R5, R2, +1 | 最終番地が先頭番地と一致するとLOOP2を抜ける。 | |||
84 | 21 | J 8 | 4*8=32番地へジャンプ、LOOP2 | |||
88 | 22 | NOP |