mips汇编语言递归实现阶乘

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

你可能感兴趣的:(mips汇编)