Я начинаю писать программу MIPS, которая берет входную строку из сегмента данных, кодирует ее, используя карту символов, которая также является строкой, загруженной в раздел данных, а затем записывает закодированную строку в выходную строку, которую также необходимо хранить. в памяти, чтобы входная строка не перезаписывалась. Все буквы кодируются в верхний регистр, все пробелы, знаки препинания и т. д. удаляются во время кодирования, а все строки должны быть разделены символом новой строки.
Вот начало моей программы:
.data
DataIn: .ascii "Test String\n"
SubMap: .ascii "PHQGIUMEAYLNOFDXJKRCVSTZWB\n"
DataOut: .ascii ""
.text
.globl main
main:
la $a0, DataIn #a0 = &DataIn[0]
la $a1, DataOut #a1 = &DataOut[0]
la $a2, SubMap #a2 = &SubMap[0]
jal subCipher
syscall
subCipher:
lw $t0, 0($a0) #t0 = DataIn[0] (first char of input)
lw $t1, 0($a1) #t1 = DataOut[0] (first char of output)
При выполнении я получаю ошибку в последней строке: lw $t1, 0($a1)
. Выдается ошибка
Runtime exception at 0x00400024: fetch address not aligned on word boundary 0x10010027
Я предполагаю, что это связано с чем-то вроде конфликта адресов памяти, потому что строка SubMap
такая длинная и хранится перед строкой DataOut
. Как я могу решить эту проблему?
Во-вторых, как я могу хранить закодированную строку в памяти по мере ее создания, чтобы входная строка не перезаписывалась. В настоящее время я просто загружаю пустую строку в сегмент данных, но не думаю, что это сработает.