# abcd.s -- a modular program in MIPS assembly # (does the same thing as the Java version abcd.java) # It would have been nice to name the functions by single letters # a, b, c and d, but unfortunately "b" is a reserved word. .data str_a: .asciiz "a" str_b: .asciiz "b" str_c: .asciiz "c" str_d: .asciiz "d" newline: .asciiz "\n" .text main: jal func_a # call function func_a li $v0, 4 # print newline la $a0, newline syscall jal func_b # call function func_b li $v0, 4 # print newline la $a0, newline syscall jal func_c # call function func_c li $v0, 4 # print newline la $a0, newline syscall jal func_d # call function func_d li $v0, 4 # print newline la $a0, newline syscall li $v0, 10 # We're done! syscall #------------------------------------------------------------------- func_a: li $v0, 4 # print the letter a la $a0, str_a syscall jr $ra # return from function #------------------------------------------------------------------- func_b: sw $ra, 0($sp) # save return address addi $sp, $sp, -4 jal func_a # call func_a li $v0, 4 # print the letter b la $a0, str_b syscall addi $sp, $sp, 4 # restore return address lw $ra, 0($sp) jr $ra # return from function #------------------------------------------------------------------- func_c: sw $ra, 0($sp) # save return address addi $sp, $sp, -4 jal func_a # call func_a jal func_b # call func_b li $v0, 4 # print the letter c la $a0, str_c syscall addi $sp, $sp, 4 # restore return address lw $ra, 0($sp) jr $ra # return from function #------------------------------------------------------------------- func_d: sw $ra, 0($sp) # save return address addi $sp, $sp, -4 jal func_a # call func_a jal func_b # call func_b jal func_c # call func_c li $v0, 4 # print the letter d la $a0, str_d syscall addi $sp, $sp, 4 # restore return address lw $ra, 0($sp) jr $ra # return from function