2017-05-06 63 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获取块的地址。