.data out1 : .asciiz "n is " out2: .asciiz "(recursive) n! is " out3: .asciiz "(iterative) n! is " nl: .asciiz "\n" .text .globl main fact_r: sub $sp, $sp, 8 sw $s0, 4($sp) sw $ra, 0($sp) beq $a0, $zero, fr_base move $s0, $a0 sub $a0, $a0, 1 jal fact_r mul $v0, $s0, $v0 j fr_end fr_base: li $v0, 1 fr_end: lw $ra, 0($sp) lw $s0, 4($sp) add $sp, $sp, 8 jr $ra fact_i: sub $sp, $sp, 8 sw $s0, 0($sp) sw $s1, 4($sp) move $s0, $a0 li $s1, 0 li $v0, 1 fi_loop: beq $s1, $s0, fi_end add $s1, $s1, 1 mul $v0, $s1, $v0 j fi_loop fi_end: lw $s0, 0($sp) lw $s1, 4($sp) add $sp, $sp, 8 jr $ra printstr: li $v0, 4 syscall jr $ra printint: li $v0, 1 syscall jr $ra newline: la $a0, nl li $v0, 4 syscall jr $ra main: sub $sp, $sp, 4 sw $ra, 0($sp) li $s0, 6 la $a0, out1 jal printstr move $a0, $s0 jal printint jal newline la $a0, out2 jal printstr move $a0, $s0 jal fact_r move $a0, $v0 jal printint jal newline la $a0, out3 jal printstr move $a0, $s0 jal fact_i move $a0, $v0 jal printint jal newline lw $ra, 0($sp) add $sp, $sp, 4 jr $ra