42
Uvod u arhitekturu računara školska 2014/2015. godina ~ ~ Zadaci sa vežbi ~ ~ Ivana Tanasijević 1. Čas Obnavljanje minimizacije. 1. Zadatak Neka je zadata logička funkcija F: {0,1} 4 → {0,1} na sledeći način F(0,0,0,0) = 1, F(0,0,1,0) = 1, F(1,1,0,1) = 1, F(1,0,0,0) = 1, F(0,0,1,1) = 0, F(0,1,0,1) = 0, F(1,0,1,1) = 0. Za ostale ulaze funkcija je nedefinisana. a) Minimizovati funkciju metodom Karnoovih mapa. AB\CD 00 01 11 10 00 1 N 0 1 01 N 0 N N 11 N 1 N N 10 1 N 0 N Slika 1 Potrebno je: - pokriti sve jedinice grupama oblika pravougaonika dimenzija 2 n x2 m , gde su m i n nenegativni celi brojevi - grupama ne obuhvatiti ni jednu nulu - uvesti što manji broj grupa kojima se pokrivaju sva polja sa jedinicama - za svaku uvedenu grupu nastojati da grupa sadrži najveći mogući broj polja - polja koja odgovaraju nedefinisanim vrednostima mogu ući u sastav grupe kako bi se povećao broj polja u grupi, ali ne treba uvoditi grupe koje se sastoje samo od takvih polja. Uvedene su dve grupe, mogu se videti na Slici 1 (obojene žuto i plavo), koje se sastoje od osam i četiri polja. Svakoj grupi se pridružuje formula koja predstavlja konjunkciju promenljivih koje su konstantne na celoj grupi. Na žutoj grupi je konstantna samo promenljiva D i to sa vrednošću 0, tako da će njoj odgovarati formula D . Na plavoj grupi su konstantne promenljive A (sa vrednošću 1) i promenljiva C (sa vrednošću 0), stoga njoj odgovara formula AC . Minimalni oblik funkcije je F (A, B, C, D) = D + AC .

Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

Embed Size (px)

Citation preview

Page 1: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

Uvod u arhitekturu računaraškolska 2014/2015. godina

~ ~ Zadaci sa vežbi ~ ~

Ivana Tanasijević

1. Čas

Obnavljanje minimizacije.

1. ZadatakNeka je zadata logička funkcija F: {0,1}4 → {0,1} na sledeći način F(0,0,0,0) = 1, F(0,0,1,0) = 1, F(1,1,0,1) = 1, F(1,0,0,0) = 1, F(0,0,1,1) = 0, F(0,1,0,1) = 0, F(1,0,1,1) = 0. Za ostale ulaze funkcija je nedefinisana.

a) Minimizovati funkciju metodom Karnoovih mapa.

AB\CD 00 01 11 10

00 1 N 0 1

01 N 0 N N

11 N 1 N N

10 1 N 0 N

Slika 1

Potrebno je:- pokriti sve jedinice grupama oblika pravougaonika dimenzija 2nx2m, gde su m i n nenegativni celi brojevi- grupama ne obuhvatiti ni jednu nulu- uvesti što manji broj grupa kojima se pokrivaju sva polja sa jedinicama- za svaku uvedenu grupu nastojati da grupa sadrži najveći mogući broj polja- polja koja odgovaraju nedefinisanim vrednostima mogu ući u sastav grupe kako bi se povećao broj polja u grupi, ali ne treba uvoditi grupe koje se sastoje samo od takvih polja.

Uvedene su dve grupe, mogu se videti na Slici 1 (obojene žuto i plavo), koje se sastoje od osam i četiri polja. Svakoj grupi se pridružuje formula koja predstavlja konjunkciju promenljivih koje su konstantne na celoj grupi. Na žutoj grupi je konstantna samo promenljiva D i to sa vrednošću 0, tako da će njoj odgovarati formula D. Na plavoj grupi su konstantne promenljive A (sa vrednošću 1) i promenljiva C (sa vrednošću 0), stoga njoj odgovara formula AC.

Minimalni oblik funkcije je F (A, B, C, D) = D + AC.

Page 2: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

Primetiti da je F(A, B, C, D) = D + AB takođe minimalni oblik.

b) Minimizovati funkciju metodom Kvin-MekKlaski.

Na početku funkciju treba predstaviti preko savršene disjunktivne normalne forme tako da se nedefinisane vrednosti tretiraju kao jedinice:

F(A, B, C, D) = ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD.

Potrebno je grupisati konjunkcije po broju negacija (prva kolona u Tabeli 1, grupe su obeležene različitim bojama). Porediti svake dve susedne grupe (prvu sa drugom, drugu sa trećom, treću sa četvrtom i četvrtu sa petom) na sledeći način: potrebno je napraviti sva moguća sažimanja implikanata, tako da - jedan implikant pripada jednoj grupi, drugi implikant pripada susednoj grupi, - oba implikanta imaju iste promenljive, - razlikuju se samo na jednoj promenljivoj.

Kada se uoči moguće sažimanje (na primer, ABCD i ABCD zadovoljavaju prethodne uslove), oba implikanta treba označiti, a sažeti oblik, koji se pojavljuje u oba implikanta (ABD), dopisati u desnu kolonu.Postupak nastaviti sve dok se može napraviti bar neko sažimanje.

ABCD √ ABD √ BD √ D

ABCD √ BCD √ AD √

ABCD √ ABC √ BC

ABCD √ ACD √ CD √

ABCD √ ACD √ CD √

ABCD √ BCD √ AD √

ABCD √ ACD √ AC

ABCD √ ABC √ BD √

ABCD √ ABD √ BC

ABCD √ BCD √ AB

ABCD √ ABD √

ABCD √ BCD √

ABCD √ ABC √

BCD √

ABC √

ABD √

ACD √

Page 3: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

ACD √

ABD √

BCD √

ABC √Tabela 1

Kada sažimanje više nije moguće, pravi se tabela koja u zaglavlju kolona sadrži konjunkcije koje odgovaraju samo ulazima za koje funkcija ima vrednost jedan (Tabela 2). Tabela u zaglavlju vrsta treba da ima sve neuparene implikante iz Tabele 1.

Neupareni implikanti su BC, AC, BC, AB i D.

ABCD ABCD ABCD ABCD

BC x x

AC x

BC

AB x

D x x x Tabela 2

Za svaki implikant iz Tabele 2, upisati x u svakoj koloni koja odgovara konjunkciji koja sadrži taj implikant (na primer, AB se sadrži u konjunkciji ABCD).

Kolona je pokrivena ukoliko je bar jedan x iz te kolone označen. Potrebno je sa što manje implikanata pokriti sve kolone. Prvo označavamo x koje je jedino u koloni (u Tabeli 2 je to x označeno tamno plavom), zato što je ono jedini izbor za tu kolonu. Sve ostale x-eve iz te vrste takodje označavamo (svetlo plava).Ostala je nepokrivena treća kolona. Može se izabrati bilo koji od dva implikanta AC ili AB. U ovom primeru je izabran prvi implikant (obojeno zeleno).

Konačni, minimizovani oblik funkcije je F (A, B, C, D) = D + AC.

2. Čas

1. ZadatakPolusabirač, sabirač.

Page 4: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

