2017-05-06 61 views
2

我應該創建與MIPS單鏈表在排序等等。這裏是一塊我的代碼:創建單鏈表

.data 
STR_NEWLINE: .asciiz  "\n" 
STR_ENTER:  .asciiz  "enter an integer(0 to finish): " 

    .text 
main: 
    sw  $zero,0($sp)    # list_head = 0 
    move $s0,$sp     # list_end adress 
main_loop: 
    la  $a0,STR_ENTER   
    li  $v0,4 
    syscall 

    li  $v0,5     
    syscall 

    blez $v0,bubble_loop   

    addi $sp, $sp, -8    

    sw  $v0,0($sp)    
    sw  $t0,4($sp)    
    move $s0,$sp     

    addi $t0, $t0, -8    
    j  main_loop 

它運作良好,它得到來自用戶的輸入,將它們存儲在內存中,進行分類和打印。但問題(可能不是)我不確定它是否是一個真正的鏈表,因爲據我所知,鏈表結構是這樣的:

|數據| pointerToAnywhere | ... |數據| pointerToAnywhere |

但是在我的代碼中,它總是像一個接一個,因此如果下一個輸入不能存儲在內存中的任何空位上,就沒有意義。總結一下,我應該如何改進我的代碼以使$ sp =(內存中的任何空位)而不是「addi $ sp,$ sp,-8」?

回答

0

經過我的研究,我發現瞭解決方案,實際上它非常非常容易,我錯過了某種方式。

li $v0, 9 
li $a0,(number of bytes of storage desired) 
syscall 

作爲系統調用9的結果,$ v0獲取塊的地址。