即使索引递增,数组也始终指向第一个索引

时间:2015-10-02 02:55:07

标签: arrays mips

出于某种原因,即使$ t2递增,($ t3)总是输出1。我不明白为什么。

以下是代码:

.data
myArray1: .word 1, 2, 3, 4, 5
myArray2: .word 0, 0, 0, 0, 0
newline: .asciiz "\n"
.text
main:
li  $s1, 5
li  $s0, 1
la  $a1, myArray1
la  $a2, myArray2
loop:
beq $s0, $s1, exit  
sll $t0, $s0, 2 # $t0 = i * 4
sub $t2, $s0, 1
sll $t2, $t2, 2 # $t2 = (i-1)*4
add $t1, $a1, $t0   # $t1 = A[i]
add $t3, $a1, $t2   # $t3 = A[i-1]

move $a0, $t2
li  $v0, 1
syscall
jal newLine

lw  $a0, ($t3)
li  $v0, 1
syscall
jal newLine

add $t4, $a2, $t0   # $t4 = B[i]
lw  $t5, ($t3)
lw  $t6, ($t4)
add $t7, $t5, $t6 # $t7 = A[i-1] - B[i]
sw  $t7, ($t1)  # A[i] = $t7
addi    $s0, $s0, 1
j   loop
exit:
li  $v0, 10
syscall
newLine:
la  $a0, newline
li  $v0, 4
syscall
jr  $ra

我已经添加了一段代码输出($ t3)和$ t2,即使$ t2上升($ t3)也永远不会改变

1 个答案:

答案 0 :(得分:0)

我不确定你要做什么。但实际发生的是$t7始终在sw $t7, ($t1) # A[i] = $t7处的值为1,因此您将继续覆盖myArray1中的下一个值1。

考虑案例i==1

  • A[i-1] == A[0] == 1
  • B[i] == B[1] == 0
  • A[i-1] + B[i] == 1 + 0 == 1

然后,在i==2的下一次迭代中:

  • A[i-1] == A[1] == 1(因为您在上一次迭代中将其设置为1)
  • B[i] == B[2] == 0
  • A[i-1] + B[i] == 1 + 0 == 1

等等。