2. ZadatakSabiranje dva 4-bitna broja.

3. ZadatakPoluoduzimač, oduzimač.

4. ZadatakImplementirati funkciju F(x) = 3/2 x + 1, za 4-bitni operand x.

5. Zadatak (za domaći)Implementirati funkciju F(x) = 3x – 1, za 4-bitni operand x.

Page 5: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

Kombinatorna kola.

1. ZadatakMultiplekser 4-1, demultiplekser 1-4.

2. ZadatakDekoder 2-4, enkoder 4-2.

3. ZadatakMultiplekser 8-2 preko dva multipleksera 4-1 i jednog multipleksera 2-1.

Page 6: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

4. Zadatak (za domaći)Multiplekser 4-1 preko dekodera 2-4.

5. Zadatak (za domaći)Konstruisati jedinicu za ciklično siftovanje u levo prvog operanda od 4 bita za broj bita odredjenih drugim operandom od 2 bita. Napraviti dekoder za cifre izlaza.

3. Čas

1. ZadatakNapraviti kolo koje u zavisnosti od ulaza S izvršava sledeće operacije nad 4-bitnim operandom:a) za S = 0, prosledjuje ulaz nepromenjen na izlaz,b) za S = 1, izvodi logičko pomeranje u levo.

2. ZadatakNapraviti kolo koje u zavisnosti od ulaza S izvršava sledeće operacije nad 4-bitnim operandom:a) za S = 0, izvodi aritmetičko pomeranje u desno,b) za S = 1, izvodi logičko pomeranje u levo.

3. ZadatakNapraviti logičku jedinicu koja u zavisnosti od dvobitnog ulaza S izvršava sledeće operacije nad 4-bitnim operandima:a) za S = 0, računa bitsku konjunkciju operanada na ulazub) za S = 1, računa bitsku disjunkciju operanada na ulazuc) za S = 2, računa bitsku ekskluzivnu disjunkciju operanada na ulazud) za S = 3, računa bitsku negaciju prvog operanda

Page 7: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

4. ZadatakNeka je funkcija F: {0,1}3 → {0,1} zadata na sledeći način F(0,0,0) = 1, F(0,0,1) = 1, F(0,1,0) = 1, F(0,1,1) = 0,F(1,0,0) = 0, F(1,0,1) = 1, F(1,1,0) = 0, F(1,1,1) = 0.Implementirati datu funkciju preko multipleksera 4-1.

5. ZadatakNeka je funkcija F: {0,1}4 → {0,1} zadata na sledeći način F(0,0,0,0) = 0, F(0,0,0,1) = 0, F(0,0,1,0) = 0, F(0,0,1,1) = 1, F(0,1,0,0) = 1, F(0,1,0,1) = 1, F(0,1,1,0) = 1, F(0,1,1,1) = 0, F(1,0,0,0) = 1, F(1,0,0,1) = 1, F(1,0,1,0) = 0, F(1,0,1,1) = 1, F(1,1,0,0) = 0, F(1,1,0,1) = 1, F(1,1,1,0) = 0, F(1,1,1,1) = 0.Implementirati datu funkciju preko multipleksera 8-1.

Page 8: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

Sekvencijalna kola. Reze. Flip flopovi. SR, JK, D, T - pregled.

1. Zadatak4-bitni pomerački registar.

2. Zadatak4-bitni pomerački registar sa paralelnim ulazom.

4. Čas

1. Zadatak4-bitni pomerački registar koji implementira ciklično šiftovanje u levo, sa paralelnim ulazom.

Page 9: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

2. Zadatak (za domaći)Implementirati pomerački registar koji za dvobitni kod operacije S, izvršava sledeće:1) za S=0, ciklički siftuje bitove sa ulaza za jedno mesto u desno2) za S=1, aritmetički siftuje bitove sa ulaza za dva mesta u desno3) za S=2, popunjava sve bitove jedinicama4) za S=3, omogućava paralelno učitavanje

3. Zadatak (domaći)Kolu iz prethodnog zadatka dodati indikator da se pojavila sekvenca:a) 1000b) 0000c) 1011 ili 1101d) 1100 ili 1111

Brojači

1. ZadatakAsinhroni brojač 0-7.

2. ZadatakSinhroni brojač 0-15.

Page 10: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

3. ZadatakSinhroni brojač 0-9.

4. ZadatakSinhroni brojač 0-5.

5. ZadatakSinhroni brojač 0-59.

Page 11: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

6. Zadatak (za domaći)Sinhroni brojač 0-23.

7. Zadatak (za domaći)Sinhroni digitalni brojač za časove, minute i sekunde, 23:59:59.

5. Čas

Brojači, sistematski pristup

1. ZadatakImplementirati sinhroni brojač 0-1-2-4-5-6-8-9-10-12-13-14

Brojač ćemo implementirati preko četiri JK flip flopa. Iz tablice za JK flip flop treba prvo izvesti tablicu prelaska stanja koja će nam trebati prilikom popunjavanja velike tablice prelaska stanja.

Tablica JK flip flopa:

J K Qn+1

0 0 Qn

0 1 0

1 0 1

1 1 Qn

Tablica prelaska stanja:

Qn Qn+1 J K

0 0 0 N

0 1 1 N

1 0 N 1

1 1 N 0

Popunjava se tabela koja ima kolone: prethodno stanje AnBnCnDn, sledeće stanje An+1Bn+1Cn+1Dn+1, vrednosti koje treba dovesti na Ji i Ki, da bi stanje Sn prešlo u stanje Sn+1, gde i i S mogu biti A, B, C ili D. Na primer, posle stanja AnBnCnDn = 0000 treba preći u stanje An+1Bn+1Cn+1Dn+1 = 0001. Ukoliko brojač u neko stanje ni ne ulazi (u ovom primeru je to stanje 0011), tada je njegovo sledeće stanje nebitno i obeležava se sa NNNN.

An Bn Cn Dn An+1 Bn+1 Cn+1 Dn+1 JA KA JB KB JC KC JD KD

0 0 0 0 0 0 0 1 0 N 0 N 0 N 1 N

Page 12: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

0 0 0 1 0 0 1 0 0 N 0 N 1 N N 1

0 0 1 0 0 1 0 0 0 N 1 N N 1 0 N

0 0 1 1 N N N N N N N N N N N N

0 1 0 0 0 1 0 1 0 N N 0 0 N 1 N

0 1 0 1 0 1 1 0 0 N N 0 1 N N 1

0 1 1 0 1 0 0 0 1 N N 1 N 1 0 N

0 1 1 1 N N N N N N N N N N N N

1 0 0 0 1 0 0 1 N 0 0 N 0 N 1 N

1 0 0 1 1 0 1 0 N 0 0 N 1 N N 1

1 0 1 0 1 1 0 0 N 0 1 N N 1 0 N

1 0 1 1 N N N N N N N N N N N N

1 1 0 0 1 1 0 1 N 0 N 0 0 N 1 N

1 1 0 1 1 1 1 0 N 0 N 0 1 N N 1

1 1 1 0 0 0 0 0 N 1 N 1 N 1 0 N

1 1 1 1 N N N N N N N N N N N N

