递归系列MIPS没有按预期工作

时间:2016-11-11 22:02:24

标签: recursion assembly mips

我必须在MIPS中实现一个递归系列,这里是高级代码:

int suite(n)
{
if (n == 0) return 0;
else
return (suite(n-1) + 4*n);
}

我的汇编代码有几个问题。第一个是它没有给出预期的结果,因为它每次增加4个。

我的第二个问题是它没有结束。我使用了一个递归的教科书示例作为阶乘。 这是汇编代码:

.data 
msg: .asciiz "Entrer un nombre : "
.text
.globl  main

main:
#print msg
    li $v0,4
    la $a0,msg
    syscall
    #input prompt
    li $v0,5
    syscall
    addi, $a0, $v0, 0
    jal suite

suite: 
    addi $sp, $sp,-12
    sw $a1, 8($sp)
    sw $a0, 4($sp)
    sw $ra, 0($sp)
    addi $t0, $0, 1
    slt $t0, $a0, $t0
    beq $t0,$0 else
    addi $sp, $sp, 12
    li $v0, 1
    syscall
    add $v0, $0, $0 
    jr $ra  
else:   
    add $a1, $a0, $a0
    add $a1, $a1, $a1
    addi $a0, $a0, -1
    jal suite 
    lw $ra, 0($sp) 
    lw $a0, 4($sp)
    lw $a1, 8($sp)
    addi $sp, $sp, 12
    add $a0, $v0, $a1
print:  
    li $v0, 1
    syscall
    add $v0, $0, $0
    jr $ra
end:        

任何帮助都会有所帮助。

0 个答案:

没有答案