# # program to define and test factorial fcn # .text .globl main main: # # opening linkage (save return address) # addi $sp, $sp, -4 sw $ra, 0($sp) # # prompt # la $a0, prompt li $v0, 4 # "print string" syscall syscall # # get input # # $s0 will hold input li $v0, 5 # "read int" syscall syscall addi $s0, $v0, 0 # save result in $s0 # # compute factorial of input, putting result in $s1 # addi $a0, $s0, 0 # parameter is input jal factorial addi $s1, $v0, 0 # copy return value # print results # in almost-C: printf("factorial of %d is %d\n", $s0, $s1) la $a0, answer_txt1 li $v0, 4 # "print string" syscall syscall addi $a0, $s0, 0 # get saved input li $v0, 1 # "print int" syscall syscall la $a0, answer_txt2 li $v0, 4 # "print string" syscall syscall addi $a0, $s1, 0 # get saved result li $v0, 1 # "print int" syscall syscall la $a0, nl li $v0, 4 # "print string" syscall syscall # # closing linkage (get return address and restore stack pointer) # lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra .end main # # area for variables and constants # .data prompt: .asciiz "Enter an integer:\n" answer_txt1: .asciiz "factorial of " answer_txt2: .asciiz " is " nl: .asciiz "\n"