【发布时间】:2021-04-14 11:54:34
【问题描述】:
我对 MIPS 相当陌生,正在尝试编写一个代码来计算用户输入的整数的总和。我在我的代码中使用递归,但不确定是否有更简单的方法来做到这一点。我的代码在大多数情况下运行得相当好,但是它不断将最终总和加 1。例如,10 的总和是 55,但它给了我 56。
.data
#messages
sumMessage: .asciiz "\Enter a number to find its Sum: "
sumMessage1: .asciiz "\nSum is: "
sumInput: .word 0
sumAns: .word 0
.text
.globl main
main:
#read promtMessage
li $v0, 4
la $a0, sumMessage
syscall
#take input
li $v0,5
syscall
sw $v0, sumInput#storing input
#call sumCalc function
lw $a0, sumInput
jal sumCalc
sw $v0, sumAns#returns value from function
#display sum
li $v0, 4
la $a0, sumMessage1
syscall
li $v0, 1
lw $a0, sumAns
syscall
#end main
li $v0, 10
syscall
#sumCalc Function
.globl sumCalc
sumCalc:
subu $sp, $sp, 8
sw $ra, ($sp)#storing value of returning address in the stack
sw $s0, 4($sp)#4 bites apart from the value stored above in the stack
#base case
li $v0, 1
beq $a0, 0, exit
#find factorial n-1
move $s0, $a0
sub $a0, $a0, 1
jal sumCalc
add $v0, $s0, $v0
exit:
lw $ra, ($sp)
lw $s0,, 4($sp)
addu $sp, $sp, 8
jr $ra
任何帮助将不胜感激!
【问题讨论】:
-
不需要递归,甚至不需要循环。总和可以计算为
(N * (1 + N)) >> 1
标签: recursion assembly sum mips