在组装和8051时我是新手,所以我需要一些帮助 . 我想做这个矩阵乘法 . 我无法弄清楚为什么这是一个无限循环我尝试我的水平最好调试,但我不能 . 任何一个针都可以指出错误吗?将矩阵A m乘以n,将矩阵B o乘以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 回答
发现我的错误并在此纠正它是最终结果