السلام عليكم و رحمه الله و بركاته
لقد طلب منى برنامج لضرب مصفوفتين بال assembly و ابعاد الأولى m×k و الثانية k×n و بهذا تكون ابعاد المصفوفة الناتجة m×n و لقد كتبت البرنامج كله تقريباً و لكن الregisters خلصت منى فهل يوجد احد لديه حل
بشرط الآ يقوم بعملية الجمع الموجودة فى vectormul فى الذاكرة
و ها هو البرنامج :
;================================================== ; ; PROGRAM : top.asm ; ; AUTHOR : أحمد الطلخاوى ; ; PURPOSE : matrix matrix multiplication ; ;================================================== .model small ;----------------------------------------------- .data m equ 2 k equ 2 n equ 2 xmat dw 1,1,1,1 ymat dw 1,1,1,1 result dw m*n*2 dup (0) ;----------------------------------------------- .code main: mov ax,@data mov ds,ax call matrixmul mov ah,4ch int 21h ;-------------------------------------------------------------------------- matrixmul proc near mov si,0 mov ax,0 mov cl,m lp2: mov ch,n mov bx,0 lp1: call vectormul add bx,2 dec ch jnz lp1 add si,k*2 dec cl jnz lp2 ret matrixmul endp ;-------------------------------------------------------------------------- vectormul proc near push cx push si push bx mov bp,0 mov di,0 mov cl,k lp: mov ax,xmat[si] mul ymat[bx] add bp,ax adc di,dx add si,2 add bx,2*n dec cl jnz lp pop bx pop si pop cx mov result[si][bx],bp ;يجب أن يشير على الناتج - طريقة خاطئة mov result[si][bx+2],di ;يجب أن يشير على الناتج - طريقة خاطئة ret ;و لا اريد عملية الجمع ان تتم فى الذاكرة vectormul endp ;-------------------------------------------------------------------------- scalmul proc near mov ax,xmat[si] mul ymat[bx] add bp,ax adc di,dx ret scalmul endp ;-------------------------------------------------------------------------- end main
