Yes, because main calls a subroutine.
The completed code for main is below.
.text
.globl main
main:
sub $sp,$sp,4 # push the return address
sw $ra,($sp)
la $a0,mainPr # prompt the user
li $v0,4 # service 4
syscall
jal doLines # process lines of input
lw $ra,($sp) # pop return address
add $sp,$sp,4
jr $ra # return to OS
.data
mainPr: .ascii "Type each line of text followed by ENTER.\n"
.asciiz "Type Q at the start of a line to finish.\n"
doLines
The main routine calls doLines.
At right is the design for that routine.
Below is its (incomplete) code.
# doLines -- read in and process each line of user input
#
# on entry:
# $a0 -- address of the prompt text
# $ra -- return address
#
# on exit:
# no return values
.text
.globl doLines
doLines:
sub $sp,$sp,4 # push the return address
sw $ra,($sp)
loop: # get a line
la $a0,________ # argument: address of buffer
li $a1,____ # argument: length of buffer
jal _______ # get line from user
la $a0,line # if "Q"
jal testEnd # return to caller
beqz $v0,endloop
# convert to capitals
la $a0,________ # argument: address of buffer
la $a1,____ # argument: length of buffer
jal _______ # convert
la $a0,outline # print out the result
li $v0,4
syscall
b loop # continue with next line
endloop:
lw $ra,($sp) # pop return address
add $sp,$sp,4
jr $ra # return to caller
.data
outline: .ascii ":" # pad so output lines
# line up with input
line: .space 132 # input buffer
|
|