RISC-V递归的两种实现
说明
计算机组成课件的例题2-16要求用RISC-V汇编语言改写一个实现阶乘计算的C语言递归程序,但题目给出的代码不很容易理解。我采用了一种等价的、我自认为更符合逻辑的写法。代码经微调在Venus上测试,认为无误。放在这里,希望读者不吝指正。如果没有我的其他联系方式,可以用主页上的邮件联系我。
C语言代码:
幻灯片中的RISC-V汇编代码:
fact: addi sp sp -16
sd a0 8(sp)
sd ra 0(sp)
addi t0 a0 -1
bge t0 zero L1 # a0 - 1 >= 0
addi a0 zero 1 # a0 <= 0 return 1
addi sp sp 16
jalr zero 0(ra)
L1: addi a0 a0 -1
jal ra fact
add t1 a0 zero
ld a0 8(sp)
ld ra 0(sp)
add sp sp 16
mul a0 a0 t1
jalr zero 0(ra)
我的修改: