Мне дали задание воссоздать из C в MIPS.
function1 (n) = (3*n)-5
, если n <= 3 </p>
function1 (n) = (n-1)*function1(n-1) + function1(n-2) - n
, если n> 3
Это рекурсивная функция, которая вызывает себя дважды, а именно:
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;
}
}
Основные вызовы function1 путем ввода целого числа, заданного пользователем.
void main()
{
int ans, n;
printf("Enter an integer:\n");
// read an integer from user and store it in "n"
scanf("%d", &n);
ans = function1(n);
// print out the solution computed by function 1
printf("The solution is: %d\n", ans);
return;
}
То, что я пока имею в MIPS:
.data
enterInt: .asciiz "Enter an integer:\n"
answer: .asciiz "The solution is: "
.text
.globl main
main:
li $v0, 4
la $a0, enterInt
syscall
li $v0, 5
syscall
move $a0, $v0
jal function1
li $v0, 1
syscall
jr $ra
function1:
addi $sp, $sp -4
sw $ra, 0($sp)
addi $sp, $sp, -4
sw $a0, 0($sp)
sle $t0, $a0, 3 #if n <= 3
beq $t0, $zero, else #if $t0 = 0, or when n > 3 exit to else
#basecase computation
addi $a0, $a0, -1
jal function1
else:
#reversing the top
lw $a0, 0($sp)
addi $sp, $sp, 4
lw $ra, 0($sp)
addi $sp, $sp, 4
jr $ra
addi $a0 $a0, -2
jal function1
lw $ra, 0($sp)
lw $s0, 4($sp)
addi $sp, $sp, 8
jr $ra
Я знаю, что это несколько на правильном пути, но я, честно говоря, понятия не имею, куда идти дальше.Любое направление поможет.Спасибо!