Так что в основном я должен вставить символы из массива символов, чтобы заменить слово с нулевым символом в конце, хранящееся в куче. Однако, когда символы возвращаются обратно, они добавляются в адрес кучи нормально, но при проверке следующей итерации цикла предыдущие адреса выходят за пределы. Я понятия не имею, почему это происходит, и любая помощь очень ценится.
chars_to_word: # get characters from array and turn into word
li $t0, 0 # counter for loop
la $s4, ($s5) # go to start of char array
sub $s3, $s3, $t9 # go to previous address of heap (due to earlier increment)
ctw_loop:
beq $s0, $t0, print_string # branch when end of char array
la $t1, ($s3) # $t1 = word[i]
lb $t3, ($s4) # load char from array to put into string
sb $t3, ($t1) # put char into heap at index
addi $t0, $t0, 1
addi $s3, $s3, 1
add $s4, $s4, $t9
j ctw_loop
print_string:
sub $s3, $s3, $t9
lw $a0, ($s3)
li $v0, 4
syscall
j exit
Для пояснения, $ s4 - это адрес массива символов, $ s5 - это сохраненный начальный адрес массива символов, $ s3 - это местоположение кучи строк, а $ t9 - общий размер каждой части кучи и массив.
Ошибка происходит в print_string при попытке вернуться к начальной позиции кучи строк для печати, и это исключение за пределами границ, когда я считаю, что оно должно быть именно там, где начало вставленных символов.
Заранее спасибо, и я ценю любую помощь!