MINIMIPS ASSEMBLER PRGRAM


サポート命令

区分 命令 意味 備考
算術演算 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 絶対アドレスジャンプ

最終課題事前宿題

  1. 以下のプログラムはCで言うfor i=? のようなループを2重に含んでいる、ループインデックスに相当するレジスタはどれか?

  2. このプログラムは0番地から始まり、最後に88番地を実行するが、0番地から始まり88番値を実行するのにのべいくつの命令の実行を行うか?

  3. 388番地の32という整数値は何を示すか

  4. このプログラムの実行後のデータRAMの内容はどうなるか

  5. このプログラムの行う処理は何か、一般にこの処理方法はなんと呼ばれるアルゴリズムを使用しているか?

データ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