A good answer might be:

The complete program is below.

Complete Program

The base register is "moved" through the string by increasing the address by one for each byte. This is also called "moving a pointer". This program has an important concept on every line. Using these concepts is how you program!

## strlen.asm
##
## Count the characters in a string
##
## Registers:
## $8 --- count
## $9 --- pointer to the char
## $10 --- the char (in low order byte)

         .text
         .globl  main
		 
# Initialize
main:    ori      $8,$0,0        #  count = 0
         lui      $9,0x1000      #  point at first char

# while not ch==null do
loop:    lbu      $10,0($9)      # get the char
         sll      $0,$0,0        # branch delay
           
         beq      $10,$0,done    # exit loop if char == null
         sll      $0,$0,0        # branch delay

         addiu    $8,$8,1        # count++
         addiu    $9,$9,1        # point at the next char

         j        loop

# finish
done:    sll      $0,$0,0        # target for branch

         .data
string:  .asciiz  "Time is the ghost of space."
## End of file

The program is very close to the C standard library function int strlen(char*). As it is written, the program has its own data, and it is not written as a callable function. We will do both of those things in a few chapters.

QUESTION 6:

Does the program work correctly if the string is the null string (the string of length zero that consists of just a null byte)?