mips汇编语言递归实现阶乘
递归实现阶乘,要点就是使用栈存储上一层的调用地址。
##Factorial Psudocode#######
##Fac(){
# if ($t1==1) return 1;
# else
# return $v0*Factorial($t1-1);
# }
#cross variable#############
# $t0 -- n
# $t1 -- with initial value n
# $v0 -- store result
############################
.data
hello: .asciiz "input a number : "
bye : .asciiz "\nbyebye "
.text
li $v0,4
la $a0,hello
syscall
li $v0,5
syscall
move $t0,$v0
move $t1,$t0
li $v0,1
Fac: addi $sp,$sp,-8
sw $ra,0($sp)
sw $t1,4($sp)
beq $t1,1,re0
addi $t1,$t1,-1
jal Fac
lw $a0, 4($sp)
mult $v0,$a0
mflo $v0
beq $t1,$t0,end
re0: addi $t1,$t1,1
lw $ra,0($sp)
addi $sp,$sp,8
jr $ra
end: move $a0,$v0
li $v0,1
syscall
la $a0,bye
li $v0,4
syscall
li $v0,10
syscall