为什么程序始终显示相同的字符串? [+ MIPS]

时间:2013-05-02 02:38:23

标签: string view insert mips mergesort

我需要保存包含以下内容的数据:name,id和rating。 所以insert命令是这样的:

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

视图命令是这样的:

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 个答案:

答案 0 :(得分:1)

您似乎每次都将相同的地址(buffer)传递给read_string系统调用。因此,每次调用都将覆盖前一次调用中的字符串。

您需要为每个字符串分别使用缓冲区。例如,您可以将buffer传递给syscall 8,然后计算读取字符串的长度,为其分配内存(包括NULL终止符)using syscall 9,将字符串从buffer复制到新分配的内存块,最后将已分配内存的地址存储在堆栈中,而不是buffer