【发布时间】:2016-10-11 20:09:38
【问题描述】:
我开始编写一个 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
我猜这是由于内存地址发生冲突,因为SubMapstring 太长并且存储在DataOut 字符串之前。我该如何解决这个问题?
第二点,如何在创建编码字符串时将其存储在内存中,以免覆盖输入字符串。目前,我只是将一个空字符串加载到数据段中,但我认为这不会起作用。
【问题讨论】:
标签: string mips memory-address mips32