Синтаксис слова загрузки MIPS - PullRequest
12 голосов
/ 23 февраля 2010

Если я хочу загрузить из памяти значение, базовый адрес которого равен $ a0 и значение установлено вне $ t2, почему я не могу сделать следующее:

lw  $s2, $a1($t2)

так, что эквивалентно выражению выше?

1 Ответ

14 голосов
/ 23 февраля 2010

Вы не можете сделать это, потому что нет кодировки инструкций 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.

...