0
我想了解MIPS中的数组。我知道你需要将堆栈指针向前或向后移动(增量为4)。但我不知道如何将这个想法实现到MIPS代码中。在MIPS中需要实现一个数组的帮助
j = 0
x = a[j+k]
a[j+k] = a[j]
我知道一定是0加载到寄存器(J = 0),那么我认为你加载字的基址$ A0,并作出[J],那么你之前添加K它将该值转换为0($ a0)。
li $t0, 0
lw $t0 0($a0)
add $t0, $t0, $a2
sw $t0, ($a0)
我们被分配到该代码转换为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
最后如何找到mod?我相信它是与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)
我很迷惑自己,我相信。澄清将不胜感激。