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.
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