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

# :Example:
#
# Procedure to determine the length of a C-style string.  Includes
# code to call the procedure.

        .data
str:
        .asciiz "I Love NO"
msg:
        .asciiz "The length of string \n   \"%/a1/s\"\nis %/v1/d.\n"

        .text
        .globl __start
__start:
        la $a0, str             # Load address of string (for strlen routine).
        jal strlen              # Call strlen procedure.
        nop
        la $a1, str             # Load address of string (for message).
        addi $v1, $v0, 0        # Move length of string to $v1
        addi $v0, $0, 11        # System call code for message.
        la $a0, msg             # Address of message.
        syscall
        addi $v0, $0, 10        # System call code for exit.
        syscall


################################################################################
## strlen: Return length of string.
##
        ## Register Usage
        #
        # $a0: CALL VALUE:    Address of the first character of the string.
        # $v0: RETURN VALUE:  The length of the string.

strlen:

        addi $v0, $a0, 1

LOOP:
        lb $t0, 0($a0)
        bne $t0, $0 LOOP
        addi $a0, $a0, 1

        jr $ra
        sub $v0, $a0, $v0


####