# Version of code used in LSU EE 3755 29 October 2012

# :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)
        beq $t0, $0, DONE
        sub $t3, $t0, 97
        sltiu $t3, $t3, 26

        slti $t1, $t0, 97
        bne $t1, $0, GET_NEXT_CHAR
        slti $t1, $t0, 123
        beq $t1, $0, GET_NEXT_CHAR
        addi $t2, $t0, -32
        sb $t2, 0($a0)

GET_NEXT_CHAR:
        j LOOP
        addi $a0, $a0, 1

DONE:
        jr $ra
        nop
####