2015-05-04 72 views
0

我有一个任务,通过“删除”包含小于某个数值(可以说10)的值的任何节点来清理链接列表。它比预期更难一些,因为节点在内存中没有顺序。见下面MIPS:获取链接列表中节点的值

list: 
.word 15 
.word n1 

n2: 
.word 12 
.word n3 

n6: 
.word 27 
.word n7 

n3: 
.word 22 
.word n4 

n1: 
.word 1 
.word n2 

n5: 
.word 34 
.word n6 

n7: 
.word 6 
.word -1    # logical end of the list 

n4: 
.word 9 
.word n5 

如果头指向地址“268500992”,其中包含15,和下一个位置四位离开包含指针到下一个节点(称为N1),我怎样才能从N1值?

我试过以下,但它将地址(第一个节点的指针或n1的地址)加载到$ t0而不是该地址的值。

la $a0,list 
addi $a0, $a0, 4 
lw $t0,0($a0) 

回答

0

不要忘记la $a0,list会加载一个指向列表的指针。随后的lw $t0,0($a0)将加载头节点的值,并且lw $t0,4($a0)(或您所做的操作)将加载指向下一个节点的指针。你仍然是头节点,但现在$t0指向节点1.最好的做法是使用lw $a0,4($a0)去下一个节点。要恢复它的价值,你仍然需要做lw $t0,0($a0)