2015-05-04 34 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)