Если я хочу загрузить значение из памяти, какой базовый адрес находится в $a0 и выключен, установите $t2, почему я не могу сделать следующее:
lw $s2, $a1($t2)
так что эквивалентно выражению выше?
Ответ 1
Вы не можете этого сделать, потому что нет кодировки команд MIPS, которая поддерживает такую вещь. Вам необходимо сделать дополнение:
add $a2, $a1, $t2
lw $s2, 0($a2)
Кодировка инструкции lw выглядит следующим образом:
1000 11ss ssst tttt iiii iiii iiii iiii
Где sssss - номер регистра источника, ttttt - номер регистра назначения, а iiiiiiiiiiiiiiii - немедленный. Там нет места в этой кодировке (и нет альтернативных кодировок команд), которые используют два регистра для генерации адреса памяти. Специфическая машинная инструкция, которая должна быть закодирована из приведенного выше примера:
1000 1100 1101 0010 0000 0000 0000 0000
Так как непосредственное значение 0, $s2 является регистром 18, а $a2 является регистром 6.