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