Хранить строки в 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
Другие вопросы по тегам