A good answer might be:

          lw    $s0,first     # get a pointer to the first element

The field first contains the address of the first node (element). So you want to copy (load) the contents into the register.

Complete Program

Here is the program, complete with a section for printing out the list.

# eightNodeList.asm
#
        .text
        .globl  main

main:    
        # create the linked list
        
        # $s1 --- current node in creation loop
        # $s2 --- loop counter
        
        # 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

        # create the remaining nodes in a counting loop
        li      $s2,2             # counter = 2
        li      $s3,8             # upper limit
        
loop:   bgtu    $s2,$s3,done      # while (counter <= limit )
        
        # create a node 
        li      $v0,9             # allocate memory
        li      $a0,8             # 8 bytes
        syscall                   # $v0 <-- address
        
        # link this node to the previous
                                  # $s1 = previous node
        sw      $v0,4($s1)        # copy address of second node
                                  # into the previous node
        
        # make the new node the current node
        move    $s1,$v0
        
        # initialize the node
        sw      $s2,0($s1)        # at displacement 0

        addi    $s2,$s2,1         # counter++
        b       loop
        
done:
        # end the list
        sw      $0,4($s1)         # put null in the link field
                                  # of the current node, which
                                  # is the last node.
        
        # print out the list
        # $s0 --- current node in print loop
                                          
        lw     $s0,first          # get a pointer to the first element
lp:     beqz   $s0,endlp          # while the pointer is not null
        lw     $a0,0($s0)         #   get the data of this element

                                  #   do something with the element
        li     $v0,1              #   print it
        syscall                   #
        la     $a0,sep            #   print separator
        li     $v0,4              #
        syscall                   #
        
        lw     $s0,4($s0)         #   get the pointer to the next element
        b      lp
          
endlp:   
        li      $v0,10            # return to OS
        syscall       

       .data
first: .word   0
sep:   .asciiz "  "

## end of file

QUESTION 16:

You've run the program and it works exactly as expected. What do you do next?