Write a subroutine that reads a string from the user Paramet
Write a subroutine that reads a string from
the user.
Parameters ($a0, $a1):
$a0 should specify the buffer that string is
placed
$a1 register should specify the maximum
characters of input string from the user
Return value($v0):
Subroutine should save the length of the
string in $v0 register.
Subroutine should check if the string is empty.
If it is empty, $v0 should be -1.
Solution
.data
message: .asciiz \"Please input a string:\"
buffer: .space 100
stringmax: .word 100
.text
lw $a0, buffer
lw $a1, stringmax
#Call getString function
jal getString
move $t0, $v0
addi $t0, $t0, -1
j terminateProgram
getString:
li $v0, 54
move $a2, $a1
move $a1, $a0
la $a0, message
syscall
la $t1, buffer
#check if nothing entered
beqz $t1, $zero, emptyField #Checks for the null character
strlen:
li $t2, 0 #Count initializes to 0
loop:
lb $t3, 0($a0) #Next character loads into t3
beqz $t3, exit #Checks for the null character
addi $a0, $a0, 1 #String pointer increment
addi $t2, $t2, 1 #Count increment
j loop #Returns to the top of the loop
exit:
jr $ra
emptyField:
addi $v0, $zero, -1
jr $ra
terminateProgram:
nop
syscall

