Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %include "io.inc"
- section .bss
- A: resd 10000
- B: resd 10000
- C: resd 10000
- n: resd 1
- m: resd 1
- k: resd 1
- section .text
- global CMAIN
- CMAIN:
- mov ebp, esp; for correct debugging
- push esi
- push edi
- xor esi, esi
- xor edi, edi
- GET_DEC 4, [n]
- GET_DEC 4, [m]
- GET_DEC 4, [k]
- mov eax, dword [n]
- mov ebx, dword [m]
- mul ebx
- xor ebx, ebx
- a1:
- GET_DEC 4, [A+4*ebx]
- inc ebx
- cmp ebx, eax
- jne a1
- mov eax, dword [m]
- mov ebx, dword [k]
- mul ebx
- xor ebx, ebx
- a2:
- GET_DEC 4, [B+4*ebx]
- inc ebx
- cmp ebx, eax
- jne a2
- xor eax, eax ;i 0..n-1
- xor ebx, ebx ;s 0..m-1
- xor ecx, ecx ;j 0..k-1
- xor edx, edx ;здесь будем аккумулировать сумму
- ;c[i][j] = sum(s=0..m-1) a[i][s]*b[s][j]
- L1:
- L2:
- SUMM:
- mov esi, dword[m]
- imul esi, eax
- add esi, ebx
- mov esi, [A+4*esi]
- mov edi, dword[k]
- imul edi, ebx
- add edi, ecx
- mov edi, [B+4*edi]
- imul esi, edi
- add edx, esi
- ;
- inc ebx
- cmp ebx, dword[m]
- jne SUMM
- mov esi, dword[k]
- imul esi, eax
- add esi, ecx
- mov dword[C+4*esi], edx
- xor edx, edx
- xor ebx, ebx
- inc ecx
- cmp ecx, dword[k]
- jne L2
- xor ecx, ecx
- inc eax
- cmp eax, dword[n]
- jne L1
- xor eax, eax ;i=0..n-1
- xor ebx, ebx ;j=0..k-1
- ;c[i][j] = c[i*k+j]
- V1:
- V2:
- mov edx, dword[k]
- imul edx, eax
- add edx, ebx
- PRINT_DEC 4, [C+4*edx]
- PRINT_CHAR ' '
- inc ebx
- cmp ebx, dword[k]
- jne V2
- xor ebx, ebx
- NEWLINE
- inc eax
- cmp eax, dword[n]
- jne V1
- pop edi
- pop esi
- xor eax, eax
- ret
Advertisement
Add Comment
Please, Sign In to add comment