Izračunavaju se minimalne forme funkcija JA, KA, JB, KB, JC, KC, JD i KD, proizvoljnom metodom. Minimalne forme su JA = BC, KA = BC, JB = C, KB = C, JC = D, KC = 1, JD = C i KD = 1.

2. Zadatak (za domaći)a) 0-2-4-6-8-10-12-14-15-13-11-9-7-5-3-1b) 0-1-2-3-4-8-9-10-11-12c) 7-6-5-4-3-2-1

Page 13: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

SIM

6. Čas

1. Napisati program u sim-u koji sabira dva broja

@ Podaci

FD 00 @ RezultatFE 12 @ Prvi brojFF 87 @ Drugi broj

@ Program

00 00FE @ Unosimo prvi broj u Acc02 20FF @ Sabiramo ga sa drugim brojem04 10FD @ Smestamo rezultat na lokaciju za rezultat06 80 @ Zavrsavamo program

7. Čas

Napisati sledeće programe u sim-u

2. Oduzimanje dva broja3. Sabiranje dvobajtnih brojeva4. Bitovska negacija5. Bitovska disjunkcija6. Izračunavanje izraza7. Maksimum dva broja8. Proizvod dva broja9. Količnik i ostatak

Rešenja

2. @ Program koji oduzima dva broja

@ Podaci

FD 00 @ RezultatFE 12 @ Prvi brojFF 87 @ Drugi broj

@ Program

00 00FF @ Unosimo drugi broj u Acc02 30 @ Komplementiramo ga03 20FE @ Sabiramo ga sa prvim brojem05 10FD @ Smestamo rezultat na lokaciju za rezultat07 80 @ Zavrsavamo program

Page 14: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

3. @ Program koji sabira dva dvobajtna broja

@ Podaci

FE 0000 @ RezultatFC 1234 @ Prvi brojFA 8765 @ Drugi broj

@ Program

00 00FD @ Unosimo bajt manje tezine u Acc02 20FB @ Sabiramo ga sa bajtom manje @ tezine drugog broja04 10FF @ Smestamo rezultat na manji bajt @ lokacije za rezultat

06 00FC @ Unosimo bajt vece tezine u Acc08 A0FA @ Sabiramo ga sa bajtom vece @ tezine drugog broja0A 10FE @ Smestamo rezultat na veci bajt @ rezultata0C 80 @ Zavrsavamo program

4. @ Program koji racuna bitku negaciju

@ Podaci

FE 89 @ OperandFF 00 @ Rezultat

@ Program

00 00FE @ Smestamo operand u Acc02 51FF @ Racunamo XOR sa 11111111 = FF04 10FF @ Smestamo rezultat na dogovorenu @ lokaciju06 80 @ Zavrsavamo program

5. @ Program koji racuna bitsku disjunkciju dva broja

@ Podaci

FD 78 @ Prvi brojFE 89 @ Drugi brojFF 00 @ Rezultat

@ Program

00 00FD @ Unosimo prvi broj u Acc02 51FF @ Negiramo ga04 10FD @ Smestamo na pomocnu lokaciju

06 00FE @ Unosimo drugi broj u Acc08 51FF @ Negiramo ga0A 40FD @ Racunamo konjunkciju sa negiranim @ prvim brojem0C 51FF @ Racunamo negaciju cele zagrade0E 10FF @ Smestamo rezultat na lokaciju @ za rezultat

Page 15: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

10 80 @ Kraj

6. @ Program racuna izraz (4a - b + 1)/2 + c/4

@ Podaci

FA 01 @ Broj aFB 03 @ Broj bFC 0A @ Broj cFD 00 @ Rezultat

@ Program

00 00FA @ Unosimo a u Acc02 6102 @ Mnozimo sa 404 2101 @ Sabiramo sa 106 10FA @ Smestamo na pomocnu lokaciju

08 00FB @ Smestamo b u Acc0A 30 @ komplementiramo0B 20FA @ Sabiramo sa prothodno izracunatim0D 7101 @ Delimo rezultat sa 20F 10FA @ Smestamo na pomocnu lokaciju

11 00FC @ Unosimo c u Acc13 7102 @ Delimo sa 415 20FA @ Sabiramo sa prethodno izracunatim17 10FD @ Smestamo rezultat na lokaciju za rezultat

19 80 @ Kraj

7. @ Program racuna maksimum dva broja

@ Podaci

FA 07 @ Prvi brojFB 03 @ Drugi brojFD 00 @ Rezultat

@ Program

00 00FB @ Smestamo drugi broj u Acc02 30 @ komplementiramo ga03 20FA @ Sabiramo sa prvim brojem 05 B0 @ Unosimo flegove u Acc06 4104 @ Izdvajamo sign fleg

08 9140 @ Ako je sign fleg nula, sadrzaj akumulatora je @ nula, prvi je veci, pa prelazimo na @ lokaciju 40

0A 00FB @ Ako je sign fleg jedan, sadrzaj je razlicit0C 10FD @ od nule, znaci da je drugi veci.0E 80

40 00FA @ Smestamo prvi na rezultat42 10FD44 80 @ Kraj

Page 16: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

8. @ Program racuna proizvod dva broja

@ Podaci

FA 07 @ Prvi broj xFB 03 @ Drugi broj yFD 00 @ Rezultat

@ Program

00 00FB @ Proveravamo da li je y nula02 9120 @ Ako jeste, iskacemo iz petlje 04 21FF @ Ako nije, smanjujemo y za jedan06 10FB

08 00FA @ Dodajemo x na sumu0A 20FD0C 10FD

0E 0100 @ Vracamo se na pocetak petlje10 9100

20 80 @ Kraj

9. @ Program racuna kolicnik i ostatak pri deljenju dva broja

@ Podaci

FA 03 @ Prvi broj xFB 07 @ Drugi broj yFD 00 @ RezultatFE 00 @ Kolicnik

@ Program

00 00FA @ Izracunavamo -x i smestamo na 02 30 @ pomocnu lokaciju03 10FC

05 00FB @ Racunamo y-x, tj. y+(-x)07 20FC09 10FB

0B B0 @ Unosimo flegove0C 4104 @ Izdvajamo sign fleg

0E 9130 @ Ako je razlika nenegativna, sign fleg ce biti @ nula, pa cemo skociti na lokaciju ..

10 00FB @ Ako je razlika negativna, sign fleg ce biti 12 20FA @ jedan, pa vracamo jedno x na y14 10FB

16 80 @ Zavrsavamo program

30 00FE @ .. Povecavamo kolicnik za jedan32 210134 10FE

Page 17: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

36 0100 @ Vracamo se na pocetak petlje38 9105

8. Čas

Napisati sledeće programe u asm2

10. Proizvod11. Količnik i ostatak12. Demonstracija potprograma13. NZD

Rešenja

10. @ Program u asm2 koji racuna proizvod dva broja

.varx 4 @ Prvi brojy 5 @ Drugi brojp 0 @ Proizvod

.prg

petlja:mua y @ Smestamo y u Accjz kraj @ Proveravamo da li je nula @ Ako jeste, iskacemo iz petlje

add #-1 @ Ako nije, smanjujemo y za jedanaum y mua x @ Dodajemo x na proizvodadd paum p

mua #0 @ Vracamo se na pocetak petljejz petlja

kraj:halt @ Zavrsavamo program

