## LSU EE 4720 Computer Architecture Spring 2010
#
# Classroom example, 25 January 2010

        .data
str:
        .asciiz "I Love NO  `az{ "
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
#

upper:
        ## Register Usage
        #
        # $a0: CALL VALUE: Address of string to convert.
        #      $a0 can be modified.
        #
        #      Convert lower-case characters to upper case.
        #      String is to be converted in place, there is no return value.
        #
        # NOTE: 'a' = 97, 'z' = 122,  'a' - 'A' = 32
        # Note: '@' = 64, 'A' = 65, 'Z' = 90, '[' = 91,  '`' = 96, '{' = 123

        #  "aBc"


UPPER:        

LOOP:
        lb $t0, 0($a0)
        beq $t0, $0, DONE
        addi $t1, $t0, -97
        bltz $t1 LOOP 
        addi $a0, $a0, 1
        addi $t1, $t0, -122
        bgtz $t1, LOOP
        addi $t0, $t0, -32
        j LOOP
        sb $t0, -1($a0)

DONE:
        jr $ra
        nop