Вы можете использовать арифметику указателей для вычисления адреса данных, к которым вы пытаетесь получить доступ.
array[index]
эквивалентно *(array+index)
.Вы можете сделать то же самое в mips, используя инструкцию addu
.
Предполагая, что $a0
является указателем массива, а $a1
является индексом, который вы можете использовать:
addu $t0, $a0, $a1 # tmp = array+index
lbu $t0, ($t0) # x = *tmp
Мыиспользуют addu
, потому что это операция без знака, так как указатели - это слова без знака.Это означает, что он не вызовет исключение переполнения.
Предполагая, что ваш массив будет массивом слов, вы использовали бы тот же подход, но сначала умножьте индекс на 4 (так как слова в 32-битных имеют длину 4 байта).
sll $t0, $a1, 2 # index << 2 = index * 4
addu $t0, $a0, $t0 # tmp = array+index
lw $t0, ($t0) # x = array[index]