11. @ Program u asm2 koji racuna kolicnik i ostatak

.varx 20 @ Prvi broj, ostataky 7 @ Drugi brojk 0 @ Kolicnikp 0 @ Privremena lokacija za -ymaska 4 @ Maska za sign fleg

.prgmua y @ Racunamo -ycpl

Page 18: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

aum p

petlja:mua x @ U petlji, racunamo x-yadd paum x

fua @ Unosimo flegoveand maska @ Izdvajamo sign fleg

jz pozitivno @ Ako je sign fleg nula, skacemo @ na labelu "pozitivno"

mua x @ Ako je sign fleg jedinica, to znaci da je add y @ razlika negativna, pa vracamo jedno yaum x

halt @ Zavrsavamo program

pozitivno:mua k @ Povecavamo kolicnik za jedanadd #1aum k

mua #0 @ Vracamo se na pocetak petljejz petlja

12. @ Program u asm2 koji poziva potprogram koji racuna ostatak

.varx 20 @ Prvi brojy 7 @ Drugi brojrezultat 0 @ Rezultat

@ Podaci za potprogramarg1 0 @ Prvi argumentarg2 0 @ Drugi argumentpov_vr 0 @ Povratna vrednostap 0 @ Adresa povratka

p 0 @ Privremena lokacija za -ymaska 4 @ Maska za sign fleg

@ Glavni program.prgmua x @ Inicijalizujemo prvi argument na xaum arg1mua y @ Inicijalizujemo drugi argument na yaum arg2mua povratak @ Inicijalizujemo adresu povratkaaum apmua #0jz funkcija @ Pozivamo funkciju

povratak:mua pov_vraum rezultathalt

funkcija:

Page 19: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

mua arg2 @ Racunamo -ycplaum p

petlja:mua arg1 @ U petlji, racunamo x-yadd paum arg1

fua @ Unosimo flegoveand maska @ Izdvajamo sign fleg

jz pozitivno @ Ako je sign fleg nula, skacemo @ na labelu "pozitivno"

mua arg1 @ Ako je sign fleg jedinica, @ to znaci da je add arg2 @ razlika negativna, pa vracamo @ jedno y aum pov_vr

mua #0jz ap @ Vracamo se iz funkcije

pozitivno:mua #0 @ Vracamo se na pocetak petljejz petlja

13. @ Program u asm2 koji racuna nzd koristeci potprogram koji racuna ostatak

.varx 20 @ Prvi brojy 8 @ Drugi brojnzd 0 @ Rezultat

@ Podaci za potprogramarg1 0 @ Prvi argumentarg2 0 @ Drugi argumentpov_vr 0 @ Povratna vrednostap 0 @ Adresa povratka

p 0 @ Privremena lokacija za -ymaska 4 @ Maska za sign fleg

@ Glavni program.prg

petlja0:mua x @ Inicijalizujemo prvi argument na xaum arg1mua y @ Inicijalizujemo drugi argument na yaum arg2mua povratak @ Inicijalizujemo adresu povratkaaum apmua #0jz funkcija @ Pozivamo funkciju

povratak:mua pov_vrjz kraj @ Ako je ostatak nula, izlazimo iz petlje

Page 20: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

mua yaum x @ x=ymua pov_vraum y @ y=ostatak

mua #0jz petlja0 @ Vracamo se na pocetak petlje

kraj:mua yaum nzd @ Smestamo pretposlednji ostatak na rezultathalt

funkcija:mua arg2 @ Racunamo -ycplaum p

petlja:mua arg1 @ U petlji, racunamo x-yadd paum arg1

fua @ Unosimo flegoveand maska @ Izdvajamo sign fleg

jz pozitivno @ Ako je sign fleg nula, skacemo @ na labelu "pozitivno"

mua arg1 @ Ako je sign fleg jedinica, @ to znaci da je add arg2 @ razlika negativna, pa vracamo @ jedno y aum pov_vr

mua #0jz ap @ Vracamo se iz funkcije

pozitivno:mua #0 @ Vracamo se na pocetak petljejz petlja

9. Čas

Napisati sledeće programe u asm2

14. Ojlerova funkcija (f(n) je jednaka broju brojeva k koji su manji od ni uzajamno prosti sa n), koristi nzd koja koristi količnik15. Da li je broj prost (koristi proizvod i količnik) (domaci)16. Suma elemenata niza17. Najveći element u nizu18. Obrtanje niza

Page 21: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

Rešenja

14. @ Program koji racuna Ojlerovu funkciju f(n) za dato n

.varn 9 @ Broj nk 0 @ Rezultat f(n)i 1 @ Brojac u petljigl_maska 4 @ Maska za sign fleg

@ Podaci za potprogram ostatako_arg1 0 @ Prvi argumento_arg2 0 @ Drugi argumento_pov_vr 0 @ Povratna vrednosto_ap 0 @ Adresa povratka

o_p 0 @ Privremena lokacija za -yo_maska 4 @ Maska za sign fleg

@ Podaci za potprogram nzdn_arg1 0 @ Prvi argumentn_arg2 0 @ Drugi argumentn_pov_vr 0 @ Povratna vrednostn_ap 0 @ Adresa povratka

@ Glavni program.prgpetlja1:mua n @ Racunamo i-ncpladd i

fua @ Izdvajamo sign flegand gl_maska

jz kraj_1 @ Ako je sign fleg nula, izkacemo iz petlje

mua i @ Ako je sign fleg jedan, to znaci da je jos uvekaum n_arg1 @ n > i, pa racunamo nzdmua naum n_arg2mua povaum n_apmua #0 @ Pozivamo funkciju nzdjz nzd

pov:mua n_pov_vr @ Proveravamo da li je nzd == 1xor #1jz prosti @ Ako jeste, brojevi su uzajamno prosti

mua #0 @ Ako nije, samo povecavamo brojac i za jedanbrojac

prosti:mua k @ Povecavamo broj uzajamno prostih za jedanadd #1aum k

Page 22: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

brojac:mua i @ Povecavamo brojac u petlji za jedanadd #1aum i

mua #0jz petlja1 @ Vracamo se na pocetak petlje

kraj_1:halt

nzd:petlja0:mua n_arg1 @ Inicijalizujemo prvi argument na xaum o_arg1mua n_arg2 @ Inicijalizujemo drugi argument na yaum o_arg2mua povratak @ Inicijalizujemo adresu povratkaaum o_apmua #0jz funkcija @ Pozivamo funkciju

povratak:mua o_pov_vrjz kraj @ Ako je ostatak nula, izlazimo iz petlje

mua n_arg2aum n_arg1 @ x=ymua o_pov_vraum n_arg2 @ y=ostatak

mua #0jz petlja0 @ Vracamo se na pocetak petlje

kraj:mua n_arg2aum n_pov_vr @ Smestamo pretposlednji ostatak na rezultatmua #0jz n_ap @ Vracamo se iz funkcije nzd

@ Funkcija koja racuna ostatakfunkcija:mua arg2 @ Racunamo -ycplaum p

petlja:mua arg1 @ U petlji, racunamo x-yadd paum arg1

fua @ Unosimo flegoveand maska @ Izdvajamo sign fleg

jz pozitivno @ Ako je sign fleg nula, skacemo @ na labelu "pozitivno"

