-1

I am newbie when it comes to assembly and 8051, so I need a little help. I want to make this matrix multiplication. i can't figure out why this goes on a infinite loop i tried my level best to debug but i can't. can any one pin point the error? multiplying matrix A m by n with matrix B o by p

mov dptr,#8001h
mov r0,#04h
mov r1,#03h

;getting values of m,n,o,p saving at 3h,4h,5h,6h registers
acall load


;store matrix A
mov a,03h
mov b,04h
mul ab
mov r0,a
mov r1,#10h
mov dptr,#8100h
acall load

;store matrix B
mov a,05h
mov b,06h
mul ab
mov r0,a
mov r1,#20h
mov dptr,#8200h
acall load

;multiply A with B and store it in C
mov 0dh,#00h
loop1:
    mov 0eh,#00h
    loop2:
        ;C element location calc
        mov a,0dh
        mov b,06h
        mul ab
        add a,0eh
        add a,#30h
        mov 0ch,a
        mov r0,a
        mov @r0,#00h

        ;initilize k
        mov 0fh,#00h
        loop3:

            ;A element location calc
            mov a,0dh
            mov b,04h
            mul ab
            add a,0fh
            add a,#10h
            mov 0ah,a

            ;B element location calc
            mov a,0fh
            mov b,06h
            mul ab
            add a,0eh
            add a,#20h
            mov 0bh,a

            ;A*B of elements
            mov 00h,0ah
            mov a,@r0
            mov r1,0bh
            mov b,@r1
            mul ab

            ;c+=a*b
            mov b,a
            mov r0,0ch
            mov a,@r0
            add a,b
            mov @r0,a

            ;increment k and loop
            inc 0fh
            mov a,0fh
            cjne a,04h,loop3

        ;increment j and loop
        inc 0eh
        mov a,0eh
        cjne a,06h,loop2

    ;increment i and loop
    inc 0dh
    mov a,0dh
    cjne a,03h,loop1

;output MATRIX C
mov dptr,#8300h
mov r1,#30h
mov a,03h
mov b,06h
mul ab
mov r0,a

;output values from ram to memory no of values at r0, address of matrix in r1
l2:
    mov a,@r1
    movx @dptr,a
    inc r1
    inc dptr
    djnz r0,l2

sjmp endd
;if not equal write 1 at 8000h


;loading values from memory to ram no of values at r0, address of ram in r1
load:
l1:
    movx a,@dptr
    inc dptr
    mov @r1,a
    inc r1
    djnz r0,l1
ret 
endd: 
end

1 Answers1

-1
mov dptr,#8001h ;start taking m,n,o,p
mov r0,#04h ;loop variable
mov r1,#03h ;location of ram to save

;getting values of m,n,o,p saving at 3h,4h,5h,6h registers
acall load ;loading values
;comparing n,o
mov a,04h
cjne a,05h,no
;if equal write 0 at 8000h 
acall multi
ljmp endd
;if not equal write 1 at 8000h
no:
    mov dptr,#8000h
    mov a,#01h
    movx @dptr,a
    ljmp endd

multi:  
mov dptr,#8000h
mov a,#00h
movx @dptr,a    

;store matrix A
mov a,03h;get m
mov b,04h;get n
mul ab;m*n
mov r0,a;no of elements in A
mov r1,#10h;ram location for matrix
mov dptr,#8100h;get matrix
acall load;call load

;store matrix B
mov a,05h;get 0
mov b,06h;get p
mul ab;0*p
mov r0,a;no of elements in B
mov r1,#20h;ram location for matrix
mov dptr,#8200h;get matrix
acall load;call load

;multiply A with B and store it in C
mov 0dh,#00h
loop1:
    mov 0eh,#00h
    loop2:
        ;C element location calc
        mov a,0dh
        mov b,06h
        mul ab
        add a,0eh
        add a,#30h
        mov 0ch,a
        mov r0,a
        mov @r0,#00h

        ;initilize k
        mov 0fh,#00h
        loop3:

            ;A element location calc
            mov a,0dh
            mov b,04h
            mul ab
            add a,0fh
            add a,#10h
            mov 0ah,a

            ;B element location calc
            mov a,0fh
            mov b,06h
            mul ab
            add a,0eh
            add a,#20h
            mov 0bh,a

            ;A*B of elements
            mov 00h,0ah
            mov a,@r0
            mov r1,0bh
            mov b,@r1
            mul ab

            ;c+=a*b
            mov b,a
            mov r0,0ch
            mov a,@r0
            add a,b
            mov @r0,a

            ;increment k and loop
            inc 0fh
            mov a,0fh
            cjne a,04h,loop3

        ;increment j and loop
        inc 0eh
        mov a,0eh
        cjne a,06h,loop2

    ;increment i and loop
    inc 0dh
    mov a,0dh
    cjne a,03h,loop1

;output MATRIX C
mov dptr,#8300h
mov r1,#30h
mov a,03h
mov b,06h
mul ab
mov r0,a

;output values from ram to memory no of values at r0, address of matrix in r1
l2:
    mov a,@r1
    movx @dptr,a
    inc r1
    inc dptr
    djnz r0,l2

ret

;loading values from memory to ram no of values at r0, address of ram in r1
load:
l1:
    movx a,@dptr
    inc dptr
    mov @r1,a
    inc r1
    djnz r0,l1
ret 
endd: 
end

found my mistakes and corrected it here is final result