プロが教える店舗&オフィスのセキュリティ対策術

MIPSアーキテクチャについて。
while (save[i] == k)
i += 1;
iとkはレジスタ$s3と$s5にそれぞれ割り付けられており配列saveは$s6に収められているとする。上記のCコードをコンパイルした結果のアセンブリ・コードを下に書いたのですがこのCコードのsave[i]==kの部分をそれぞれ
1.>
2.>=
3.<
4.<=
にした場合どのようになるか教えて下さい。
お願いします。

Loop: s11 $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0 ($t1)
bne $t0, $s5, Exit
addi $s3, $s3, 1
j Loop
Exit:

A 回答 (4件)

私が知る限りのMIPSインストラクションセットであれば、bneを適当な分岐命令に書き換えるだけだと思います。



学校の課題とかで、使える命令が限定されているのであれば、引き算や大小比較、ゼロ比較等を組み合わせてExitへ抜けるパターンを順に絞り込んでジャンプさせてやればいいでしょう。
    • good
    • 0

コードをざっと読んだ限りでは、条件分岐のbneでwhile内にとどまるかどうかを判断しているので、それを変更すればいいのでは?


while(save[i] > k)の場合、$t0 > $t5であれば次の命令、そうでなければExitとなるので、$t0 <= $t5ならExitへということでble $t0 $t5 Exitとか(ちゃんと検証していないので間違ってるかもしれないので、自分で確認して)。
基本的に、bneを適当な分岐命令に変更することで、1から4まではできると思います。どの分岐命令を使うかは自分で調べてください。
    • good
    • 0

補足


i < k
の場合です
    • good
    • 0

slt $t3,$s3,$s6


に変えたらいきませんか?
デバッグしてませんけど
MIPSアセンブラですね^_^
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!