C-code :
int factorial(int n)
{
if (n<1) return 1;
else return n * factorial (n-1);
}
Я пытался реализовать это, но не смог сделать много.Итак, вот моя попытка:
goto:
factorial:
int factorial(int n) {
if (n<1) goto Lthen;
Lelse:
tmp=factorial(n-1);
return n*tmp;
goto Lend;
Lthen: return 1;
Lend;
}
RISC V:
.factorial
addi sp, sp, -16
sw ra, (sp)
sw s0, 4(sp) //n
sw s1, 8(sp) //tmp
mv s0, a0 //a--->s0
addi t1, zero,1
blt s0, t1, Lthen
.Lelse
mv t0, s0 // copy of n to t0
addi s0, s0, -1 // n-1
mv a0, s0; // n-1--->a0
jal factorial // factorial(a0)
mv s1, a0 // s1=factorial(a0) //tmp
mul a0,t0,s1 // n*tmp ----> a0
ret
j LEND
Lthen: li a0,1
ret
LEND jr ra, 0
Может кто-нибудь сказать мне, что все в порядке, потому что я не знаю, как это проверить.И я не уверен насчет, например, возврата 1 / или любого другого значения / выражения, можем ли мы просто поместить его в a0 и сказать ret ..
Спасибо за ваше время!