Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 为什么程序总是显示相同的字符串?[&x2B;MIPS]_String_View_Insert_Mips_Mergesort - Fatal编程技术网

String 为什么程序总是显示相同的字符串?[&x2B;MIPS]

String 为什么程序总是显示相同的字符串?[&x2B;MIPS],string,view,insert,mips,mergesort,String,View,Insert,Mips,Mergesort,我需要保存一个包含以下内容的数据:名称、id和评级。 所以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 $t

我需要保存一个包含以下内容的数据:名称、id和评级。 所以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  
“查看”命令类似于此命令:

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第二个元素:bb,13,13

查看命令之后是:
aa,12,12秒一个:aa,13,13


您能帮我解决这个问题吗?

看起来您每次都在将相同的地址(
buffer
)传递给
read\u string
系统调用。因此,每次调用都将覆盖上一次调用的字符串


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

看起来您每次都将相同的地址(
buffer
)传递给
读取字符串
系统调用。因此,每次调用都将覆盖上一次调用的字符串

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