2017-05-06 6 views
2

sollte mich eine einzelne verkettete Liste mit MIPS erstellen dann usw. sortiert Hier ist ein Stück von meinem Code:eine einzelne verkettete Liste erstellen

.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 

Es funktioniert gut, es Eingaben vom Benutzer erhält, speichert sie auf dem Speicher, sortiert und druckt auch. Aber das Problem (möglicherweise nicht) ist ich bin mir nicht sicher, ob es eine echte verkettete Liste ist, weil, wie ich weiß, verkettete Liste Struktur ist wie folgt:

| Daten | pointerToAnywhere | ... | Daten | pointerToAnywhere |

Aber in meinem Code ist es immer hintereinander, so dass es keinen Sinn hat, Zeiger zu haben, wenn die nächste Eingabe nicht an einem leeren Ort im Speicher gespeichert werden kann.

Zusammenfassend, wie soll ich meinen Code verbessern, um $ sp = (irgendein leerer Platz im Speicher) anstelle von "addi $ sp, $ sp, -8" zu haben?

Antwort

0

Nach meiner Recherche fand ich die Lösung, eigentlich ist es sehr sehr einfach, ich habe es irgendwie vermisst.

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

Als Ergebnis von syscall 9 erhält $ v0 die Adresse von Block.