最近在学MIPS指令,C中简单的3行递归,用MIPS表示的过程真的很复杂,所以我就做了一个演示,帮助自己和大家更好的理解计算机硬件是如何完成一个递归的过程的
首先看这个简短的C代码:
int fact (int n)
{
if(n<1) return (1);
else return (n*fact(n-1));
}
接下来是MIPS指令
fact:
addi $sp, $sp, -8
sw $ra, 4($sp)
sw $a0, 0($sp)
slti $t0, $a0, 1 // (n<1?)
beq $t0,$zero, L1 //n>-1, go to L1
addi $v0,$zero,1 //return 1
addi $sp,$sp,8 //pop 2 items
jr $ra
L1:
addi $a0,$a0,-1
jal fact
lw $a0,0($sp)
lw $ra,4($sp)
addi $sp,$sp,8
mul $v0,$a0,$v0
jr $ra
整个过程是如果在计算机内部演绎的呢?