我正在构建一个Mips汇编器,就其目前的状态而言,它可以容忍以下指令,如 lw $s0, 3($sp)
我发现这对我来说有些反常,因为我不知道处理器是否能容忍这种情况,或者它不能从一个字中加载1个字节,而从另一个字中加载另外3个字节。
换句话说,我应该把数据处理成一个字数组(二维数组),所以我只能寻址4个对齐的字,还是一个一维数组,所有的字节一个接一个,我可以访问任何4个连续的字节,并把它们塞进一个寄存器?
一个MIPS处理器应该在地址错位的情况下发生故障,但这不是汇编器的工作来决定的。
一个警告可能是合理的,但从技术上讲,在构建时,你很少能知道或预测寄存器中的内容。 3的偏移量是合法的,并且可以工作,在有了 lw
或 sw
如果寄存器中的地址也是奇数。
另外,程序员可能是想引起一个故障--你永远不知道。
问题的关键是,指令有一个有效的编码,汇编者应该将文本翻译成该机器代码。