mua arg1 @ Ako je sign fleg jedinica, @ to znaci da je

add arg2 @ razlika negativna, pa vracamo

Page 23: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

@ jedno y aum pov_vr

mua #0jz ap @ Vracamo se iz funkcije

pozitivno:mua #0 @ Vracamo se na pocetak petljejz petlja

16. @ Suma niza

.varniz 160 @ Adresa pocetka nizan 5 @ Duzina nizasuma 0 @ Suma niza

.data 1602 3 -1 6 5

.prgmua niz @ Smestamo adresu pocetka niza na pomocnuaum 190 @ lokaciju zbog indirektnog adresiranja

petlja:mua n @ Unosimo duzinu niza u Accjz kraj @ Proveravamo da li smo dosli do nule

@ Ako jesmo, izlazimo iz petlje

add #-1 @ Ako nismo, smanjujemo duzinu za jedanaum nmua suma @ Dodajemo tekuci clan niza na sumuadd [190]aum suma

mua 190 @ Prelazimo na sledeci clan u nizuadd #1aum 190

mua #0 @ Vracamo se na pocetak petljejz petlja

kraj:halt @ Zavrsavamo program

17. @ Maksimum niza

.varniz 160 @ Adresa pocetka nizan 5 @ Duzina nizamax 0 @ Maksimum nizamaska 4 @ Maska za sign fleg

.data 1602 3 -1 6 5

.prgmua niz @ Smestamo adresu pocetka niza na pomocnuaum 190 @ lokaciju zbog indirektnog adresiranja

Page 24: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

petlja:mua n @ Unosimo duzinu niza u Accjz kraj @ Proveravamo da li smo dosli do nule

@ Ako jesmo, izlazimo iz petlje

add #-1 @ Ako nismo, smanjujemo duzinu za jedanaum n

mua [190] @ RAcunamo da li je tekuci clan niza cpl @ veci od trenutnog maksimumaadd max

fuaand maska @ Izdvajamo sign fleg

jz stari @ Ako je sign fleg nula, ostaje@ stari maksimum

mua [190] @ Novi maksimum postaje tekuci clan nizaaum max

stari:mua 190 @ Prelazimo na sledeci clan u nizuadd #1aum 190

mua #0 @ Vracamo se na pocetak petljejz petlja

kraj:halt @ Zavrsavamo program

18. @ Obrtanje niza

.varniz 160 @ Adresa pocetka nizan 5 @ Duzina nizapom 0 @ Privremena lokacija

.data 1602 3 -1 6 5

.prgmua niz @ Smestamo adresu pocetka niza na pomocnuaum 190 @ lokaciju zbog indirektnog adresiranjaadd n @ Smastamo adresu kraja niza na sledecuadd #-1 @ lokacijuaum 191

mua n @ Izracunavamo ceo deo polovine duzine nizashr #1aum n

petlja:mua n @ Unosimo broj iteracija u Accjz kraj @ Proveravamo da li smo dosli do nule

@ Ako jesmo, izlazimo iz petlje

add #-1 @ Ako nismo, smanjujemo broj za jedanaum n

Page 25: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

mua [190] @ Smestamo clan sa pocetka nizaaum pom @ na pomocnu lokacijumua [191] @ Smestamo clan sa kraja nizaaum [190] @ na pocetak nizamua pom @ Smestamo broj sa pomocne lokacijeaum [191] @ na kraj niza

mua 190 @ Prelazimo na sledeci clan sa pocetka nizaadd #1aum 190

mua 191 @ Prelazimo na prethodni clan sa kraja nizaadd #-1aum 191

mua #0 @ Vracamo se na pocetak petljejz petlja

kraj:halt @ Zavrsavamo program

10. Čas

Napisati sledeće programe u asm2

19. Prvih n Fibonačijevih brojeva smestiti u niz20. Program koji iz niza brojeva izdvaja samo proste brojeve i smešta ih u drugi niz. (potprogram za proste brojeve) (domaci)21. Proizvod apsolutnih vrednosti brojeva u nizu (pomoću potprograma)22. Suma razlika |a[1] - a[0]| + |a[2] - a[1]| + ... + |a[n-1] - a[n-2]|23. Naći najveći broj u nizu koji je deljiv sa 3.24. Zbir dekadnih cifara datog broja.25. Najveća dekadna cifra u zapisu datog broja.

Rešenja

19. @ Prvih n Fibonacijevih brojeva smestiti u niz

.varf 160 @ Adresa pocetka nizan 6 @ Velicina niza

.prgmua f @ Smestamo adresu pocetka nizaaum 190 @ na pomocnu lokaciju

mua #1aum [190] @ *f=1

mua 190add #1aum 190 @ f++

Page 26: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

mua nadd #-1 @ n == 1?jz krajaum n @ n--

mua #1aum [190] @ *f = 1

mua 190add #1aum 190 @ f++

mua nadd #-1 @ n == 2?jz krajaum n @ n--

petlja:mua 190add #-1aum 191 @ f-1add #-1aum 192 @ f-2

mua [191]add [192]aum [190] @ *f = *(f-1) + *(f-2)

mua 190add #1aum 190 @ f++

mua nadd #-1 @ n-1 == 0?jz krajaum n @ n--mua #0jz petlja

kraj:halt

21. @ Proizvod apsolutnih vrednosti brojeva u nizu (pomocu potprograma)

.varniz 160 @ Adresa pocetka niza n 6 @ Velicina nizap 1 @ Proizvod

@ Promenljive za potprogram "abs"a_arg1 0a_pov_vr 0a_ap 0a_maska 4

@ Promenljive za potprogram "proizvod"p_arg1 0p_arg2 0p_pov_vr 0p_ap 0

Page 27: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

.data 1603 5 2 7 2 5

.prgmua niz @ Smestamo adresu niza na aum 190 @ na pomocnu lokaciju

petlja:mua n @ Ako je n nula, izlazimo iz petljejz krajadd #-1 @ Smanjujemo n za jedanaum n

mua [190]aum a_arg1 @ Tekuci element smestamo namua pov @ argument funkcijeaum a_apmua #0jz abs @ Pozivamo funkciju abs

pov:mua a_pov_vr @ Mnozimo povratnu vrednost funkcijeaum p_arg1 @ abs i tekuci proizvod pomocumua p @ funkcije proizvodaum p_arg2mua pov1aum p_apmua #0jz proizvod

pov1:mua p_pov_vr @ Izracunati proizvodaum p @ smestamo na tekuci proizvodmua #0jz petlja @ Vracamo se na pocetak petlje

kraj:halt @ Zavrsavamo program

abs:mua a_arg1 @ Unosimo brojfuaand a_maska @ Izdvajamo sign flegjz neneg

mua a_arg1 @ Ako je broj negativancpl @ komplementiramo gaaum a_arg1

neneg:mua a_arg1 @ Smestamo broj na povratnu vrednostaum a_pov_vrmua #0jz a_ap @ Vracamo se iz funkcije

proizvod:mua #0aum p_pov_vr

Page 28: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

petlja1:mua p_arg2 @ Ako smo dosli do krajajz p_ap @ vracamo se iz funkcijeadd #-1aum p_arg2 @ u suprotnom, smanjujemo brojac @ za jedanmua p_arg1 @ Dodajemo prvi argument na sumuadd p_pov_vraum p_pov_vr

