### A good answer might be:

See below.

# Popping Characters

            . . . . .
            # push each character onto the stack
    pushl:
            lbu     $t0,str($t1)   # get current char into
                                   # a full word
            beqz    $t0,stend      # null byte: end of string

            subu    $sp,$sp,4      # push the full word
            sw      $t0,($sp)      # holding the char

            addu    $t1,1          # inc the index
            j       pushl          # loop

            # pop chars from stack back into the buffer
    stend:  li      $t1,0          # index of first byte of str buffer
    popl:
            ____    $t0,($sp)      # pop a char off the stack
            ____    $sp,$sp,4
            beqz    $t0,done       # null means empty stack

            ____    $t0,str($t1)   # store at string[$t1]
            addu    $t1,1          # inc the index
            j       popl           # loop

            # print the reversed string
            . . . . .

            .data
    str:    .space  128            # character buffer

When the null byte of the null-terminated input string is encountered, the first loop exits and the next loop begins. This next loop pops characters (contained in full words) off of the stack until the null at the bottom of the stack is encountered. Each character popped off the stack is placed into the string buffer, overwriting the character originally there.

The null at the end of the input string is not overwritten. It will remain there as part of the null-terminated result string.

### QUESTION 14:

You know the drill: fill in those blanks.