# :Example:
#
# Program to convert a C-style string to upper case.

        .data
str:
        .asciiz "Hello, world!"
before:
        .asciiz "Before: %/s1/s\n"
after:
        .asciiz "After:  %/s1/s\n"

        .text
        .globl __start
__start:
        la $s1, str
        la $a0, before
        addi $v0, $0, 11
        syscall
        jal upper
        add $a0, $s1, $0
        la $a0, after
        addi $v0, $0, 11
        syscall
        li $v0, 10
        syscall

upper:
        ## Register Usage
        #
        # $a0: (Call) Address of string to convert.
        #
        # Note: 'a' = 97, 'z' = 122,  'A' = 65.


LOOP:
        lbu $t0, 0($a0)
        addi $a0, $a0, 1
        beq $t0, $0, DONE
        addi $t1, $t0, -97
        bltz $t1, LOOP
        addi $t1, $t0, -122
        bgez $t1, LOOP
        addi $t0, $t0, -32

        j LOOP
        sb $t0, -1($a0)

DONE:
        jr $ra
        nop
####