Advertisement
milanmetal

[Edulent] Suma niza, broj vecih/manjih, srednja vr.

Nov 8th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROGRAM "Suma"
  2. ;// Dat je niz od 8 elemenata, izracunati srednju vrednost njihovu i
  3. ;// prebrojati koliko ih je manje od 5, koliko je vece od 5 i koliko je jednako 5
  4. ;
  5. ;int main(){
  6. ;   int niz[8];
  7. ;   int avg = 0;
  8. ;   int manjih = 0;
  9. ;   int vecih = 0;
  10. ;   int jednakih = 0;
  11. ;   int i = 0; // brojac
  12. ;
  13. ;   for(i = 0; i < 8; i++){
  14. ;       if(niz[i] < 5) {
  15. ;           manjih++;
  16. ;       }
  17. ;
  18. ;       if(niz[i] > 5) {
  19. ;           vecih++;
  20. ;       } else {
  21. ;           jednakih++;
  22. ;       }
  23. ;   }
  24. ;}
  25. ;
  26. DATA
  27.     VAR1 DB 4
  28.     VAR2 DB 2
  29.     VAR3 DB 7
  30.     VAR4 DB 5
  31.     VAR5 DB 5
  32.     VAR6 DB 7
  33.     VAR7 DB 0
  34.     VAR8 DB 6
  35.  
  36.     SUM DB 0
  37.     BROJAC DB 8
  38.     AVG DB 0 ; srednja vrednost
  39.     MANJIH DB 0
  40.     VECIH DB 0
  41.     JEDNAKIH DB 0
  42.  
  43. ENDDATA
  44. CODE
  45.  
  46.     MOV AP, @VAR1       ; @ uzima adresu promenjive , &niz
  47.                     ; sluzi kao pocetna tacka programa
  48. LOOP:   MOV A, SUM
  49.     ADD A, [AP]
  50.                         ; ADD A, [AP]  
  51.                 ; u AP imam adresu 2, 3, 4... elementa
  52.                     ; [] kazu IDI NA TU ADRESU I UZMI VREDNOST SA NJE
  53.     MOV SUM, A          ; vracam rezultat obrade u SUM, presipam iz akumulatora
  54.                     ; Dakle, sadrzaj registra A prebaci u SUM
  55.  
  56.     ; -------------------------------------
  57.     ; ---- provjeravamo DA LI JE BROJ == 0
  58.     MOV A, [AP]         ; [AP] cuva VREDNOST aktuelnog clana niza na kom se
  59.                     ; nalazi petlja u trenutnom prolazu niz[i] C-ovski gledano
  60.     SUB A, 5
  61.     JZ L_INC_JEDNAKIH   ; skacem ako su jednaki, 5 - 5 = 0, Z skace na 1
  62.     JC L_INC_MANJIH     ; pri oduzimanju VECEG od MANJEG aktivira se CARRY
  63.                    
  64. ; ovde dolazim ako se nije izvrsio nijedan skok iznad
  65. ; ako NIJE jednak, i ako nije MANJI onda je sigurno veci od 5
  66. ; stoga samo uvecavam promenjivu koja cuva broj VECIH
  67. L_INC_VECIH: MOV A, VECIH
  68.     ADD A, 1
  69.     MOV VECIH, A            ; nakon ove instrukcije, MOV, VECIH, A ce
  70.                 ; bezuslovno produziti na labelu i njene instrukcije ispod
  71.                 ; odnosno nastavice da radi s petljom.
  72.  
  73. L_NASTAVAK_LOOPA: MOV A, BROJAC ; vrati stanje vrojaca u akumulator jer radimo s petljom ponovo
  74.     SUB A, 1            ; oduszmi 1 od A odnosno od BROJACa
  75.     MOV BROJAC, A       ; Nakon obrade vracam rezultat u BROJAC, umanjen za jedan sada.
  76.  
  77.     JZ LAVGDIO          ; ako je brojac stigao do nule, JUMP ZERO me prebacuje na
  78.                     ; racunanje srednje vrednosti jer sam sada prosao kroz sve clanove
  79.                     ; niza i nemam vise brojaca, nema sta brojati.
  80.  
  81.     ADD AP, 1           ; UVECAVAM ADRESU! OVO JE JAKO VAZNO! Ako bi adresu uvecao
  82.                     ; Iznad prethodne linije, dakle da je bilo
  83.                 ; ADD AP, 1
  84.                     ; JZ LAVGDIO
  85.                     ; desi se nesto i JZ ne odreaguje na NULU U AKUMULATORU,
  86.                 ; valjda JZ reaguje na promjenu u A ili AP, i u onom u kojem
  87.                 ; je poslednja promjena bila, nju gleda, tako da ako AP uvecam
  88.                 ; onda tu vise nije nula i indikator nule je aktivan ali ga
  89.                 ; JZ ne pokupi i prodje dalje, udje u liniju ispod JMP LOOP i
  90.                 ; vrti se jos nekoliko puta, u opstem slucaju bi vrtio
  91.                 ; u BESKONACNU PETLJU ali ovde se dese neke slucajne okolnosti
  92.                 ; pa stane kada nagura sumu na 120.
  93.     JMP LOOP
  94.  
  95. ; uvecavanje JEDNAKIH je ispod
  96. L_INC_JEDNAKIH: MOV A, JEDNAKIH
  97.     ADD A, 1
  98.     MOV JEDNAKIH, A
  99.     JMP L_NASTAVAK_LOOPA    ; VRATI SE BEZUOSLOVNO ODAKLE SI SKOCIO DO OVE LABELE
  100.                 ; U ovom trenutku je uvecana vrednost JEDNAKIH i vracena u tu promenjivu
  101.  
  102. ; uvecavanje promenjive koja cuva broj MANJIH
  103. L_INC_MANJIH: MOV A, MANJIH
  104.     ADD A, 1
  105.     MOV MANJIH, A
  106.     JMP L_NASTAVAK_LOOPA
  107.  
  108. ;---------------------------------------
  109. ; U OVOM TRENUTKU ISPOD IMAM SRACUNATU SUMU
  110. ; AVG = SUM / 8
  111. LAVGDIO: MOV A, SUM
  112.     SHR
  113.     SHR
  114.     SHR
  115.     MOV AVG, A
  116. LEND: END
  117. ENDPROGRAM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement