MIPSの配列を理解しようとしています。スタックポインタを1ワード前に移動する必要があることを知っています(4ずつインクリメント)。しかし、私はMIPSコードにそのアイデアを実装する方法を知らない。私は確かに知っている何MIPSの配列を実装するのに役立つ
j = 0
x = a[j+k]
a[j+k] = a[j]
、あなたが前にそれにKを追加し、その後、私はあなたが単語ベース・アドレス$ A0をロードし、[j]を作ると思いますが、(J = 0)レジスタに0をロードすることですその値を0($ a0)にします。
li $t0, 0
lw $t0 0($a0)
add $t0, $t0, $a2
sw $t0, ($a0)
私たちはこのコードをMIPSに変換するように割り当てられていました。前のコードはMIPSに変換されました。
# Register usage
# $a0 = base address of array
# $a1 = n, size of array
# $a2 = k, the shift amount
# j = 0
# x = a[j+k]
# a[j+k] = a[j]
# repeat n-1 times
# j = (j+k) mod n
# m = (j+k) mod n
# y = a[m]
# a[m] = x
# x = y
# end repeat
私の質問は、どのようにMIPSでn-1回ループを行うのですか?それだけの条件です
subi $a1 $a1
最後にどのようにモードを見つけるには?私はそれがdivと$ HIであると信じています。これはこれまで私が持っていたものです。
add $t1, $t0, $a2 #j+k
div $t1, $a1 #divide (j+k) by n
mfhi $t2 #move rem into t2
move $t2, $t0 #j = (j+k) mod n
add $t1, $t0, $a2 #j+k
div $t1, $a1 #divide (j+k) by n
mfhi $t2 #move rem into t2
move $t2, $t0 #m = (j+k) mod n
sw $t0, 0($t0)
lw $t3, 0($t0)
私は自分自身を混乱させています。明確化が認められるだろう。