Умножение матриц в сборке
Это использует easy68K. Привет, я умножаю две матрицы вместе. Я объявляю константы линейным способом в нижней части кода. Но в основном у меня есть две матрицы, 2 х 2. Я сохраняю в матрице D, которая имеет определенное хранилище. И во второй цикл, когда я иду вверх по адресу, я получаю ошибку:
Ошибка адреса: Инструкция на 1028, адрес доступа 1063 Выполнение остановлено
Вот изображение:
http://i1107.photobucket.com/albums/h385/Nazariy1995/Problem.png
Вот мой код:
r EQU 2 ;number of rows
c EQU 2 ;number of columns
ORG $1000
START: MOVEA.L #A,A0
MOVEA.L #B,A1
MOVEA.L #D,A2
MOVE.W #r,D3 ;used for rows
CLR.W D0 ;offset for A
CLR.W D1 ;offset for B
CLR.W D2 ;offset for D
CLR.W D5 ;calculating the sum
CLR.W D6 ;calculaing the multiplication
CLR.W D7 ;used for number of repeats
L2 MOVE.W #c,D4 ;used for columns mainly for first matrix
L1 CLR.W D5
MOVE.W (A0,D0.W),D5
MULU (A1,D1.W),D5
ADD.W D5,D6
ADD.W #1,D0
ADD.W #c,D1 ;we are moving down a column and thus are adding column to the offset in B
SUB.W #1,D4
BNE L1
MOVE.W D6,(A2,D2.W)
ADD.W #1,D2 ;increment counter for C
ADD.W #1,D7 ;increment repeat
CMP.W #c,D7 ;number of repeats should be equal to column number
BNE RE
CLR.W D7 ;clear repeats because we are moving on to a new row
CLR.W D1 ;set offset for B to 0
SUB.W #1,D3 ;find out through how many rows we went through
BNE L2
STOP #$2700
RE SUB.W #c,D0 ;got at the beginning of a row in A
MOVE.W D7,D1
CLR.W D6
BSR L2
* Put program code here
SIMHALT ; halt simulator
* Put variables and constants here
A DC.W 1,2,0,1
B DC.W 1,0,2,1
D DS.W 4
END START ; last line of source
Пожалуйста помоги! Я немного знаю о сборке, и это просто сложно. Заранее спасибо!