Борьба с 2D массивами в сборке

Я пытаюсь реализовать следующее в MIPS

X - это двумерный массив (матрица) чисел с плавающей запятой двойной точности, а Y - это двумерный массив из 32-битных целых чисел. Попытка написать код для следующего

Z= (X[i][j] + Y[i][j])

Теперь я не знаю, как объявить эти массивы в MIPS:

До сих пор я написал некоторые основные программы, но не знаю, как реализовать их в .data раздел

.data

.text
.main:
mtc1 $0, $f0
 cvt.d.w $f0, $f0
  # $a1 is the address of the first element of x
  l.a $r1, $a1
  # $a2 is the address of the first element of y
  l.a $r2, $a2
  addi $r4, $0, 30
  add.d $f8, $f0, $f0

1 ответ

2D массивы не так уж и плохи. Хитрость заключается в том, чтобы иметь дело с одним измерением за раз. Если у вас есть размер каждого элемента и размер каждого измерения, математика проста. Добавьте произведение индекса строки (на основе нуля), размера строки и размера элемента (в байтах) на ваш базовый адрес. Это будет базовый адрес нужной вам строки. Добавьте к этому произведение индекса столбца и размера элемента, и у вас будет адрес элемента.

Что касается сегмента данных, просто зарезервируйте общий размер массива. Например, если вам нужно место для 3х4, зарезервируйте 12 элементов. Если вы используете целые числа, array: .word 0:12 сделает то, что вам нужно.

Другие вопросы по тегам