试图对两个数组

时间:2016-04-18 03:16:50

标签: assembly mips

我正在尝试将“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

1 个答案:

答案 0 :(得分:1)

$a0$4的另一个名称。所以你试图同时使用相同的寄存器来处理多个事物(arrayA中当前元素的地址,以及几个系统调用的参数),这显然不起作用

我建议您使用其他寄存器来保存arrayA的地址。并且还要始终使用传统的注册名称($v0$a1$t2等)来避免这些错误。

您还错误地使用系统调用1:

la $a0, sum

系统调用1希望打印的值放在$a0中,但您要将值的地址放在$a0中。您应该在la使用lw,而不是sum。当然,$t0变量是不必要的,因为您可以直接将$t1$a0添加到 - (BOOL)touchesShouldCancelInContentView:(UIView *)view { NSLog(@"touchesShouldCancelInContentView"); if ([view isKindOfClass:[UIButton class]]) return NO; else return YES; } 中。