需要帮助在MIPS中实现阵列吗
我试图理解MIPS中的数组。我知道您需要将堆栈指针向前移动一个字或向后移动(增量为4)。但我不知道如何在MIPS代码中实现这个想法需要帮助在MIPS中实现阵列吗,mips,Mips,我试图理解MIPS中的数组。我知道您需要将堆栈指针向前移动一个字或向后移动(增量为4)。但我不知道如何在MIPS代码中实现这个想法 j = 0 x = a[j+k] a[j+k] = a[j] 我所知道的是将0加载到寄存器中(j=0),然后我认为你加载字的基址$a0并生成一个[j],然后在sw之前将k添加到它,然后将该值加载到0($a0) 我们被指派将此代码转换为MIPS,前一部分是它的第一部分 # Register usage # $a0 = base address of array
j = 0
x = a[j+k]
a[j+k] = a[j]
我所知道的是将0加载到寄存器中(j=0),然后我认为你加载字的基址$a0并生成一个[j],然后在sw之前将k添加到它,然后将该值加载到0($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)
我想我把自己弄糊涂了。请澄清
li $t3, 0 #j = 0
lw $t3, 0($a0) #load the value of @a0 in to j
add $t3, $t3, $a2 # j = j+k
sw $t3, 4($a0) # store the new value of j in to $a0
loop:
beq $a1, $zero, return
sub $a1, $a1, 1 #n = n-1
add $t4, $t3, $a2 #j+k
div $t4, $a1 #divide (j+k) by n
mfhi $t5
move $t5, $t3 #j = (j+k) mod n
add $t4, $t3, $a2 #j+k
div $t4, $a1 #divide (j+k) by n
mfhi $t5 #move rem into t2
move $t5, $t3 #m = (j+k) mod n
b loop
return:
sw $t3, 4($a0)
jr $ra
lw $t3, 0($a0)
我在这里看到了你的代码,经过一些修改。我让程序运行,但输出是错误的,我看到了一个错误,我与条件和修复后,程序不再返回任何输出。我换了登记簿
li $t3, 0 #j = 0
lw $t3, 0($a0) #load the value of @a0 in to j
add $t3, $t3, $a2 # j = j+k
sw $t3, 4($a0) # store the new value of j in to $a0
loop:
beq $a1, $zero, return
sub $a1, $a1, 1 #n = n-1
add $t4, $t3, $a2 #j+k
div $t4, $a1 #divide (j+k) by n
mfhi $t5
move $t5, $t3 #j = (j+k) mod n
add $t4, $t3, $a2 #j+k
div $t4, $a1 #divide (j+k) by n
mfhi $t5 #move rem into t2
move $t5, $t3 #m = (j+k) mod n
b loop
return:
sw $t3, 4($a0)
jr $ra
lw $t3, 0($a0)