Last active
August 29, 2015 14:06
-
-
Save humberto-ortiz/f8a5d6f726ffca0b882e to your computer and use it in GitHub Desktop.
Full code for factorial subroutine example, works with QtSPIM and MARS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.text | |
.globl main | |
main: | |
subu $sp,$sp,32 # Stack frame is 32 bytes long | |
sw $ra,20($sp) # Save return address | |
sw $fp,16($sp) # Save old frame pointer | |
addiu $fp,$sp,28 # Set up frame pointer | |
li $a0,10 # Put argument (10) in $a0 | |
jal fact # Call factorial function | |
la $a0,$LC # Put format string in $a0 | |
move $a1,$v0 # Move fact result to $a1 | |
jal printf # Call the print function | |
lw $ra,20($sp) # Restore return address | |
lw $fp,16($sp) # Restore frame pointer | |
addiu $sp,$sp,32 # Pop stack frame | |
li $v0, 10 # Exit | |
syscall | |
.data | |
$LC: | |
.asciiz "The factorial of 10 is " | |
.text | |
fact: | |
subu $sp,$sp,32 # Stack frame is 32 bytes long | |
sw $ra,20($sp) # Save return address | |
sw $fp,16($sp) # Save frame pointer | |
addiu $fp,$sp,28 # Set up frame pointer | |
sw $a0,0($fp) # Save argument (n) | |
lw $v0,0($fp) # Load n | |
bgtz $v0,$L2 # Branch if n > 0 | |
li $v0,1 # Return 1 | |
j $L1 # Jump to code to return | |
$L2: | |
lw $v1,0($fp) # Load n | |
subu $v0,$v1,1 # Compute n - 1 | |
move $a0,$v0 # Move value to $a0 | |
jal fact # Call factorial function | |
lw $v1,0($fp) # Load n | |
mul $v0,$v0,$v1 # Compute fact(n-1) * n | |
$L1: | |
# Result is in $v0 | |
lw $ra, 20($sp) # Restore $ra | |
lw $fp, 16($sp) # Restore $fp | |
addiu $sp, $sp, 32 # Pop stack | |
jr $ra # Return to caller | |
printf: | |
li $v0, 4 # print string | |
syscall | |
move $a0, $a1 # move result to a0 | |
li $v0, 1 # print int | |
syscall | |
jr $ra | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment