Asm 程序...出了点问题
Posted
技术标签:
【中文标题】Asm 程序...出了点问题【英文标题】:Asm program... something goes wrong 【发布时间】:2015-01-23 08:17:10 【问题描述】:我加载了两个数组。我必须返回第三个数组,其中包含两者的总和并且具有较小的维度。打印最后一个。
例子:
输入:数组1:[1 2 3 4 5] 数组2:[2 6 1]
输出:数组3:[3 8 4]
程序运行...它给了我确切的元素数量,但每个元素都是 0。
.data
vett1: .word 0:100
vett2: .word 0:100
vett3: .word 0:100
x: .word 0
space: .asciiz " "
.text
.globl main
main:
la $a0, vett1
la $a1, vett2
la $a2, vett3
la $a3, x
li $t0, 0
li $t1, 0
li $t2, 0
jal loadA1 #mi salvo 26 salto a caricavettore1
jal loadA2 #mi salvo 27 salto a caricavettore2
jal lenght #mi salvo 28 salto a controllalunghezza
lw $t2, ($a3)
lw $t3, ($a3)
la $a0, vett1
la $a1, vett2
la $a2, vett3
jal summ
jal print
li $v0, 10
syscall
loadA1:
li $v0, 5
syscall
beq $v0, -1, exit
sw $v0, ($a0)
addi $t0, $t0, 1
addi $a0, $a0, 4
j loadA1
exit: jr $ra
loadA2:
li $v0, 5
syscall
beq $v0, -1, exit2
addi $t1, $t1, 1
sw $v0, ($a1)
addi $a1, $a1, 4
j loadA2
exit2: jr $ra
lenght:
blt $t0, $t1, cond1
sw $t1, ($a3)
jr $ra
cond1: sw $t0, ($a3)
jr $ra
summ:
subi $sp, $sp, 4
sw $ra, 0($sp)
bnez $t2, rec
j exit3
rec: lw $s0, ($a0)
lw $s1, ($a1)
add $v0, $s0, $s1
sw $v0, ($a2)
addi $a0, $a0, 4
addi $a1, $a1, 4
addi $a2, $a2, 4
subi $t2, $t2, 1
jal summ
exit3:
lw $ra, 0($sp)
addi $sp, $sp, 4
jr $ra
print:
beqz $t3, exit4
lw $a0, ($a2)
li $v0, 1
syscall
la $a0, space
li $v0, 4
syscall
addi $a2, $a2, 4
subi $t3, $t3, 1
j print
exit4: jr $ra
【问题讨论】:
为什么sum
函数是递归的?迭代解决方案会更简单、更高效。
【参考方案1】:
当您将两个数组相加时,在每次迭代结束时将 4 添加到 $a2
以将其指向 vett3
的下一个元素。所以求和完成后$a2
将指向vett3
末尾之后 的第一个内存位置。
然后您调用print
,但不要将$a2
重置为指向vett3
的开头,因此您最终会打印垃圾数据(这可能恰好是全零 - 或者至少大部分为零,因为x
space
会在那里)。
【讨论】:
以上是关于Asm 程序...出了点问题的主要内容,如果未能解决你的问题,请参考以下文章
facebook 帐户工具包 - 返回错误“我们很抱歉,出了点问题。”在安卓中
出了点问题,请从 BotFramework MessagingExtesion 重试
一个关于verilog 状态机的问题程序,综合的时候出了点错误,希望各位可以帮忙解决下问题