Professional Documents
Culture Documents
Uar Vezbe Sve PDF
Uar Vezbe Sve PDF
Zadaci sa vezbi
Ivana Tanasijevic, ivana@math.rs
May 21, 2013
Digitalna logika
1
Cas
1. Neka je A prekidac koji ukljucuje svetlo i neka je B prekidac koji menja vrednost za A.
Odnosno, ako je svetlo ukljuceno, iskljucuje ga, a ako je iskljuceno, ukljucuje ga. C ima ulogu
da razdvaja prekidace A i B. Ako je ukljucen prekidac C, onda B nema uticaja na A. Napisati
logicku funkciju na osnovu prethodno opisanog, kojom je prikazano da li je svetlo ukljuceno
ili ne u zavisnosi od prekidaca A, B i C, a zatim napraviti odgovarajuce logicko kolo koristeci
kapije AND, OR i NOT. Nakon toga napraviti novo logicko na osnovu opisa situacije, uz
mogu cnost koriscenja i drugih kapija.
Resenje: Ako je C ukljucen, onda je A. Ako C nije ukljucen, onda je A ako nije B, u suprotnom
B menja A.
F = CA + C(BA + BA)
2. Neka je su A, B i C prekidaci takvi da je protok moguc ako je ukljucen prekidac A ili oba
prekidaca B i C (nije ekskluzivno ili), s tim sto ako su B i C u istom stanju, mogu da
nadjacaju uticaj prekidaca A, odnosno ako su oba iskljucena, protok nije moguc. Napisati
logicku funkciju koja daje indikaciju da li je protok moguc, na osnovu prethodno opisanog, a
zatim napraviti odgovarajuce logicko kolo.
Resenje: Ako su B i C ukljuceni, onda u svakom slucaju ima protoka. Protoka jos ima i kada
je A ukljuceno, a B i C razliciti.
F = BC + A(BC + BC)
moze i
F = BC + A(B + C)
3. Neka su A, B, C i D biti 4-bitnog binarnog broja, pocevsi od bita najmanje tezine ka bitu
najvece tezine. Napisati logicku funkciju koja daje indikaciju da li je broj na ulazu deljiv sa
3. Uociti zavisnost vrednosti parova susednih bita (prvi i poslednji su takodje susedni) i na
osnovu toga formirati logicku funkciju. Napraviti logicko kolo na osnovu dobijene funkcije.
Resenje: Ako posmatramo parove susednih, zakljucujemo da funkcija ima vrednost 1 akko su
bitovi parova susednih (AB i CD, ili AD i CB) jednaki medju sobom.
F = (AB + AB)(CD + CD) + (AD + AD)(CB + CB)
uraditi i
F = (A B)(C D) + (A D)(B C)
1
2
Cas
1. Neka su tri trase aviona a, b, c i mesto gde se trase susrecu kriticno mesto P. Neka su A, B i C
tacke na kriticnom mestu za tri trase aviona a, b i c, redom. Trase se na kriticnom mestu ne
presecaju, vec idu paralelno, ali treba voditi racuna o smeru prolaska aviona u istom trenutku
na sve tri trase. D je indikator da su meteoroloski uslovi nepovoljni. Smerovi na trasama u
datim tackama su 0 i 1, a pravila koja treba da se postuju su sledeca: a) Sredisnji avion ne
sme uporedo da leti u istom smeru sa oba aviona, ali moze sa jednim; b) Ako su vremenski
uslovi nepovoljni, sredisnji avion ne sme uporedo da leti u istom smeru ni sa jednim avionom.
Napisati logicku funkciju od A, B, C i D, tako da ima vrednost 1 ako je kombinacija smerova
aviona na trasama dozvoljena, u suprotnom ima vrednost 0. Napisati logicko kolo na osnovu
dobijene funkcije.
Resenje: Dozvoljeni rasporedi bez obzira na vreme su ABC +ABC. Dozvoljeni rasporedi
samo kada je vreme povoljno su: ABC + ABC + ABC + ABC.
Dakle,
F = ABC + ABC + D(ABC + ABC + ABC + ABC)
= ABC + ABC + D(AC + AC)
.
2
3
Cas
1. Minimizacija funkcija sedmo-segmentnog indikatora metodama: Karnoove mape i Kvin Mekklaski.
4
Cas
1. Dekoderi, primer 2-na-4 dekodera.
2. Multiplekseri, primer 2-na-1 i 4-na-1 multipleksera.
4
3. Uvezivanje dva 4-na-1 i jednog 2-na-1 multipleksera kako bi se dobio 8-na-1 multiplekser.
4. Demultiplekser, samo primer 1-na-4 demultipleksera.
5. Konstrukcija 8-bitne shift-left operacije uz pomoc tri 2-na-1 multipleksera sa 8-bitnom sirinom
ulaza.
6. Formirati 16-na-1 multiplekser koriscenjem ponudjenih komponenti.
7. Formirati shift-right operacije: (a) za 4-bitni operand, (b) za 8-bitni operand
5
Cas
1. Reze: SR, D, JK, T.
2. Flip flopovi: D, JK.
3. Pomeracki registar sa serijskim ulazom i paralelnim izlazom.
4. Modifikovati prethodni registar tako da omoguci paralelno ucitavanje.
5. Formiranje 16-bitnog pomerackog registra od 4 4-bitna.
6
Cas
1. 4-bitni talasasti brojac izradjen pomocu JK flip-flop-ova.
2. 4-bit sinhroni brojac 0-15 izradjen pomocu JK flip-flop-ova.
3. Sinhroni decimalni brojac. Promene u odnosu na binarni: dodatna logika za vracanje na 0.
4. Sinhroni brojac 0-5.
5. Kontrolni ulaz potreban za ulancavanje brojaca.
6. Kompletan brojac sekundi (0-59) pomocu dva brojaca.
Za vezbu:
7. Brojac za sate (0-11).
8. Dekoder za cifre sati.
9. Konstruisati kompletan digitalni casovnik pomocu datih komponenti, napraviti prikaz preko
6 7-segmentnih prikaza.
10. Napraviti kolo ciji izlazi pri svakoj uzlaznoj ivici takta casovnika formiraju 3-bitni Grejov
kod. Grejov kod je niz takav da se svaki sledeci element razlikuje od prethodnog u tacno
jednom bitu. Primer Grejovog koda: 000 001 011 010 110 111 101 100 000.
7
Cas
1. Konstruisati sledece sinhrone brojace koristeci JK flip-flopove:
0-1-2-3-4-8-9-10-11-12-0
0-1-2-4-5-6-8-9-10-12-13-14-0
0-7-6-5-4-3-2-1-0
2. Koristeci cetiri D flip-flopa napraviti cetvorobitni pomeracki registar koji vrsi pomeranje
udesno. Implementirati i brojac koji ce brojati koliko se puta na izlazu pojavila sekvenca
0110.
3. Nacrtati logicko kolo koje za cetvorobitni operand x i jednobitni kod operacije y implementira
pomeracki registar koji radi sledece:
Ako je kod operacije 0, ciklicki siftuje operand x za jedno mesto u levo
Ako je kod operacije 1, aritmeticki siftuje operand x za jedno mesto u desno
4. Nacrtati logicko kolo koje za cetvorobitni operand x i jednobitni kod operacije y implementira
pomeracki registar koji radi sledece:
Ako je kod operacije 0, siftuje operand x za jedno mesto u levo
Ako je kod operacije 1, ciklicki siftuje operand x za jedno mesto u desno
5. Konstruisati jedinicu za ciklicno siftovanje u levo prvog operanda od 4 bita za broj bita
odredjenim drugim operandom od 2 bita. Napraviti dekoder za cifre izlaza.
6. Napisati tablicu za poluoduzimac, a zatim za puni oduzimac. Ulazi su puni oduzimac su
jednobitni umanjenik A, umanjilac B i prethodna pozajmica P in, dok su izlazi razlika R i
tekuca pozajmica P out. Napraviti logicko kolo za oduzimanje dva dvobitna broja. Na izlazu
prikazati rezultat i prenos.
7. Napraviti logicko kolo koje za 4-bitni broj na ulazu racuna ostatak pri deljenju sa 3. Izlaz
treba da se sastoji od jednog 2-bitnog broja.
8. Kako bi se moglo napraviti logicko kolo koje odgovara funkciji f : {0, 1}3 {0, 1} koristeci
samo jedan multilpeksor 4-na-1?
10
Ma
sinski jezik i asembler
8
Cas
Napisati sledece u SIM-u:
1. Program koji sabira dva broja.
2. Program koji vrsi oduzimanje drugog broja od prvog.
3. Program koji sabira dva dvobajtna broja.
4. Program koji vrsi bitsku negaciju.
5. Program koji realizuje bitsku disjunkciju prema formuli A | B == ~(~A & ~B).
6. Program koji demonstrira bezuslovni skok. Na pocetku rada izvrsava se skok na dogovorenu
lokaciju npr. A0. Tamo se jednostavno upisuje broj npr. 0x01 na dogovorenu lokaciju
rezultata.
7. Program koji poredi vrednosti dve memorijske lokacije i upisuje na dogovorenu lokaciju 0x01
ako su njihovi sadrzaji jednaki, a 0x00 ako nisu. Brojevi su nasumice izabrani.
8. Program koji testira pojavu prekoracenja pri oznacenom sabiranju. Na dogovorenu adresu se
upisuje overflow flag.
9. Program koji poredi vrednosti dve memorijske lokacije i upisuje na dogovorenu lokaciju 0x01
ako je prvi operand manji od drugog, a 0x10 ako je prvi veci ili jednak drugom.
- Resenja:
1.
@ Program koji sabira dva broja
@ Podaci
FD 00
FE 11
FF 07
@ Program
00 00FF
02 20FE
04 10FD
06 80
2.
@ Program koji vrsi oduzimanje drugog broja od prvog
@ Podaci
FD 00
FE 11
FF 07
@ Program
00 00FF
02 30
03 20FE
05 10FD
07 80
@
@
@
@
@
@
@
@
@
3.
@ Program koji sabira dva dvobajtna broja
@ Podaci
FA 0000
FC 20F1
FE 10F2
@ Program
00 00FD
02 20FF
04 10FB
12
06 00FC
08 A0FE
0A 10FA
0C 80
@
@
@
@
@
4.
@ Program koji vrsi bitsku negaciju
@ Podaci
FE 00
FF 1A
@ Program
00 00FF
02 51FF
@
@
@
@
@
@
04 10FE
06 80
5.
@ Program koji realizuje bitsku disjunkciju prema formuli
@ A | B == ~(~A & ~B)
@ Podaci
FD 00
FE 55
FF AA
@ Program
00 00FE
02 51FF
04 10FD
06 00FF
@
@
@
@
@
08 51FF
0A 40FD
0C 51FF
0E 10FD
10 80
@
@
@
@
@
@
... i negiramo ga
Vrsimo konjunkciju sa medjurezultatom koji smo privremeno
smestili na FD
Negiramo celu konjunkciju
Smestamo rezultat na dogovorenu lokaciju
Zaustavljamo izvrsavanje programa
6.
@ Program koji demonstrira bezuslovni skok. Na pocetku rada izvrsava
@ se skok na dogovorenu lokaciju, npr. A0. Tamo se jednostavno upisuje
@ broj npr. 0x01 u dogovorenu lokaciju rezultata.
@ Podaci
FF 00
@ Program
00 0100
02 91A0
A0 0101
A2 10FF
A4 80
@
@
@
@
@
@
@
@
7.
@ Program koji poredi vrednosti dve memorijske lokacije i upisuje na
@ dogovorenu lokaciju 0x01 ako su njihovi sadrzaji jednaki, a 0x00 ako
@ nisu. Brojevi su nasumice izabrani.
@ Podaci
FD 00
FE A1
FF A2
@ Program
14
00 00FE
02 50FF
04 9150
06 0100
08 10FD
0A 80
50 0101
52 10FD
54 80
@
@
@
@
@
@
@
@
@
@
@
@
@
@
8.
@ Program koji testira pojavu prekoracenja pri oznacenom sabiranju.
@ Na dogovorenu adresu upisujemo overflow flag
@ Podaci
FC
FD
FE
FF
5F
77
00
00
@
@
@
@
Prvi sabirak
Drugi sabirak
Inicijalizujemo lokaciju za overflow signal
Inicijalizujemo lokaciju za zbir
@ Program
00
02
04
06
07
00FC
20FD
10FF
B0
7103
09 10FE
0B 80
@
@
@
@
Smestamo
Pomeramo
najmanje
Smestamo
flag-ove u akumulator
bitove 3 bita u desno, tako da V bude na mestu
tezine
signal za prekoracenje na dogovorenu lokaciju
9.
@ Program koji poredi vrednosti dve memorijske lokacije i upisuje na
15
@ Program
00
02
03
05
06
08
00FF
30
20FE
B0
4104
9130
0A 0101
0C 10FD
0E 80
@
@
@
@
@
@
@
30 0110
32 10FD
34 80
9
Cas
Napisati programe u SIM-u koji racunaju:
1. Vrednost aritmetickog izraza 8*(4*a-2*b+1)+c/4. Pretpostaviti da su vrednosti promenljivih
date u memoriji. Deljenje je celobrojno.
2. Zbir prvih n prirodnih brojeva.
3. Sumu prvih n stepena dvojke
Pn
i
i=1 2 .
1.
@ Program koji izracunava vrednost aritmetickog
@ izraza 8*(4*a-2*b+1)+c/4. Pretpostaviti da su vrednosti
@ promenljivih date u memoriji. Deljenje je celobrojno.
FA
FB
FC
FD
02
04
08
00
@ Program
00
02
04
05
07
09
0B
0D
0F
11
13
15
17
19
1B
00FB
6101
30
2101
10FD
00FA
6102
20FD
6103
10FD
00FC
7102
20FD
10FD
80
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
Uzimamo b
Mnozimo sa 2 i dobijamo 2b
Komplementiramo, sto daje -2b
Dodajemo 1, sto daje -2b+1
To privremeno cuvamo na FD
Uzimamo a
Mnozimo sa 4 i dobijamo 4a
Dodajemo -2b+1 i dobijamo 4a-2b+1
Mnozimo to sa 8
i cuvamo na FD
Uzmimamo c
Delimo sa 4 i dobijamo c/4
Dodajemo 8(4a-2b+1)
Rezultat smestamo na FD
Kraj
2.
@ Program izracunava zbir prvih n prirodnih brojeva.
@
@
@
@
@
@
@
@
@
C implementacija
int n=5,s=0;
while(n!=0)
{
s+=n;
n--;
}
17
@
@ Nasa implementacija kopira datu iz C-a.
@ Podaci
FE 05
FF 00
@ n=5
@ s=0
@ Program
00 00FE @
02 9150 @
@
04 20FF @
06 10FF @
08 00FE @
0A 21FF @
0C 10FE @
0E 0100 @
10 9100 @
50 80
Uzimamo n
Ako je n==0 (nije ispunjen uslov petlje n!=0),
onda se izlazi iz petlje
n je vec u akumulatoru pa na njega dodajemo s
Smestamo s u memoriju cime realizujemo liniju s+=n
Uzimamo n
Umanjujemo ga za 1...
...i smestamo u memoriju cime realizujemo liniju n-Smestamo 0 u akumulator kako bi skok bio bezuslovan
Skacemo na pocetak petlje da ponovo testiramo uslov
@ Kraj
3.
@ Suma prvih n stepena dvojke \sum_{i=1}^{n} 2^{i}.
FE 03
FF 00
@ n
@ Suma
@ Program
00
02
04
06
08
0A
0C
0E
10
00FE
9150
0101
60FE
20FF
10FF
00FE
21FF
10FE
@
@
@
@
@
@ Umanjujemo brojac
18
12 0100
14 9100
50 80
@ Kraj
4.
@ Suma elemenata niza.
A0
A1
A2
A3
A4
01
02
03
04
05
FD A0
FE 05
FF 00
@ Program
00
02
04
06
08
0A
0C
0E
10
12
14
16
18
00FE
9150
00FF
22FD
10FF
00FD
2101
10FD
00FE
21FF
10FE
0100
9100
50 80
@ Smanjujemo brojac
@ Skok na pocetak
@ Kraj
19
10
Cas
Napisati sledece u ASM-u:
1. Program koji racuna n-ti neparan broj po formuli 2*n - 1
2. Program koji racuna apsolutnu vrednost broja
3. Program koji racuna proizvod dva pozitivna broja na sledeci nacin m*n = n + n + ... + n
4. Program koji racuna n-ti Fibonacijev broj gde su fibonacijevi brojevi 1, 1, 2, 3, 5, ... sa
indeksima koji pocinju od jedan
- Resenja:
1.
@ Program racuna n-ti neparan broj po
@ formuli 2*n - 1
.data 160
4
@ n
0
@ rezultat
.prg 0
mua 160
shl #1
add #-1
aum 161
halt
@
@
@
@
@
Smestamo n u akumulator
Mnozimo n sa dva
Sabiramo sa -1
Smestamo rezultat u memoriju
Kraj
2.
@ Program koji racuna apsolutnu vrednost broja
.data 160
-5
@ x
0
@ Rezultat
.prg 0
mua 160
shr #7
jz #20
@ Smestamo x u akumulator
@ Popunjavamo akumulator znakom
@ Ako je pozitivan prelazimo na 20
20
mua 160
cpl
aum 161
halt
.prg 20
mua 160
aum 161
halt
@ Smestamo x u akumulator
@ Menjamo mu znak
@ Smestamo ga na rezultat
@ Smestamo x u akumulator
@ Smestamo ga na rezultat
@ Kraj
3.
@ Program racuna proizvod dva pozitivna broja
@ na sledeci nacin m*n = n + n + ... + n
.data 160
6
@ n
2
@ m
0
@ Rezultat
.prg 0
mua 161
jz #20
add #-1
aum 161
aum 160
add 162
aum 162
mua #0
jz #0
.prg 20
halt
@
@
@
@
@
@
@
@
Smestamo m u akumulator
Ako je nula izadji iz petlje
Smanjujemo m za jedan
Vracamo ga u memoriju
Smestamo n u akumulator
Sabiramo ga sa rezultatom
Smestamo na rezultat
Skacemo na pocetak petlje
@ Kraj
4.
@ Program racuna n-ti Fibonacijev
@ broj gde su fibonacijevi brojevi
@ 1, 1, 2, 3, 5, ...
@ sa indeksima koji pocinju od jedan
.data 200
21
7
1
1
0
.prg 0
mua 200
add #-1
jz #50
add #-1
jz #50
aum 200
mua 200
jz #50
add #-1
aum 200
mua 201
aum 203
mua 202
aum 201
add 203
aum 202
mua #0
jz #12
.prg 50
halt
@
@
@
@
@ Ubacimo n u akumulator
@ Proverimo da li je n==1
@ Provera da li je n==2
@ Smestamo n-2 na n
@ Ubacimo n u akumulator
@ Ako je nula iskacemo iz petlje
@
@
@
@
@
@
@
Smanjimo n za jedan
Uzmemo i-ti broj
Smestimo na pomocnu lokaciju
Uzmemo i+1 broj
Smestimo ga na i-ti broj
Saberemo i-ti i i+1-vi
Smestimo na i+1-vi
@ Kraj
11
Cas
Napisati sledece u ASM-u:
1. Program koji racuna kolicnik i ostatak pri deljenju dva broja.
2. Program koji racuna duzinu niza karaktera. Argument je adresa koda prvog karaktera.
3. Program koji poredi dva niza cije su adrese date na lokacijama 160 i 161 i pri tome vraca 0
ako su oba jednaka, manje od nule ako je prvi leksikografski manji od drugog, vece od nule
ako je prvi leksikografski veci od drugog.
22
- Resenja:
1.
@ Program koji racuna duzinu niza karaktera. Argument je
@ adresa koda prvog karaktera.
@ Niz kodova karaktera
.data 160
25
35
61
36
0
.data 192
160
0
.prg 0
mua [192]
jz #50
mua 192
add #1
aum 192
mua 193
add #1
aum 193
mua #0
jz #0
@
@
@
@
@
@
@
@
@
@
.prg 50
halt
@ Kraj programa
2.
@ Program racuna kolicnik i ostatak
@ pri deljenju dva broja
.data 160
15
@ Deljenik i ostatak
4
@ Delilac
23
0
0
.prg 0
mua 161
cpl
aum 162 @ Komplementiramo delilac, da bismo umesto
@ oduzimanja vrsili sabiranje
mua 160
add 162
aum 160
fua
and #4
jz #50
mua 160
add 161
aum 160
halt
.prg 50
mua 163
add #1
aum 163
mua #0
jz #5
@
@
@
@
@
@
@
@
@
Uzimamo deljenik
Oduzimamo delilac
Vracamo ga
Uzimamo flag-ove
Proveravamo da li je rezultat negativan
Ako nije skacemo na 50
Ako jeste negativan, uzimamo deljenik
Dodajemo delilac da bismo vratili znak
na pozitivan
@ Uzimamo rezultat
@ Posto je oduzimanje bilu uspesno, povecavamo kolicnik
@ za jedan
@ Skacemo na pocetak petlje
3.
@ Program koji poredi dva niza cije su adrese date na lokacijama
@ 160 i 161 i pri tome vraca 0 ako su jednaka, <0 ako je prvi
@ leksikografski manji od drugog, >0 ako je prvo leksikografski
@ veci od drugog
.data 160
170
180
0
.data 170
2 43 5 7 0
24
.data 180
2 43 8 7 0
.prg 0
mua [160]
add [161]
jz #100
mua [161]
cpl
add [160]
jz #50
aum 162
halt
.prg 50
mua 160
add #1
aum 160
mua 161
add #1
aum 161
mua #0
jz #0
.prg 100
halt
@ Kraj
1.
@ Program racuna apsolutnu vrednost broja
.var
arg -3
abs 0
sign_mask 4
.prg
mua arg
fua
and sign_mask
jz pozitivno
mua arg
cpl
aum abs
halt
pozitivno:
mua arg
aum abs
halt
@ Broj
@ Apsolutna vrednost
@ Maska za sign flag
@ Uzimamo broj
@ Uzimamo flegove
@ Izdvajamo sign flag
@ Ako je negativan broj,
@ menjamo mu znak
@ i smestamo na rezultat
@ Ako je pozitivan
@ njega smestamo na abs
2.
@ Program koji demonstrira poziv potprograma
@ koji racuna apsolutnu vrednost
.var
broj -3 @ broj
abs_br 0
@ Apsolutna vrednost
arg1 0
ap 0
pov_vr 0
sign_mask 4
@
@
@
@
.prg
mua broj
aum arg1
mua povratak
Argument potprograma
Adresa povratka potprograma
Povratna vrednost potprograma
Maska za sign flag
@ Postavimo argument
@ Postavljamo adresu povratka
26
aum ap
mua #0
jz abs
povratak:
mua pov_vr
aum abs_br
halt
@ Pozivamo potprogram
@ prvi broj
@ drugi broj
@ treci broj
27
m 0
@ maksimum
arg1 0
arg2 0
ap 0
pov_vr 0
sign_mask 4
@
@
@
@
@
@
@
@
@
@
.prg
mua x
aum arg1
mua y
aum arg2
mua pov1
aum ap
mua #0
jz max
pov1:
mua pov_vr
aum arg1
mua z
aum arg2
mua pov2
aum ap
mua #0
jz max
pov2:
mua pov_vr
aum m
halt
@ Pozivamo potprogram
fua
and sign_mask
jz DrugiVeci
mua arg1
aum pov_vr
mua #0
jz ap
DrugiVeci:
mua arg2
aum pov_vr
mua #0
jz ap
@ Vracamo se
4.
@ Program koji racuna maksimum niza pozitivnih brojeva
.var
adresa
duzina
m 0
160
6
arg1 0
arg2 0
pov_vr 0
ap 0
sign_mask 4
@
@
@
@
@
prvi argument
drugi argument
povratna vrednost
adresa povratka
maska za sign flag
.data 160
1 2 3 5 4 1
@ niz
.data 170
0
.prg
mua adresa
aum 170
petlja:
mua duzina
29
jz kraj
add #-1
aum duzina
mua [170]
aum arg1
mua pov_vr
aum arg2
mua povratak
aum ap
mua #0
jz max
povratak:
mua 170
add #1
aum 170
mua #0
jz petlja
kraj:
mua pov_vr
aum m
halt
@
@
@
@
30
DrugiVeci:
mua arg2
aum pov_vr
mua #0
jz ap
@ Vracamo se
12
Cas
Napisati sledece u ASM2:
1. Potprogram koji racuna sumu bitova i program koji ga poziva
2. Potprogram koji iz niza brojeva izdvaja nenegativne u novi niz i program koji ga poziva
3. Program koji izracunava stepen xy
- Resenja:
1.
@ Potprogram koji racuna sumu bitova i
@ program koji ga poziva
.var
x 7
s 0
maska 1
@ Broj
@ Suma bitova
@ Maska za izdvajanje poslednjeg bita
arg1 0
pov_vr 0
ap 0
@ Argument funkcija
@ Povratna vrednost
@ Adresa povratka
.prg
mua x
@ Postavimo x za prvi argument
aum arg1
mua povratak
@ Postavimo adresu povratka
aum ap
mua #0
jz suma_bitova @ pozivamo funkciju
povratak:
mua pov_vr
31
aum s
halt
@ Postavljamo rezultat
suma_bitova:
mua arg1
jz ap
and maska
add pov_vr
aum pov_vr
mua arg1
shr #1
aum arg1
mua #0
jz suma_bitova
2.
@ Potprogram koji iz niza brojeva izdvaja
@ nenegativne u novi niz i program koji ga poziva
.var
adresa1
duzina1
adresa2
duzina2
160
6
170
0
arg1 0
arg2 0
arg3 0
pov_vr 0
ap 0
@
@
@
@
@
@
@
@
@
adresa
duzina
adresa
duzina
adresa
prvog niza
prvog niza
drugog niza
drugog niza
povratka
@ Prvi niz
.data 160
3 -3 5 -7 1 -2
.prg
mua adresa1
aum arg1
mua duzina1
aum arg2
mua adresa2
aum arg3
@ Postavljamo treci argument
mua povratak
aum ap
@ Postavljamo adresu povratka
mua #0
jz nenegativni @ Pozivamo potprogram
povratak:
mua pov_vr
aum duzina2
@ Postavljamo povratnu
@ vrednost za rezultat
halt
nenegativni:
mua arg1
aum 180
mua arg3
aum 181
petlja:
mua arg2
jz ap
add #-1
aum arg2
mua [180]
shr #7
jz pozitivan
@
@
@
@
mua #0
jz negativan
@ Inace je negativan
pozitivan:
mua [180]
aum [181]
mua pov_vr
add #1
u akumulator
znaka
nula
pozitivan
33
aum pov_vr
mua 181
add #1
aum 181
negativan:
mua 180
add #1
aum 180
mua #0
jz petlja
3.
@ Stepenovanje x^y
.var
x 3
y 4
s 0
arg1 0
arg2 0
ap 0
pov_vr 0
t 0
ts 0
@ Osnova
@ Stepen
@ Ovde ce se u svakom koraku cuvati
@ parcijalni proizvodi x*x*...*x
@ Privremena promenljiva za x
@ Privremena promenljiva za pov_vr*x
.prg
mua x
aum arg1
mua y
aum arg2
mua povratak
aum ap
mua #0
jz stepenovanje @ Pozivamo potprogram
34
povratak:
mua pov_vr
aum s
halt
stepenovanje:
mua #1
aum pov_vr
petlja:
mua arg2
jz ap
add #-1
aum arg2
mua
aum
mua
aum
arg1
t
#0
ts
mnozenje:
mua t
jz krajmnozenja
add #-1
aum t
mua ts
add pov_vr
aum ts
mua #0
jz mnozenje
krajmnozenja:
mua ts
aum pov_vr
mua #0
jz petlja
@ Inicijalizujemo stepen
@ Unosimo y
35
13
Cas
1. Napisati program u SIM-u koji izracunava vrednost aritmetickog izraza a/2 + (5b c/4 3).
2. Napisati program u SIM-u koji za dati niz od n elemenata a1 , a2 , a3 , a4 , ..., an , izracunava
vrednosti izraza: a1 a2 + a3 a4 + ...(1)n1 an . Broj elemenata i elementi niza su dati u
memoriji.
3. Napisati program u SIM koji izracunava n-ti clan niza koji je dat rekurentnom formulom
A0 = 1, An = 3 An1 + 2, n >= 1.
4. Napisati program u SIM koji za dati string proverava da li je palindrom.
5. Napisati program u SIM-u koji za date vrednosti kateta x i y izracunava ceo deo
p hipotenuze
z. Formula za izracunavanje hipotenuze z kada su zadate katete x i y glasi z = x2 + y 2 . Za
racunanje celog dela od z treba iskoristiti cinjenicu da je to najveci broj ciji kvadrat nije veci
od z 2 .
6. Napisati program u SIM-u koji za dato n i m izracunava 28nm .
7. Napisati funkciju u ASM2 koja racuna proizvod dva pozitivna broja. Napisati zatim program
koji koristeci prethodnu funkciju izracunava proizvod niza brojeva. Niz i velicina niza su dati
u memoriji.
8. Napisati funkciju u ASM2 koja za dati argument izracunava najmanji stepen dvojke koji je
veci od njega. Napisati zatim program koji koristeci prethodnu funkciju za data tri broja u
memoriji izracunava sumu ovako dobijenih odgovarajucih stepena dvojke.
9. Napisati potprogram u ASM2 koji na osnovu dva niza An i Bn koji su dati svojim duzinama
i pocetnom adresom (pri cemu su im duzine jednake) formira novi niz Cn , pri cemu je Cn =
16 An Bn . Napisati zatim program koji ga poziva.
10. Napisati potprogram u ASM2 koji za dati broj prosledjen kao argument, formira i vraca novi
broj koji nastaje tako sto se invertuju pozicije bitova sa prva cetiri mesta i poslednja cetiri
mesta. Primer: za broj a0 a1 a2 a3 a4 a5 a6 a7 , potprogram treba da vrati broj a3 a2 a1 a0 a7 a6 a5 a4 .
Napisati zatim program koji ga poziva.
11. Napisati program koji za dati niz duzine n (gde je n parno) vraca pozitivnu vrednost ukoliko
je suma elemenata na neparnim pozicijama veca od sume elemenata na parnim, negativnu
ako je manja, a nulu ako su jednake.
12. Napisati potprogram u ASM2 koji vraca 1 ako je broj u intervalu [30, 40], a nulu inace.
Napisati program koji iz niza celih brojeva prepisuje one iz tog intervala za koje prethodni
potprogram vraca 1 u novi niz, ali tako sto im promeni znak.
36
13. Napisati potprograme u ASM2 koji vracaju maksimum, odnosno minimum dva broja. Napisati
program koji za dati niz celih brojeva izracunava razliku izmedju maksimuma i minimuma
svih negativnih brojeva u nizu.
14. Napisati potprograme u ASM2 koji vracaju maksimum, odnosno minimum dva broja. Napisati
program koji od dva niza A i B jednakih duzina formira nizove C i D ciji su clanovi
Cn = max(An , Bn ) i Dn = min(An , Bn ).
15. Za vezbanje uraditi zadatke i u drugim jezicima od onih koji su trazeni u formulaciji zadatka.
37