2015-10-02 2 views
0

По какой-то причине ($ t3) всегда выводит 1, даже если $ t2 увеличивается. Я не понимаю, почему.массив всегда указывает на первый индекс, даже если индекс увеличивается.

Вот код:

.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) никогда не меняется

ответ

0

Я не совсем уверен, что вы пытаетесь сделать. Но что на самом деле происходит то, что $t7 всегда имеет значение 1 в sw $t7, ($t1) # A[i] = $t7, так что вы держите перезапись следующее значение в myArray1 с 1.

Рассмотрим случай i==1:

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

Затем, по t он следующей итерации, когда i==2:

  • A[i-1] == A[1] == 1 (потому что вы установите его в 1 на предыдущей итерации)
  • B[i] == B[2] == 0
  • A[i-1] + B[i] == 1 + 0 == 1

И так далее.

Смежные вопросы