У меня проблемы с индексацией массива в MIPS. Допустим, у меня есть следующий код C:
void main() {
.
.
int[2] a; # or any other length
.
.
a[1] = 7; # or any other number
.
.
}
Допустим, я знаю, что смещение 'a' от указателя кадра равно, например, 12, так что:
lw t0, -12($fp)
Дает мне базовый адрес «а». Теперь предположим, что значение индекса доступа к массиву (в данном случае 1) хранится в $t1. Но я не знаю, что это такое. Как я могу сохранить 7 в [1]? Я ищу что-то вроде:
mul $t1, $t1, -4 # since each integer takes 4 bytes
addi $t1, $t1, -12 # t1 = exact offset from $fp to a[1]
li $t2, 7 # t2 = 7
sw $t2, $t1($fp)
Проблема в том, что последняя операция недопустима (несмотря на индексирование целочисленного массива с помощью сборки MIPS ). Как я могу это сделать? Спасибо
add
, то естьadd $t1, $t1, $fp
, затемsw $t2, ($t1)
. - person Jester   schedule 05.11.2016