MIPS汇编语言:递归函数调用

时间:2018-09-20 08:17:34

标签: assembly mips

我为递归函数编写了一个简单的代码,该代码在C语言中执行以下操作:

Int function1(int n)
{
    if (n <= 3)
     {
        int ans1 = (3*n)-5;
        return ans1;
    }
    else
     {
        int ans1 = (n-1)*function1(n-1) + function1(n-2) - n;
        return ans1;
     }
}

然后主调用函数。

显然,它没有返回预期的答案。当输入为“ 8”时,预期输出为“ 7842”。我的代码有什么问题?

假设我已经声明了用于输出的所有字符串变量

 main:  
        la      $a0, msg1
        li      $v0, 4
        syscall

        li      $v0, 5
        syscall
        move    $a1, $v0

        la      $a0, msg2
        li      $v0, 4
        syscall

        addi    $sp, $sp, -4
        sw      $ra, 0($sp)
        jal     Function1
        lw      $ra, 0($sp)
        addi    $sp, $sp, 4


        move    $a0, $v0
        li      $v0, 1
        syscall

        la      $a0, space
        li      $v0, 4
        syscall

        jr      $ra


 Function1:
        addi    $sp, $sp, -4
        sw      $ra, 0($sp)
        addi    $sp, $sp, -4
        sw      $s0, 0($sp)

        move    $s0, $a1
        li      $t0, 3
        ble     $s0, $t0, Done

        addi    $a1, $s0, -1

        jal     Function1

        mult    $a1, $v0
        mflo    $t1

        addi    $a1, $s0, -2

        jal     Function1


        add     $t2, $t1, $v0
        sub     $v0, $t2, $s0

 Done:
        li      $t0, 3
        mult    $t0, $a1
        mflo    $t1
        addi    $v0, $t1, -5

        lw      $s0, 0($sp)
        addi    $sp, $sp, 4
        lw      $ra, 0($sp)
        addi    $sp, $sp, 4

        jr      $ra

0 个答案:

没有答案