Борьба с 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 сделает то, что вам нужно.