MATRIX MULTIPLICATION IN VAX-11
A multidimensional matrix is stored in row order. So a two dimensional N x N matrix will be stored in contiguous memory location where elements are in order:
(0,0), (0,1), …. (0,N-1), (1,0), (1,1), …. (1,N-1), ….. (N-1,0), (N-1,1), …. (N-1, N-1)
For I=0 to N-1 do
begin
for j:=0 to N-1 do
begin
C(I,J):=0
for k:= 0 to N-1 do
C(I,J):=C(I,J) + A(I,k)*B(k,J);
end
end
Assembly Code: R6 : N, R0 : I, R2 : J, R4 : K
R1 : address of C element
R3 : address of A element, value of A
R5 : address of B element
MOVL N, R6
DECL R6
CLRL R0
LOOPI: CLRL R2
LOOPJ: INDEX R2, #0, R6, N, #0, R1
INDEX R0, #0, R6, #1, R1, R1
CLRW C[R1]
CLRL R4
LOOPK: INDEX R4, #0, R6, N, #0, R3
INDEX R0, #0, R6, #1, R3, R3
MOVW A[R3], R3
INDEX R2, #0, R6, N, #0, R5
INDEX R4, #0, R6, #1, R5, R5
MULW2 B[R5]. R3
ADDW2 R3, C[R1]
AOBLSS N, R4, LOOPK
AOBLSS N, R2, LOOPJ
AOBLSS N, R0, LOOPI