ベースアドレスが $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
、$s2
is register18
であり、$a2
is register6
です。