我对MIPS32指令中使用的偏移量单位有疑问。我刚刚注意到,像lw $t0, offset($s1)
这样的内存访问指令的offset
单位为 byte ,而像beq $r1, $r2, L1
和跳转j SOMEWHERE
这样的分支指令的单位都为< strong>单词。
IIRC,MIPS要求,每个数据/指令应对齐存储在内存中,其地址为4的倍数,即0x0, 0x4, 0x8, ... etc
。如果是这样,那么为什么不让 word 单位的offset
中的lw/sw
,则范围更大?是因为lb/sb
使用字节单位吗?因此, 特殊情况还不足以打破规则 [“]好的设计需要好的折衷。[。”] 在这里适用吗?< / p>
我还想知道如果我使用lw
加载地址不是4的倍数的数据会怎样?