mua #0jz petlja1 @ Vracamo se na pocetak petlje

22. @ Suma razlika |a[1] - a[0]| + |a[2] - a[1]| + ... + |a[n-1] - a[n-2]|

.varniz 160n 6suma 0pom 0

@ Promenljive za potprogram "abs"arg1 0pov_vr 0ap 0maska 4

.data 1602 4 -1 5 8 1

.prgmua niz @ Smestamo pocetak niza na pomocnu lokacijuaum 190

mua n @ Ako je n nula, zavrsavamo programjz krajadd #-1 @ Resavamo specijalan slucaj kada je n = 1jz jedanaum n

petlja:mua [190] @ U petlji, komplementiramo a[i-1]cplaum pom

mua 190 @ Prelazimo na a[i]add #1aum 190

jedan:mua [190] @ Sabiramo a[i] + (-a[i-1)add pomaum arg1 @ i to prosledjujemo kao argument funkciji absmua pov1aum apmua #0jz abs @ Pozivamo funkciju

pov1:mua pov_vr @ Izracunatu vrednosti dodajemo na sumu

Page 29: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

add sumaaum suma

mua n @ Smanjujemo n za jedanadd #-1jz kraj @ Ako je n nula, izlazimo iz petljeaum n

mua #0jz petlja @ U suprotnom se vracamo pa pocetak petlje

kraj:halt @ Zavrsavamo program

abs:mua arg1 @ Unosimo brojfuaand maska @ Izdvajamo sign flegjz neneg

mua arg1 @ Ako je broj negativancpl @ komplementiramo gaaum arg1

neneg:mua arg1 @ Smestamo broj na povratnu vrednostaum pov_vrmua #0jz ap @ Vracamo se iz funkcije

23. @ Naci najveci broj u nizu koji je deljiv sa 3. Niz je terminiran nulom.

.varniz 160max 0 @ Maksimumm_maska 4 @ Maska za sign fleg

@ Promenljive za potprogram "funkcija"arg1 0pov_vr 0ap 0

p 0maska 4delilac 3

.data 1604 6 7 9 0

.prgmua nizaum 190

petlja1:mua [190] @ Ako smo dosli do kraja niza,jz kraj @ izlazimo iz petlje

aum arg1 @ U suprotnom, tekuci clan prosledjujemo funkcijimua povratakaum ap

Page 30: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

mua #0jz funkcija @ Pozivamo funkciju

povratak:mua pov_vr @ Ako broj nije deljiv, maksimum ostaje starijz stari

mua [190] @ U suprotnom, poredimo broj sa tekucim maksimumomcpladd maxfuaand m_maskajz stari

mua [190] @ Ako je broj veci, on postaje maksimumaum max

stari:mua 190 @ U svakom slucaju, prelazimo na sledeciadd #1 @ clan u nizuaum 190

mua #0jz petlja1 @ Vracamo se na pocetak petlje

kraj:halt @ Kraj

funkcija:mua delilac @ Racunamo -ycplaum p

petlja:mua arg1 @ U petlji, racunamo x-yadd pjz nula @ Ako je razlika nula, broj je deljivaum arg1

fua @ Unosimo flegoveand maska @ Izdvajamo sign flegjz neneg @ Ako je sign fleg nula, skacemo @ na labelu "neneg"mua #0 @ Ako je razlika negativna, broj nije deljivaum pov_vr @ pa vracamo 0jz ap

neneg:mua #0 @ Vracamo se na pocetak petljejz petlja

nula:mua #1 @ Ako je broj deljiv, vracamo 1aum pov_vrmua #0jz ap

24. @ Naci najveci broj u nizu koji je deljiv sa 3. Niz je terminiran nulom.

.var

Page 31: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

niz 160max 0 @ Maksimumm_maska 4 @ Maska za sign fleg

@ Promenljive za potprogram "funkcija"arg1 0pov_vr 0ap 0

p 0maska 4delilac 3

.data 1604 6 7 9 0

.prgmua nizaum 190

petlja1:mua [190] @ Ako smo dosli do kraja niza,jz kraj @ izlazimo iz petlje

aum arg1 @ U suprotnom, tekuci clan prosledjujemo funkcijimua povratakaum apmua #0jz funkcija @ Pozivamo funkciju

povratak:mua pov_vr @ Ako broj nije deljiv, maksimum ostaje starijz stari

mua [190] @ U suprotnom, poredimo broj sa tekucim maksimumomcpladd maxfuaand m_maskajz stari

mua [190] @ Ako je broj veci, on postaje maksimumaum max

stari:mua 190 @ U svakom slucaju, prelazimo na sledeciadd #1 @ clan u nizuaum 190

mua #0jz petlja1 @ Vracamo se na pocetak petlje

kraj:halt @ Kraj

funkcija:mua delilac @ Racunamo -ycplaum p

Page 32: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

petlja:mua arg1 @ U petlji, racunamo x-yadd pjz nula @ Ako je razlika nula, broj je deljivaum arg1

fua @ Unosimo flegoveand maska @ Izdvajamo sign flegjz neneg @ Ako je sign fleg nula, skacemo @ na labelu "neneg"mua #0 @ Ako je razlika negativna, broj nije deljivaum pov_vr @ pa vracamo 0jz ap

neneg:mua #0 @ Vracamo se na pocetak petljejz petlja

nula:mua #1 @ Ako je broj deljiv, vracamo 1aum pov_vrmua #0jz ap

25. @ Zbir dekadnih cifara datog broja.

.varbroj 124 @ Brojpb 200 @ Pokazivac na brojmax 0 @ Maksimumm_maska 4 @ Maska za sign fleg

@ Podaci za potprogramarg1 0 @ Prvi argumentarg2 0 @ Drugi argumentpov_vr 0 @ Povratna vrednostap 0 @ Adresa povratka

p 0 @ Privremena lokacija za -ymaska 4 @ Maska za sign flegdelilac 10k 0

.prg

petlja1:mua broj @ Ukoliko je broj nula, izlazimo iz petljejz kraj

mua pb @ Funkciji prosledjujemo pokazivac na brojaum arg1mua povaum apmua #0jz funkcija @ Pozivamo funkciju

pov:mua pov_vr @ Proveravamo da li je tekuca cifracpl @ veca od maksimumaadd max

Page 33: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

fuaand m_maskajz stari

mua pov_vr @ Ako jeste, tekuca cifra postaje maksimumaum max

stari:mua #0jz petlja1 @ Vracamo se na pocetak petlje

kraj:halt @ Zavrsavamo program

funkcija:mua #0aum k

mua arg1aum 190

mua delilac @ Racunamo -ycplaum p

petlja:mua [190] @ U petlji racunamo x-yadd paum [190]

fua @ Unosimo flegoveand maska @ Izdvajamo sign fleg

jz neneg @ Ako je sign fleg nula, skacemo @ na labelu "pozitivno"

mua [190] @ Ako je sign fleg jedinica, @ to znaci da je add delilac @ razlika negativna, pa vracamo @ jedno y na ostatakaum pov_vr

mua k @ Kolicnik upisujemo na promenljivu brojaum [190]

mua #0jz ap @ Vracamo se iz funkcije

neneg:mua k @ Povecavamo kolicnik za jedanadd #1aum k

mua #0 @ Vracamo se na pocetak petljejz petlja

Page 34: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

11. Čas

Napisati sledeće programe u asm2

26. Da li je broj x savršen? (jednak zbiru svojih pravih delilaca, npr. 6 je takav)27. Faktorizacija broja: za dati broj x u niz A upisati njegove proste faktore, a u niz B odgovarajuće višestrukosti. Npr. 120 = 2^3 * 3 * 5, pa u niz A treba upisati 2, 3, 5, a u niz B redom 3, 1, 1 (višestrukosti faktora 2, 3, 5 respektivno). Koristiti potprogram za deljenje.28. Selection sort.29. Binarna pretraga uredjenog niza.

Rešenja

26. @ Da li je broj savrsen

@ suma=0;@ for(i=1; i<n; i++)@ {@ if(delilac(n,i))@ suma += i;@ }

.varn 6 @ Brojodgovor 0 @ Odgovorsuma 0 @ Sumai 1 @ Brojac

@ Promenljive za potprogramarg1 0arg2 0pov_vr 0ap 0maska 4pom 0

.prg

petlja:mua ncpladd i @ Proveravamo da li je i-n<0 ?fuaand maskajz kraj @ Ako nije, izlazimo iz petlje

mua n @ Ako jeste, pozivamo funkcijuaum arg1 @ delilac(n,i)mua iaum arg2mua povratakaum apmua #0jz delilac

Page 35: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

povratak:mua pov_vr @ Ako i deli n, xor #1 @ prelazimo na labelujz deli @ "deli"

mua #0 @ Ako ne deli, trebajz brojac @ da povecamo brojac

deli:mua suma @ Dodajemo i na sumuadd iaum suma

brojac:mua i @ Povecavamo brojacadd #1 @ za jedanaum i

mua #0 @ Vracamo se na pocetakjz petlja @ petlje

kraj:mua suma @ Na kraju, poredimoxor n @ broj sa sumomjz jeste @ Ako su jednaki...halt @ Ako nisu jednaki

@ odgovor je nula

jeste:mua #1 @ ...odgovor je jedanaum odgovorhalt

delilac:mua arg2cpl @ Smestamo negativni aum pom @ umanjilac na pomocnu lok.

petlja1:mua arg1add pom @ Racunamo n-ijz nula @ Ako je razlika nula,aum arg1 @ i deli n

fua @ Ako nije,and maska @ izdvajamo sign flegjz neneg

mua #0 @ Ako je razlika negativnaaum pov_vr @ Odgovor je nulajz ap @ Vracamo se iz funkcije

neneg:mua #0 @ Ako je razlika jz petlja1 @ nenegativna, vracamo

@ se na pocetaknula:mua #1 @ Broj i deli broj naum pov_vr @ pa je povratna vrednost

Page 36: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

mua #0 @ jedanjz ap @ Vracamo se iz funkcije

27. @ Faktorizacija broja

@ v=0;@ for(i=2; i<=broj; i++)@ {@ v=0;@ while(deli(broj, i)){@ broj /= i;@ v++;@ } @ if(v!=0){@ *a=i;@ *b=v;@ a++;@ b++;@ }@ }

.varbroj 6 @ Brojpb 200 @ Pokazivac na broja 160 @ Niz ab 170 @ Niz bv 0 @ Visestrukosti 2 @ Brojac

@ Promenljive za potprogramarg1 0arg2 0pov_vr 0ap 0maska 4pom 0brojPom 0 @ Pomocna promenljiva za brojk 0 @ Kolicnik

.prgmua aaum 190 @ Smestamo a i b na pomocnemua b @ lokacijeaum 191

for:mua icpladd broj @ Proveravamo da li je

@ broj-i>=0jz dalje

halt @ Kraj

dalje:mua #0aum v

while:

Page 37: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

mua pb @ U while petlji pozivamoaum arg1 @ funkciju deli(&broj,i)mua iaum arg2mua povratakaum apmua #0jz deli

povratak:mua pov_vr @ Ako i ne deli brojjz izlazak @ izlazimo iz while petlje

mua v @ Ako ga deli, onda @ povecavamo visestrukost

add #1aum v

mua #0 @ Vracamo se na pocetakjz while @ petlje

izlazak:mua v @ Ako je v nula, samojz brojac @ povecavamo brojac

mua iaum [190] @ *a = imua vaum [191] @ *b = v

mua 190add #1aum 190 @ a++mua 191add #1aum 191 @ b++

brojac:mua iadd #1aum i @ Povecavamo projacmua #0jz for @ Vracamo se na pocetak

@ petlje

deli:mua arg1 @ Smestamo pokazivac na aum 192 @ pomocnu lokacijumua [192] @ Smestamo broj na aum brojPom @ pomocnu lokacijumua #0 @ Kolicnik inicijalizujemoaum k @ na nulu

mua arg2cpl @ Smestamo negativni aum pom @ umanjilac na pomocnu lok.

petlja1:mua brojPom

Page 38: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

add pom @ Racunamo n-ijz nula @ Ako je razlika nula,aum brojPom @ i deli n

fua @ Ako nije,and maska @ izdvajamo sign flegjz neneg

mua #0 @ Ako je razlika negativnaaum pov_vr @ Odgovor je nulajz ap @ Vracamo se iz funkcije

neneg:mua k @ Povecavamo kolicnikadd #1aum k

mua #0 @ Ako je razlika jz petlja1 @ nenegativna, vracamo

@ se na pocetaknula:mua #1 @ Broj i deli broj naum pov_vr @ pa je povratna vrednostmua k @ jedanaum [192] @ Novi kolicnik prepisujemo

@ na brojmua #0 jz ap @ Vracamo se iz funkcije

28. @ Selecion sort

@ for (i=0; i<n-1; i++)@ { @ k=i;@ x=a[i];@ for (j=i+1; j<n; j++)@ if (a[j] < x) @ { @ k=j; @ x=a[j];@ }@ a[k]=a[i];@ a[i]=x;@ }

.vara 160n 6i 0j 0k 0x 0maska 4

.prgmua aaum 190

for:mua n

Page 39: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

cpladd iadd #1 @ Proveravamo da li je i-n+1<0?fuaand maskajz kraj @ Ako nije, izlazimo iz petlje

mua i @ Ako jesteaum k @ k=imua [190]aum x @ x=a[i]

mua iaum j @ j=i

for1:mua jadd #1aum j @ j++add aaum 191 @ a+j -> 191

mua ncpladd j @ Proveravamo da li je j-n<0?fuaand maskajz zamena @ Ako nije, izlazimo iz petlje

mua x @ Ako jestecpladd [191] @ Proveravamo da li je a[j]-x<0?fuaand maskajz for1 @ Ako nije, vracamo se na pocetak petlje

mua j @ Ako jesteaum k @ k=jmua [191]aum x @ x=a[k]

mua #0jz for1 @ Vracamo se na pocetak petlje

zamena:mua kadd aaum 192 @ a+k -> 192

mua [190]aum [192] @ a[k] = a[i]mua xaum [190] @ a[i] = x

mua iadd #1aum i @ i++mua #0jz for @ Vracamo se na pocetak petlje

Page 40: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

kraj:halt @ Kraj

29. @ Binarna pretraga uredjenog niza

@ levo=0;@ desno=n-1;@ while (levo <= desno)@ {@ sredina = (desno-levo)/2+levo;@ if (niz[sredina] == broj)@ return sredina;@ if (broj < niz[sredina])@ desno = sredina-1;@ else@ levo = sredina+1;@ }@ return -1;

.varniz 160 @ Adresa nizan 6 @ Duzina nizabroj 4 @ Broj koji trazimoindeks 0 @ Indeks brojalevo 0desno 0sredina 0maska 4

.data 1602 4 5 7 10 12

.prgmua nadd #-1aum desno @ desno = n-1

while:mua levocpladd desno @ Proveravamo da li jefua @ desno-levo >= 0 and maskajz dalje @ Ako jeste, nastavljamo dalje

mua #-1 @ Ako nije, broj nije pronadjenaum indekshalt

dalje:mua levocpladd desnoshr #1add levo @ Izracunavamo indeks sredisnjeg clanaaum sredina @ sredina = (desno-levo)/2 + levo

add nizaum 191mua [191]

Page 41: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

cpladd broj @ Izracunavamo broj - niz[sredina]jz jednaki @ Ako su jednaki, pronasli smo broj

fuaand maskajz brojVeci @ Ako je broj veci...

mua sredina @ Ako je niz[sredina] veciadd #-1 @ pretrazujemo levu polovinu nizaaum desnomua #0jz while

brojVeci:mua sredina @ Ako je broj veciadd #1 @ pretrazujemo desnu polovinu nizaaum levomua #0jz while

jednaki:mua sredina @ Broj je pronadjen pa njegov indeksaum indeks @ smestamo u rezultathalt

12. ČasLogičko kolo SIM procesora i demonstracija njegovog rada.

Zadaci za vežbu

1. Napisati program u dvoprolaznom asembleru SIM procesora koji izračunava n-ti član niza koji je dat rekurentnom formulom A0 = 1, An = 4*An-1+3, n>=1.

2. Napisati potprogram u dvoprolaznom asembleru SIM procesora koji za ceo broj x izračunava vrednost f(x) = min{24, x2}. Napisati zatim program koji od niza X dužine n formira novi niz Y koji se sastoji od vrednosti funkcije f(x) primenjene na sve članove niza X čija je vrednost parna. Neka je niz X={2, 3, 6, 1, -7, 8, -4, 0}. Posle pokretanja programa niz Y treba da ima članove Y={4, 24, 24, 16, 0}.

3. Napisati potprogram u dvoprolaznom asembleru SIM procesora koji za dati niz A različitih elemenata i broj c, proverava da li niz A sadrži član koji ima vrednost c. Ukoliko ne sadrži, potprogram vraća negativnu vrednosti, dok u suprotnom vraća poziciju tog člana. Adresa niza A i broj c su dati kao prvi i drugi argument potprograma. Napisati zatim program koji na osnovu dva niza A i B, menja niz C na sledeći način: za svaki element C[i] niza C, ukoliko postoji element A[j] niza A takav da je A[j] = C[i], element C[i] se zamenjuje sa B[j]. U suprotnom, C[i] ostaje nepromenjen. Pretpostaviti da su svi elementi niza A različiti, da su nizovi A i B jednakih dužina, kao i da su sva tri niza terminirana nulom. UPUTSVO: koristiti funkciju iz prvog dela zadatka za proveru da li se element C[i] nalazi u nizu A. Primer, ako su nizovi A: 42, 35, 90, 21; B: 84, 7, 30, 22; i C: 32, 35, 42, 9, 12, 0 , po završetku

Page 42: Uvod u arhitekturu računara - poincare.matf.bg.ac.rspoincare.matf.bg.ac.rs/~ivana/courses/uar/1415/uar_vezbe_1415.pdf · Multiplekser 4-1, demultiplekser 1-4. 2. Zadatak Dekoder

programa niz C treba da izgleda ovako 32, 7, 84, 9, 12, 0.

4. Napisati program u dvoprolaznom asembleru SIM procesora koji računa niz Sn po sledećoj rekurentnoj formuli: S1 = a, S2 = b i Sn = 32Sn-1 – Sn-2 (a i b su celobrojni parametri i predstavljaju ulazne promenljive).

5. Napisati potprogram u dvoprolaznom asembleru SIM procesora koji proverava da li je neka reč palindrom. Palindrom je reč koja se isto čita od početka kao sa kraja. Napisati zatim program koji koristeći prethodni potprogram od niza dužine n koji se sastoji od početnih adresa nekih reči idvaja u novi niz početne adrese onih reči koje su palindromi, gde je n dato u memoriji.

6. Napisati program u dvoprolaznom asembleru SIM procesora koji članove datog niza jednobajtnih brojeva dužine n ciklično pomera za m mesta ka višim lokacijama, tako da niz na kraju pomeranja ostane na svom mestu, gde je m nenegativan broj koji je dat u memoriji i koji nije veći od n-1. Na primer, ukoliko je dat niz 3 5 1 0 2 i broj m jednak tri, nakon izvršavanja programa niz bi trebalo da bude 1 0 2 5 3.

7. Napisati potprogram u dvoprolaznom asembleru SIM procesora koji za prosleđena dva pozitivna broja vraća vrednost 1 ukoliko je prvi broj deljiv drugim brojem, u suprotnom vraća vrednost 0. Napisati zatim program koji iz datog niza izdvaja u drugi niz brojeve koji su deljivi sa sedam koristeći prethodni potprogram.

8. Napisati program u dvoprolaznom asembleru SIM procesora koji za nenegativni celobrojni parametar n izračunava vrednost 20 ∙ 0 ∙ 1 + 21 ∙ 1 ∙ 2 + 22 ∙ 2 ∙ 3 + ... + 2n – 1 ∙ (n – 1) ∙ n + 2n ∙ n ∙ (n + 1).

9. Napisati potprogram u dvoprolaznom asembleru koji za tri pozitivna celobrojna argumenta x, y i k izračunava proizvod 2k(x – 1)(y – 1). Napisati zatim program koji od dva niza X i Y prirodnih brojeva dužine n formira niz Z, tako da je Zi = 2k(Xi – 1)(Yi – 1), pri čemu je k = 1 ako je Xi + Yi neparan broj, a inače je k = 0.

10. Napisati program u dvoprolaznom asembleru SIM procesora, koji za cele brojeve n, a i b izračunava (–2)n ∙ (31a – b – 4).

11. Napisati potprogram u dvoprolaznom asembleru SIM procesora koji za ceo broj x izračunava vrednost f(x) = max{78, x2}. Napisati zatim program koji od niza X dužine n formira novi niz Y koji se sastoji od vrednosti funkcije f(x) primenjene na sve neparne članove niza X.

12. Napisati program u dvoprolaznom asembleru SIM procesora koji za date vrednosti kateta x i y izračunava ceo deo hipotenuze z. Formula za izračunavanje hipotenuze z kada su zadate katete x i y glasi z = sqrt(x2 + y2). Za računanje celog dela od z treba iskoristiti činjenicu da je to najveći broj čiji kvadrat nije veći od z2.