首页 > 解决方案 > 如何使用 MIPS 程序集将循环函数更改为递归函数?

问题描述

我编写的程序提示用户输入一个整数值,读取该值并找到等于或小于用户输入的值的 2 的最大幂。例如,用户输入 40,输出为 5。我有这个循环函数,但我想递归地编写它并得到相同的结果。这是函数的代码片段:

.ent largest
largest:
        addi $sp, $sp, -4
        sw $ra, 0($sp)
        addi $t0, $a0, 0  # place the number passed in as parameter into $t0
        li $t1, 1        # load 2^0 into $t1
        li $t2, 0        # load 0 into $t2
        loop: bgt $t1, $t0, done   # if 2^n is larger than $t0, done, return n-1
        mul $t1, $t1, 2
        addi $t2, $t2, 1
        b loop
    done:
        addi $a0, $t2, -1 # return n-1
        lw $ra, 0($sp)
        addiu $sp, $sp, 4
        jr $ra            # return from main method
.end largest

我实在想不通。如果有人可以帮助我,我将不胜感激。

标签: assemblymipsqtspim

解决方案


推荐阅读