我无法弄清楚这里出了什么问题。我试图在内存中存储10个整数,然后按顺序访问它们中的每一个。这是我目前的代码:
.data # Data declaration section
strInMsg: .asciiz "Please Enter An Integer:"
.align 2
memAddr: .space 40
.text
main: #Get 10 integers and store them in $t0
la $t0, memAddr #$t0 - 40 = first element in array
add $t3, $zero, $zero
add $t1, $zero, 10
loop: la $a0,strInMsg
add $v0, $zero, 4
syscall
add $v0, $zero, 5
syscall
sw $v0, 0($t0)
add $s1, $s1, 4
sub $t1, $t1, 1
bgtz $t1, loop
#la $a0, memAddr
#sub $t0, $t0, 40
#j QuickSort
sub $t0, $t0, 40 #<--- PROBLEM LINE
lw $t3, 0($t0)
add $a0, $t3, $zero
addi $v0, $zero, 1
syscall
它会正确地获取用户的所有10个整数,如果我摆脱了问题行,它将按预期打印最后一个元素,因为这是存储在$ t0中的内存地址。我想我可以从中减去40把它带回前面但它只输出0.我怎样才能得到第一个元素?
答案 0 :(得分:0)
在读取之前,只在循环开始时递增地址,所以不应该像-36
那样?
答案 1 :(得分:0)
您永远不会在循环中递增$t0
,因此您将所有值都写入同一地址,并且当您在循环结束后减去40时,您最终会指向memAddr - 40
。
也许add $s1, $s1, 4
行应该说add $t0, $t0, 4
?