A good answer might be:

This looks like a place for a counting loop.

Counting Loop

Let us create just eight nodes. Create the first node (the head) outside of the loop so that its address can easily be copied to the field first. After doing that, the succeeding nodes are created in the loop body, one per iteration.

Here is the first part of the code:

main:    
        # create the first node 
        li      $v0,9             # allocate memory
        li      $a0,8             # 8 bytes
        syscall                   # $v0 <-- address
        move    $s1,$v0           # $s1 = first node
        
        # copy the pointer to first
        sw      $s1,first
        
        # initialize the first node
        li      $t0,1             # store 1
        sw      $t0,0($s1)        # at displacement 0

After doing this, the picture is:

Next, concentrate on just the counting loop. All it has to do is count seven times, 2, 3, 4, ..., 7, 8 because the first node has already been created. Here is the code that does this:

        # create the remaining nodes in a counting loop
        li      $s2,____          # counter = ???
        li      $s3,____          # upper limit
        
loop:   bgtu    $____,$____,done  # while (counter <= limit )
        
        # create a node 
 
          .  .  .  .  .
          
        addi    $s2,$s2,1         # counter++
        b       loop
        
done:
        # end the list

QUESTION 11:

More Blanks!