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.
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 √
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č.
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.
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.
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
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.
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.
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.
3. ZadatakSinhroni brojač 0-9.
4. ZadatakSinhroni brojač 0-5.
5. ZadatakSinhroni brojač 0-59.
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
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
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
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
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
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
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
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:
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
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
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
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
@ 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
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
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++
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
.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
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
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
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
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
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
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
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
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
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:
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
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
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
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]
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
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.