2017-01-10 2 views
0

Ich möchte eine Subroutine schreiben, die eine Zeichenkette als Parameter (von der Benutzereingabe) nimmt und im dynamischen Gedächtnis speichert.MIPS: wie man eine Zeichenkette im dynamischen Speicher (Haufen) speichert

das ist, was ich kam mit:

.data 
    name: .space 32 # allocates 32 bytes of memory to store a name 

    namePrompt: .asciiz "name: " 

    .text 
    .globl main 

main: 

    la $a0, namePrompt 
    li $v0, 4 # system call to print a string. 
    syscall # print namePrompt. 

    la $a0, name # adress where to store the input 
    li $a1, 32 # max input size in bytes 
    li $v0, 8 
    syscall 

    la $a0, name # name as first parameter of save_string subroutine 
    jal save_string 



save_string: 

    move $s0, $a0 # s0 = name. 

    # allocate 32 bytes in heap memory. 
    li $v0, 9 
    li $a0, 32 
    syscall 

    sw $s0, 0($v0) # store the name in allocated memory 

    jr $ra 

Aber ich habe das Gefühl, dass dies nicht der richtige Weg ist, es zu tun.

Wie kann ich den Speicherplatz danach freigeben?

Antwort

1

Aber ich habe das Gefühl, das ist nicht der richtige Weg, es zu tun.

Nein, Sie speichern gerade die Adresse der Zeichenfolge im Heapspeicher. Wenn Sie den Inhalt speichern wollen, müssen Sie eine Schleife:

move $s1,$v0 
copy: 
    lb $t0,($s0)  # Read one byte from the source address 
    sb $t0,($s1)  # Store it at the destination address 
    addiu $s0,$s0,1 
    addiu $s1,$s1,1 
    bne $t0,$zero,copy # Repeat until the NUL terminator has been copied 

Auch, wie kann ich den Platz frei danach?

Unter der Annahme, dass der Simulator des sbrk ruft das Host-O sbrk Sie einen negativen Wert auf sbrk passieren können Ihr Programm Haufen schrumpfen.

Verwandte Themen