ベースアドレスが $a0 でオフセット $t2 にあるメモリから値をロードしたい場合、次のようにできないのはなぜですか:
lw $s2, $a1($t2)
では、上記の式に相当するものは何ですか?
そのようなことをサポートする MIPS 命令エンコーディングがないため、それはできません。自分で追加する必要があります:
add $a2, $a1, $t2
lw $s2, 0($a2)
命令エンコーディングは次のlwようになります。
1000 11ss ssst tttt iiii iiii iiii iiii
sssssはソース レジスタ番号、tttttは宛先レジスタ番号、は即値iiiiiiiiiiiiiiiiです。2 つのレジスタを使用してメモリ アドレスを生成するエンコーディング (および代替命令エンコーディングがない) には余裕がありません。上記の例からエンコードされる特定のマシン命令は次のとおりです。
1000 1100 1101 0010 0000 0000 0000 0000
即値は isであるため0、$s2is register18であり、$a2is register6です。