TITLE C:\users\jjohnson\classes\fa00\cs570\assignments\assign3\mmult\matrixprod.c .386P include listing.inc if @Version gt 510 .model FLAT else _TEXT SEGMENT PARA USE32 PUBLIC 'CODE' _TEXT ENDS _DATA SEGMENT DWORD USE32 PUBLIC 'DATA' _DATA ENDS CONST SEGMENT DWORD USE32 PUBLIC 'CONST' CONST ENDS _BSS SEGMENT DWORD USE32 PUBLIC 'BSS' _BSS ENDS $$SYMBOLS SEGMENT BYTE USE32 'DEBSYM' $$SYMBOLS ENDS $$TYPES SEGMENT BYTE USE32 'DEBTYP' $$TYPES ENDS _TLS SEGMENT DWORD USE32 PUBLIC 'TLS' _TLS ENDS ; COMDAT _matrix_prod _TEXT SEGMENT PARA USE32 PUBLIC 'CODE' _TEXT ENDS FLAT GROUP _DATA, CONST, _BSS ASSUME CS: FLAT, DS: FLAT, SS: FLAT endif PUBLIC _matrix_prod EXTRN _zero_matrix:NEAR EXTRN __chkesp:NEAR EXTRN __fltused:NEAR ; COMDAT _matrix_prod _TEXT SEGMENT _m1$ = 8 _n1$ = 12 _n2$ = 20 _A$ = 24 _B$ = 28 _i$ = -4 _j$ = -8 _k$ = -12 _C$ = -16 _matrix_prod PROC NEAR ; COMDAT ; 15 : { push ebp mov ebp, esp sub esp, 80 ; 00000050H push ebx push esi push edi lea edi, DWORD PTR [ebp-80] mov ecx, 20 ; 00000014H mov eax, -858993460 ; ccccccccH rep stosd ; 16 : int i,j,k; ; 17 : float **C; ; 18 : ; 19 : C = zero_matrix(1,m1,1,n2); mov eax, DWORD PTR _n2$[ebp] push eax push 1 mov ecx, DWORD PTR _m1$[ebp] push ecx push 1 call _zero_matrix add esp, 16 ; 00000010H mov DWORD PTR _C$[ebp], eax ; 20 : for (i=1;i<=m1;i++) mov DWORD PTR _i$[ebp], 1 jmp SHORT $L592 $L593: mov edx, DWORD PTR _i$[ebp] add edx, 1 mov DWORD PTR _i$[ebp], edx $L592: mov eax, DWORD PTR _i$[ebp] cmp eax, DWORD PTR _m1$[ebp] jg SHORT $L594 ; 21 : for (j=1;j<=n2;j++) mov DWORD PTR _j$[ebp], 1 jmp SHORT $L595 $L596: mov ecx, DWORD PTR _j$[ebp] add ecx, 1 mov DWORD PTR _j$[ebp], ecx $L595: mov edx, DWORD PTR _j$[ebp] cmp edx, DWORD PTR _n2$[ebp] jg SHORT $L597 ; 22 : for (k=1;k<=n1;k++) mov DWORD PTR _k$[ebp], 1 jmp SHORT $L598 $L599: mov eax, DWORD PTR _k$[ebp] add eax, 1 mov DWORD PTR _k$[ebp], eax $L598: mov ecx, DWORD PTR _k$[ebp] cmp ecx, DWORD PTR _n1$[ebp] jg SHORT $L600 ; 23 : C[i][j] = C[i][j] + A[i][k] * B[k][j]; mov edx, DWORD PTR _i$[ebp] mov eax, DWORD PTR _C$[ebp] mov ecx, DWORD PTR [eax+edx*4] mov edx, DWORD PTR _i$[ebp] mov eax, DWORD PTR _A$[ebp] mov edx, DWORD PTR [eax+edx*4] mov eax, DWORD PTR _k$[ebp] mov esi, DWORD PTR _B$[ebp] mov eax, DWORD PTR [esi+eax*4] mov esi, DWORD PTR _k$[ebp] mov edi, DWORD PTR _j$[ebp] fld DWORD PTR [edx+esi*4] fmul DWORD PTR [eax+edi*4] mov edx, DWORD PTR _j$[ebp] fadd DWORD PTR [ecx+edx*4] mov eax, DWORD PTR _i$[ebp] mov ecx, DWORD PTR _C$[ebp] mov edx, DWORD PTR [ecx+eax*4] mov eax, DWORD PTR _j$[ebp] fstp DWORD PTR [edx+eax*4] jmp SHORT $L599 $L600: jmp SHORT $L596 $L597: jmp $L593 $L594: ; 24 : return C; mov eax, DWORD PTR _C$[ebp] ; 25 : } pop edi pop esi pop ebx add esp, 80 ; 00000050H cmp ebp, esp call __chkesp mov esp, ebp pop ebp ret 0 _matrix_prod ENDP _TEXT ENDS END