индексация массива с помощью MIPS

У меня проблемы с индексацией массива в 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 ). Как я могу это сделать? Спасибо


person Babak    schedule 05.11.2016    source источник
comment
Добавьте его отдельно, используя add, то есть add $t1, $t1, $fp, затем sw $t2, ($t1).   -  person Jester    schedule 05.11.2016
comment
@Jester Спасибо. Прости, что я был глуп. Давно не спал :)   -  person Babak    schedule 06.11.2016