String 为什么程序总是显示相同的字符串?[&x2B;MIPS]
我需要保存一个包含以下内容的数据:名称、id和评级。 所以insert命令是这样的: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
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
复制到新分配的内存块,最后将分配内存的地址存储在堆栈上,而不是缓冲区