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
補足
ご回答ありがとうございました。 計算機使えそうです。 ただ、できれば日中は仕事で離れるケースが多い為、 寄り前にS1かB1どちらに到達するかが予想できればいいのですが、 その場合、どうすればいいのでしょうか? 両建てしかないですかね。