试图对两个数组的值求和
Trying to sum values of two arrays
我正在尝试将 "arrayA" 的值与另一个 "arrayB" 的值相加,并将此和分配到索引在 "arrayA" 中的相同位置,但是输出是我不明白的结果。拜托,有人可以帮助我吗?
代码:
.data
arrayA: .word 1,12,35,473,2,32,4
arrayB: .word 0,3,12,32,3,4,9
length: .word 7
count: .word 0
line: .asciiz "\n"
sum: .word 0
.text
MAIN:
la $s1, arrayA
la $s2, arrayB
lw $t3, length
li $t4, 0
lw $t5, count
FOR:
beq $t3, $t4, EXIT
lw $t0, ($s1)
lw $t1, ($s2)
add $t0, $t0, $t1
sw $t0, ($s1)
sw $t0, sum
li $v0, 1
la $a0, sum
syscall
li $v0, 4
la $a0, line
syscall
addi $t4, $t4, 1
addi $s1, $s1, 4
addi $s2, $s2, 4
j FOR
EXIT:
li $v0, 10
syscall
输出:
268501060
268501060
268501060
268501060
268501060
268501060
268501060
$a0
是 </code> 的不同名称。所以你试图同时对不止一件事使用同一个寄存器(<code>arrayA
中当前元素的地址,以及几个系统调用的参数),这显然是行不通的.
我建议您使用不同的寄存器来保存 arrayA
的地址。并且始终使用常规的寄存器名称($v0
、$a1
、$t2
等)以避免此类错误。
您还错误地使用了系统调用 1:
la $a0, sum
系统调用 1 希望将要打印的值放在 $a0
中,但您将值的地址放在 $a0
中。你应该在这里使用 lw
而不是 la
。当然,sum
变量是不必要的,因为您可以直接将 $t0
和 $t1
添加到 $a0
中。
我正在尝试将 "arrayA" 的值与另一个 "arrayB" 的值相加,并将此和分配到索引在 "arrayA" 中的相同位置,但是输出是我不明白的结果。拜托,有人可以帮助我吗?
代码:
.data
arrayA: .word 1,12,35,473,2,32,4
arrayB: .word 0,3,12,32,3,4,9
length: .word 7
count: .word 0
line: .asciiz "\n"
sum: .word 0
.text
MAIN:
la $s1, arrayA
la $s2, arrayB
lw $t3, length
li $t4, 0
lw $t5, count
FOR:
beq $t3, $t4, EXIT
lw $t0, ($s1)
lw $t1, ($s2)
add $t0, $t0, $t1
sw $t0, ($s1)
sw $t0, sum
li $v0, 1
la $a0, sum
syscall
li $v0, 4
la $a0, line
syscall
addi $t4, $t4, 1
addi $s1, $s1, 4
addi $s2, $s2, 4
j FOR
EXIT:
li $v0, 10
syscall
输出:
268501060
268501060
268501060
268501060
268501060
268501060
268501060
$a0
是 </code> 的不同名称。所以你试图同时对不止一件事使用同一个寄存器(<code>arrayA
中当前元素的地址,以及几个系统调用的参数),这显然是行不通的.
我建议您使用不同的寄存器来保存 arrayA
的地址。并且始终使用常规的寄存器名称($v0
、$a1
、$t2
等)以避免此类错误。
您还错误地使用了系统调用 1:
la $a0, sum
系统调用 1 希望将要打印的值放在 $a0
中,但您将值的地址放在 $a0
中。你应该在这里使用 lw
而不是 la
。当然,sum
变量是不必要的,因为您可以直接将 $t0
和 $t1
添加到 $a0
中。