### A good answer might be:

The answer is below.

# Loop Body

The address of the byte in the `lbu` instruction is computed by displacement + $9. Since the base, $9, has the address of (points at) the character, the displacement is zero. The `lbu` loads the character into the low-order byte of $10. The upper three bytes are zero. The `beq` instruction tests if the entire register is zero, but, of course, that also tests if the low-order byte is zero.

    ## 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          # load delay

             beq   $10,$0,done      # exit loop if char == null
             sll   $0,$0,0          # branch delay

             addiu    ___,___,___   # count++

             addiu    ___,___,___   # 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

Next, the program must increment the count, then move the base register (the character pointer) to the next byte of the string.

### QUESTION 5:

Fill in the blanks.