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.