Advertisement
Guest User

Untitled

a guest
Jan 19th, 2018
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. .686
  2. .model flat
  3. public _main
  4. .data
  5.  
  6. tablicaA dd 1, 2, 3, 4,
  7. 5, 6, 7, 8,
  8. 9, 10, 11, 12,
  9. 13, 14, 15, 16
  10.  
  11. tablicaB dd 1,2,3,4
  12. m equ 4 ;ilosc wierszy obu tablic
  13. l equ 4 ;ilosc kolumn tabeli A
  14. k equ 1 ; ilosc kolumn tabeli B
  15.  
  16. tablicaC dq l*k dup (?)
  17.  
  18. iterator1 dd 0; indeks ktory bedzie iterowal po tablicyA
  19. iterator2 dd 0; indeks ktory bedzie iterowal po tablicyB
  20. iterator3 dd 0; indeks ktory bedzie iterowal po tablicyC
  21. 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)
  22.  
  23. .code
  24. _main PROC
  25.  
  26. oblicz_wartosc:
  27.  
  28. mov ecx, iterator1
  29. mov eax, tablicaA[ecx*4] ; wpisuje do eax liczbe z tablicy A która chce pomnozyc
  30.  
  31. mov ecx, iterator2
  32. mov ebx, tablicaB[ecx*4] ; wpisuje do ebx liczbe z tablicy B która chce pomnozyc
  33.  
  34. mul ebx
  35.  
  36. mov ecx, iterator3 ; wpisuje do ecx indeks tablicyC do ktorego ma dodaj wynik
  37. add dword ptr tablicaC[ecx*8], eax; dodawanie wymnozonych wartosci do miejsca w tablicyC
  38.  
  39. add iterator1, 1 ; zeby iterowal w tablicyA po kolejnym elemencie w wierszu
  40. add iterator2, k ; k to szerokosc tablicyB i dodaje zeby bral kolejny element z kolumny, a nie wiersza
  41. add licznik1, 1 ; zwiekszam licznik o 1
  42.  
  43. cmp licznik1, m ; sprawdzam czy licznik jest rowny czesci wspolnej macierzy czyli wartosci M, bo tyle jest dodawan dla jednego elementu macierzy wynikowej
  44. jne oblicz_wartosc
  45.  
  46. add iterator3, 1 ; wskaznik ktory wyraz tablicyC jest liczony
  47. mov licznik1, 0 ; zeruje licznik1 zeby dla kolejnego obiegu znow mogl wykonac M mnozen
  48.  
  49. mov eax, iterator3 ; wartosci iteratorow wyciagam z dzielenia liczby juz obliczonych wyrazow przez ilosc elementow w jednym wierszu tabeli wynikowej
  50. mov ebx, k
  51. div ebx
  52. mov iterator2, edx ; iterator 2 jest reszta z dzielenia ilosci juz oblicznowych wyrazow przez ilosc elementow w 1 wierszu
  53.  
  54. mov edx, 0
  55. mov ebx, l
  56. mul ebx
  57. 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)
  58.  
  59. mov edx, 0 ; zeruje edx bo przy mnozenie i dodawaniu mogl zostac zmodyfikowany i moze miec wplyw na koejne operacje
  60. cmp iterator3, k*l ; sprawdzam czy ilosc obliczonych wyrazow(iterator3) jest rowny k*l czyli ilosci elementow ktora ma byc w tablicy wynikowej
  61. jne oblicz_wartosc
  62.  
  63. ret
  64. _main ENDP
  65. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement