• 締切済み

MIPS Assembly

MIPSアセンブリの授業を取っている者です。習い始めたばかりでいきなり複雑な課題を出されてしまいました。 使用しているPCは大学にある普通のDELLでOSはVISTAです。spim,PCspim,xspimで作成実行しろと言われました。 program inputとしてwindow,image,sizeを、return値として$v0,$s0,$s1を用意します。 windowは4×4サイズの2次元配列を、imageは16×16サイズの2次元配列を持ち、それぞれのサイズはsizeにストアされます。 問題の内容ですが(わかりずらいかもしれませんが、すみません)、例えば、配列windowに 0 1 2 3 1 2 3 4 2 3 4 5 3 4 5 6 そして配列imageに 0 1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 4 5 6 7 8 9 10 11 12 13 14 15 2 3 32 1 2 3 12 14 16 18 20 22 24 26 28 30 3 4 1 2 3 4 18 21 24 27 30 33 36 39 42 45 0 4 2 3 4 5 24 28 32 36 40 44 48 52 56 60 0 5 3 4 5 6 30 35 40 45 50 55 60 65 70 75 0 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 0 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 0 9 18 27 36 45 54 63 72 81 90 99 108 117 126 135 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 0 11 22 33 44 55 66 77 88 99 110 121 132 143 154 165 0 12 24 36 48 60 72 84 96 108 120 132 0 1 2 3 0 13 26 39 52 65 78 91 104 117 130 143 1 2 3 4 0 14 28 42 56 70 84 98 112 126 140 154 2 3 4 5 0 15 30 45 60 75 90 105 120 135 150 165 3 4 5 6 の値が入っているとします。そしてimageの一番左端上を座標(0,0)とします。 次にwindowの4×4のマスをimageの一番左端上の4×4のマスと比較し、同じ座標にあるwindowの値とimageの値の絶対値を求めます。上の例ではこうなります。 window   比較するimageのマス 0 1 2 3      0 1 2 3 1 2 3 4      1 2 3 4 2 3 4 5      2 3 32 1 3 4 5 6      3 4 1 2 4×4のマスですから、合計16個の絶対値が求まります。そしてその16個の絶対値を足します。この例では絶対値の合計は40になります。 それが終わったらwindowのマスをそのままx軸に1、右にずらします。そしてまた同じように、同じ座標にあるwindowの値とimageの値の絶対値を計16個求め全て足します。今度の比較はこうなります。 window   比較するimageのマス 0 1 2 3      1 2 3 0 1 2 3 4      2 3 4 4 2 3 4 5      3 32 1 2 3 4 5 6      4 1 2 3 この作業を13回繰り返すと、windowがimageの一番右端に到達します。そうしたらwindowをimageの一番左端に戻します。ただしこの時、windowをY軸に1、下にずらします。 window   比較するimageのマス 0 1 2 3      1 2 3 4 1 2 3 4      2 3 32 1 2 3 4 5      3 4 1 2 3 4 5 6      0 4 2 3 そして同様の事をwindowがimageの一番右端下に来るまで繰り返します。上の例では最後の比較はwindowとimageの値は全て同じですから全ての絶対値は0なので合計値も0になります。 そして合計169個の値が求まるはずです。その169個の中から一番小さい値を$v0に格納します。次にその一番小さい値がどこで求まったかわかるように、比較したimageの4×4のマスの一番左端上のX座標を$s0に、 Y軸座標を$s1に格納し、$v0、$s0、$s1の値を出力します。上の例では、最後の比較が最小値(0)でしたので、$v0=0,$s0=12,$s1=12となります。 どなたかお解かりになる方いらっしゃいますでしょうか。宜しくお願いいたします。 配列が見にくい場合はこちらをごらん下さい。 pass: assembly http://www.dotup.org/uploda/www.dotup.org2214.txt.html

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「MIPS のアセンブリ」がわからないというなら, まず C ででも書いてみればいいのに.

関連するQ&A