打印向量之和MIPS

问题描述 投票:0回答:1

我想做MIPS的练习,我必须把向量求和成另一个向量,然后打印出和,我知道肯定是和有问题,因为输出是0 0 0 0 0。谁能给我解释一下我错在哪里?请耐心点:) 请耐心点,谢谢

.data
    str: .asciiz "  "
    v1 : .word 3, 10, 5, 22, 13
    v2 : .word 7, 1, 9, 16, 8

    .text
    la $a1, v1
    la $a2, v2

    addi $sp, $sp, -20
    sw $s1, 0($sp)

    add $t0, $0, $0 # i = 0

    somma: slti $t1, $t0, 5 #if i < 5 continua else esci
    beq $t1, $0, esci
    sll $t2, $t0, 2 # i = i * 4
    add $t3, $a1, $t2 # $t2 = v1 + i*4
    add $t4, $a2, $t2 # $t3 = v2 + i*4
    lw $t3, 0($t3) #$t3 = v1[i]
    lw $t4, 0($t4) #$t4 = v2[i]
    add $s1, $t3, $t4 # v3 = v1 + v2
    addi $t0, $t0, 1
    j somma

    esci:

    add $t0, $0, $0 # i = 0

    stampa: slti $t1, $t0, 5 # se i<5 continua else fine
    beq $t1, $0, fine
    lw $a0, 0($sp)
    li $v0, 1
    syscall
    li $v0, 4
    la $a0, str
    addi $t0, $t0, 1
    addi $sp, $sp, 4
    syscall
    j stampa

    fine: li $v0, 10
    syscall
vector sum mips
1个回答
0
投票

如果你的目的是使用一些堆栈空间来存放临时向量的和。

addiu $sp, $sp, -20

分配堆栈空间  分配的堆栈空间可以从 $sp+0至 $sp+16.(储存) $s1 在那里是没有意义的,所以就把它去掉吧。)

在将向量元素加到 $t1,将元素和的结果存储到堆栈中的临时向量中,像处理源向量一样使用索引。

addu $t5, $sp, $t2     # compute address of temp vector element to store
sw $t1, 0($t5)
© www.soinside.com 2019 - 2024. All rights reserved.