# Class example (used Mars) February 26, 2013 # Author: Lin Jensen # Recursive function, to write vertically a number in any base (2nd argument) # see also: writever.a (2009) and WRITEVER.ASM (Old) for variations .globl __start .text __start: la $a0,prompt li $v0, 4 # print prompt syscall li $v0, 5 # read int syscall move $a0, $v0 # writever(input, 10) li $a1, 10 jal writever li $v0,10 syscall writever: sub $sp,$sp, 4 #push sw $ra, ($sp) #save return address div $a0,$a1 mflo $a0 #dividend mfhi $t1 #remainder beqz $a0,norecur sub $sp,$sp, 4 #push rem sw $t1,($sp) jal writever #dividend, in whatever base is in $a1 lw $t1,($sp) add $sp,$sp, 4 #pop rem norecur: # now write the remainder or $t1,$t1,0x30 # ascii digit sb $t1, str la $a0,str li $v0, 4 # print digit and newline syscall lw $ra, ($sp) add $sp,$sp, 4 # pop return address jr $ra #============================================================= .data prompt: .asciiz "Enter an integer: " str: .asciiz " \n" #temp use by writever