Как изменить функцию al oop на рекурсивную функцию с использованием сборки MIPS? - PullRequest
0 голосов
/ 04 марта 2020

Программа, которую я закодировал, запрашивает у пользователя целочисленное значение, считывает это значение и находит наибольшую степень 2, которая равна или меньше значения, введенного пользователем. Например, пользовательский ввод 40 и вывод будет 5. У меня есть эта функция l oop, но я хочу написать ее рекурсивно и получить тот же результат. Вот фрагмент кода функции:

.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

Я действительно не могу понять это. Если кто-нибудь сможет мне помочь, я буду очень признателен.

...