Хранить строки в MIPS
Я буду коротким.
Я делаю программу в MIPS, которая получает строки из 15 символов от пользователя. Я не могу сохранить строку в стеке. Обратите внимание, что я использую 2D Matrix [20][15], где 20 - строка, а каждая строка имеет 15 символов.
Пожалуйста, ведите меня. Я пробовал это в течение последних 10 часов.
Loop:
bgt $t2,20,XYZ
li $v0,8 #take in input
la $a0, buffer #load byte space into address
li $a1, 15 # allot the byte space for string
syscall
move $t3,$a0 #save string to t0
#transfering the data onto stack!
#num = $t2
#$base address of Matrix = $t1
#colums of Matrix = 15
mul $s0,$t2,15 #num * colums
li $s1,4 #String have 4 bit!
mul $s0,$s0,$s1
add $s0,$s0,$t1 #$t1 is the base address!
#storing the data onto the stack!
sw $t3,0($s0)
add $t2,$t2,1
add $s0,$s0,-15
j Loop
1 ответ
Вы храните адрес строки в стеке, а не саму строку
t3 устанавливается:
la $a0, buffer #load byte space into address
move $t3,$a0 #save string to t0
Хранение инструкции:
sw $t3,0($s0)
Следующая инструкция предполагает, что было записано 15 байт:
add $s0,$s0,-15
Вы только написали 4 байта с SW $t2,0($s0). В любом случае это также уничтожается в следующем цикле, когда вы пересчитываете и перезаписываете S0 на основе T2. делая добавление $s0,$s0,-15 избыточным.
Вам нужна подпрограмма копирования строки, как
#A0=Dest, A1=Source
copy_string:
lbu v0,(a1)
addiu a1,a1,#1
sb v0,(a0)
addiu a0,a0,#1
bnez v0, copy_string