Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .686
- .model flat
- public _main
- .data
- tablicaA dd 1, 2, 3, 4,
- 5, 6, 7, 8,
- 9, 10, 11, 12,
- 13, 14, 15, 16
- tablicaB dd 1,2,3,4
- m equ 4 ;ilosc wierszy obu tablic
- l equ 4 ;ilosc kolumn tabeli A
- k equ 1 ; ilosc kolumn tabeli B
- tablicaC dq l*k dup (?)
- iterator1 dd 0; indeks ktory bedzie iterowal po tablicyA
- iterator2 dd 0; indeks ktory bedzie iterowal po tablicyB
- iterator3 dd 0; indeks ktory bedzie iterowal po tablicyC
- licznik1 dd 0; licznik obiegów pętli dla mnożeń, warunek konczacy jak ten iterator bedzie rowny k(1 petla - dla pojedynczego wyrazu tabeli wynikowej)
- .code
- _main PROC
- oblicz_wartosc:
- mov ecx, iterator1
- mov eax, tablicaA[ecx*4] ; wpisuje do eax liczbe z tablicy A która chce pomnozyc
- mov ecx, iterator2
- mov ebx, tablicaB[ecx*4] ; wpisuje do ebx liczbe z tablicy B która chce pomnozyc
- mul ebx
- mov ecx, iterator3 ; wpisuje do ecx indeks tablicyC do ktorego ma dodaj wynik
- add dword ptr tablicaC[ecx*8], eax; dodawanie wymnozonych wartosci do miejsca w tablicyC
- add iterator1, 1 ; zeby iterowal w tablicyA po kolejnym elemencie w wierszu
- add iterator2, k ; k to szerokosc tablicyB i dodaje zeby bral kolejny element z kolumny, a nie wiersza
- add licznik1, 1 ; zwiekszam licznik o 1
- cmp licznik1, m ; sprawdzam czy licznik jest rowny czesci wspolnej macierzy czyli wartosci M, bo tyle jest dodawan dla jednego elementu macierzy wynikowej
- jne oblicz_wartosc
- add iterator3, 1 ; wskaznik ktory wyraz tablicyC jest liczony
- mov licznik1, 0 ; zeruje licznik1 zeby dla kolejnego obiegu znow mogl wykonac M mnozen
- mov eax, iterator3 ; wartosci iteratorow wyciagam z dzielenia liczby juz obliczonych wyrazow przez ilosc elementow w jednym wierszu tabeli wynikowej
- mov ebx, k
- div ebx
- mov iterator2, edx ; iterator 2 jest reszta z dzielenia ilosci juz oblicznowych wyrazow przez ilosc elementow w 1 wierszu
- mov edx, 0
- mov ebx, l
- mul ebx
- mov iterator1, eax ; iterator 1 jest wynikiem dzielenia calkowitego ilosc juz obliczonych wyrazow przez ilosc elementow w 1 wierszu, i pomnozony razy l poniewaz tablica B musi WAŻNE(Co K obliczonych elementów przeskakiwać na kolejny wiersz)
- mov edx, 0 ; zeruje edx bo przy mnozenie i dodawaniu mogl zostac zmodyfikowany i moze miec wplyw na koejne operacje
- cmp iterator3, k*l ; sprawdzam czy ilosc obliczonych wyrazow(iterator3) jest rowny k*l czyli ilosci elementow ktora ma byc w tablicy wynikowej
- jne oblicz_wartosc
- ret
- _main ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement