A good answer might be:

See below.

Pushing Characters

# Reverse and output a user-supplied string
#
# Settings: Load delays OFF; Branch delays OFF,
#           Trap file    ON; Pseudoinstructions ON   
#
# $t0 --- character pushed or popped
# $t1 --- index into string buffer str

        .text
        .globl  main

main:   #input the string
        li      $v0,8          # service code
        la      $a0,str        # address of buffer
        li      $a1,128        # buffer length 
        syscall
        
        li      $t0,0          # push a null 
        subu    $sp,$sp,4      # onto the stack
        sw      $t0,($sp)      # to signal its bottom
        li      $t1,0          # index of first char in str buffer
        
        # push each character onto the stack
pushl:
        lbu     $t0,str($t1)   # get current char into
                               # a full word
        ____    $t0,stend      # null byte: end of string
        
        subu    $sp,$sp,4      # push the full word
        ___     $t0,($sp)      # holding the char
        
        addu    $t1,1          # inc the index
        j       _____          # loop

stend:           
        . . . . .

        # pop chars from stack back into the buffer

        # print the reversed string
        
        .data
str:    .space  128            # character buffer 

In the next stage, characters from the character buffer are pushed one by one onto the stack. The first instruction (at pushl:) uses indexed addressing to load the current character from the buffer (str:) into the least significant byte of $t0.

Next, the current character is tested. If it is null (zero) then control branches out of the loop. Otherwise the character is pushed onto the stack. Then the process is repeated.

QUESTION 13:

Fill in the blanks.