我想做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
如果你的目的是使用一些堆栈空间来存放临时向量的和。
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)