.data prompt: .asciiz "Enter a nonnegative integer: " msg: .asciiz "! = " .text .globl main main: li $v0, 4 la $a0, prompt syscall li $v0, 5 syscall move $s0, $v0 # $s0 contains input number n move $a0, $v0 li $v0, 1 syscall li $v0, 4 la $a0, msg syscall move $a0, $s0 jal fact move $a0, $v0 li $v0, 1 syscall li $v0, 10 syscall # recursive factorial fact: beqz $a0, baseCase # begin pushing $ra & $a0 on the stack addi $sp, $sp, 8 sw $ra, 4($sp) sw $a0, 0($sp) # end pushing $ra & $a0 on the stack subi $a0, $a0, 1 jal fact # begin popping $ra & $a0 off the stack lw $ra, 4($sp) lw $a0, 0($sp) addi $sp, $sp, -8 # end popping $ra & $a0 off the stack mul $v0, $v0, $a0 jr $ra baseCase: li $v0, 1 jr $ra