I am taking a class in Assembly this semester and am currently at a loss. The first two projects I found easy enough but now we are working with strings. I have a basic skeleton for the program that gets input.
.data
strbuf: .space 80 # Buffer for string being flipped
ann: .ascii "Welcome to UpLo\n"
.asciiz "Type a sentence and I will swap upper/lower case\n"
prompt: .asciiz "New sentence (just return to exit): "
.text
# Main Program
#
main:
li $v0,4 # Announce myself with a message
la $a0,ann # on the terminal.
syscall
loop:
li $v0,4 # Prompt for a new sentence
la $a0,prompt
syscall
jal readstr # Read the string
jal chgcase # Flip upper/lower case
jal wrtstr # Write the result
b loop
done: # Get here when all done.
li $v0,10 # "exit" syscall
syscall
readstr:
li $v0,8
la $a0,strbuf
li $a1,80
syscall
jr $ra
wrtstr:
li $v0,4
la $a0,strbuf
syscall
jr $ra
chgxit:
jr $ra
This succeeds in getting the input and writing it back to the screen. I just need to do a few modifications to the string that is entered. If the user enters nothing then the program exits. Any letters entered are reversed, upper to lower case and vice versa. I know that the difference in a letter's upper and lower case is 0x20, and 0x0a is the hex for a new line(user just typed enter) but I cannot figure out how to use this and the entered string to achieve the desired result. I asked the professor for help and he just told me the differnce is 0x20 hex, make sure the only things to change case are letters, and a new line is 0x0a. I already know all this, it is just the actual conversion that is giving me problems. Any help or hints in the right direction would be appreciated. I feel like I need to navigate the string one byte(character) at a time, and pass each character to a chg subroutine, but I haven't been able to get anything to work
Thank you for your time
PS, the assembly I am coding in is MIPS but I am sure that I can use other assembly code or tips and modify it as needed for my processor.