2013-05-02 67 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的。

相关问题