2013-05-02 87 views
1

我需要保存包含以下內容的數據:名稱,ID和評級。 所以插入命令是怎麼樣這一個:爲什麼程序總是顯示相同的字符串? [+ MIPS]

addi $sp, $sp, -12 
li $v0,8   # take in input 
la $a0, buffer  # load byte space into address 
move $t0,$a0  # save string to t0 
syscall 

sw $t0, 0($sp)  # name 
sw $t1, 4($sp)  # id 
sw $t2, 8($sp)  # rating 
addi $t7,$t7,1  # number of elements 

view命令是一種這樣一句:

loop: 
    beq $t6, $t7, end 

    lw $a0, 0($sp) # name 
    li $v0, 4 
    syscall 

    lw $a0, 4($sp) # id 
    li $v0, 1 
    syscall 

    lw $a0, 8($sp) # rating 
    li $v0, 1 
    syscall 

addi $t6,$t6, 1 
addi $sp,$sp, 12 
j loop 

當使兩個元素的第一個:aa, 12, 12 second one : bb, 13, 13
view命令後是這樣的: aa, 12, 12 second one: aa, 13, 13

你能幫我解決這個問題嗎?

回答

1

看起來您每次都將相同的地址(buffer)傳遞給read_string系統調用。所以每次調用都會覆蓋前一次調用的字符串。

您需要爲每個字符串都有單獨的緩衝區。例如,您可以將buffer傳遞給系統調用8,然後計算讀取字符串的長度,爲其分配內存(包括NULL終止符)using syscall 9,將字符串從buffer複製到您新分配的內存塊,最後存儲地址分配的內存堆棧而不是buffer的。

相關問題