2. format naredbi, skup naredbi, adresiranja, rad sa...

77

Upload: others

Post on 13-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama
Page 2: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-1

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

ö õ

Test pitanje 2.1

Ukazati na osnovne razlike izme|u LE i BE adresiranja.

Odgovor Osam bitova (jedan bajt) nije dovoljno za memorisanje velikih brojeva, pa se zbog toga ve}i broj uzastopnih bajtova koristi za memorisanje velikih brojeva. Na primer, 2 bajta se koriste za prezentaciju 16-bitnih brojeva, 4 bajta za 32-bitne brojeve, 8 bajtova za 64-bitne,... Kod LE (little endian) adresiranja adresa rezultantne re~i zadaje se najni`om bajt adresom. Na primer, ako se za memorisanje 32-bitne re~i koriste lokacije 100, 101, 102, i 103 adresa broja bi}e 100. Lokacija 100 se koristi za ~uvanje LS bajta broja, 101 za bajt naredni po te`ini, itd. Kod BE (big endian) adresiranja, primera radi, lokacija 100 se koristi za memorisanje MS bajta broja, 101 za naredni manji po te`ini itd. Neki od procesora koriste LE adresiranje (tipi~no su to procesori iz familije Intel 8086, uklju~uju}i i Intel 486) a drugi BE adresiranje (tipi~an primer je familija Motorola MC68000). Izbor adresiranja obi~no nije od zna~aja sa izuzetkom kada je potrebno preneti podatke izmedju jednog sistema i drugog, ili kada je potrebno manipulisati samo sa individualnim bajtovima broja.

Test pitanje 2.2

Dekodirati slede}i ASCII kôd 10100111101001110110111000010100000101001011101011110011

Odgovor Sima Rus

Page 3: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-2

Test pitanje 2.3

Koji bit treba komplementirati da bi promenili kôdove ASCII znakova “malih” slova na “velika” i obratno?

Zadatak 2.1

Napisati svoje ime i prezime pomo}u ASCII kodiranih znakova koriste}i 8-bitni kôd na slede}e na~ine: (a) sa krajnje levim bitom uvek postavljen na nuli (b) sa krajnje levim bitom tako odabran da se generi{e parna parnost. Predvideti blanko znak izme|u imena srednjeg slova, kao i srednjeg slova i prezimena.

Test pitanje 2.4

Skicirati format instrukcije kod ~etvoro-, tro-, dvo-, jedno- i nulto- adresnih ma{ina

Odgovor Formati instrukcija su prikazani na Slici 2.1. op-kôd adrese

operacija prvi operand

drugi operand

rezultat naredna adresa

a) ~etvoro-adresni format

operacija prvi operand

drugi operand

rezultat

b) tro-adresni format

operacija prvi operand i drugi

operand c) dvo-adresni format

operacija registar drugi operand

d) jedno-i-po-adresni format

operacija drugi operand

e) jedno-adresni format

operacija

f) nulto-adresni format

Slika 2.1 Formati instrukcija

Test pitanje 2.5

Na Slici 2.2, na grafi~ki na~in, prikazano je formiranje efektivne adrese operanda instrukcije kod hipoteti~kog procesora. Identifikovati adresne na~ine rada.

Page 4: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-3

memorija

e)

RF polje

memorija

f)

RF polje

d)

opkôd

memorija

a)

b)

c)

e)

memorija

g)

RF polje memorija

h)

RF polje memorija

j)

memorija

opkôd adresa

adresa

operand

opkôd operand

operand

operand

opkôd operand

operand

operand

opkôd adresa

operand

registar

opkôd ofset

operand

opkôd adresa ofset

adresa operand

opkôd adresa baza

index operand

+

+

+

opkôd baza

+ operand+

registar

+1(-1)

i)

opkôd

Slika 2.2 : Na~ini adresiranja

Odgovor a) implicitno b) neposredno c) memorijsko direktno d) registarsko direktno e) memorijsko indirektno f) registarsko indirektno

Page 5: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-4

g) registarsko preko implicitnog registra (obi~no je to PC)- tj. PC relativno h) registarsko relativno i) indeksno sa autoinkrementiranjem/dekrementiranjem j) bazno-indeksno

Test pitanje 2.6

Usvojiti da je obim instrukcije 16-bitni, a operandi se specificiraju 6-bitnim poljem. Neka postoji k dvo-operandskih i n nulto-operandskih instrukcija. Koji je maksimalan broj jedno-operandskih instrukcija koji se mo`e podr`avati od strane ma{ine?

Odgovor Za dvo-operandske instrukcije ime}emo slede}i format:

4 6

opkod operand 1 operand 2

6

0 0 0 0

. . .1 1 1 0

k = 15 dvo-operandskih instrukcija

Kod jedno-operandskih instrukcija va`i}e format:

4 + 6

opkod operand

6

1 1 1 1 0 0 0 0 0 0

. . . .1 1 1 1 1 1 1 1 1 0

m = 63 jedno-operandske instrukcije

Kod nulto-operandskih instrukcija ima}emo format:

opkod

16

1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0. . . .

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

m = 64 nulto-operandskeinstrukcije

Za re{avanje ovog problema kori{}ena je tehnika kodiranja sa pro{irenjem.

Zadatak 2.2

Neka neki hipoteti~ki procesor koristi promenljivi format kodiranja instrukcija. Projektovati opkôd tako da podr`ava kodiranje: (1) sedam instrukcija sa dve 13-bitne memorijske adrese i jedno trobitno polje za specifikaciju

adrese registra; (2) sedam instrukcija sa tri trobitna polja za specifikaciju adrese registara; (3) ~etiri instrukcije kojima se ne specificiraju memorijske adrese i adrese registara. Odrediti kakvi su minimalni formati instrukcija pod (1), (2) i (3).

Odgovor Ma{ina podr`ava tri formata: 32-bitni, 16-bitni i 8-bitni. Formati su slede}i:

Page 6: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-5

3 3 13 13

... ...

3 + 3 3 3 332-bitni format

16-bitni format

opkodx x x

reg. op. mem. op. 1 mem. op. 2

opkod1 1 1 x x x

reg. op. 1 reg. op. 2 reg. op. 3

opkod1 1 1 1 1 1 y y

2

8-bitni format

3 + 3

Napomena: Vrednost polja xxx ne mo`e biti 111

Test pitanje 2.7

Ra~unar ima 32-bitni format instrukcije koga ~ine slede}a polja: 8-bitni opkôd; dva polja za specifikaciju adrese registra, svako obima 5 bitova, jedno 14-bitno polje za specifikaciju neposrednog operanda/registra. (a) koliki je maksimalan broj operacija koji se mo`e specificirati (b) koliko registara se mo`e adresirati (c) kolika je maksimalna vrednost neozna~enog neposrednog operanda koja se mo`e specificirati (d) u kom opsegu se mo`e specficirati vrednost ozna~enog neposrednog operanda, ako bit 13 predstavlja bit znaka.

Test pitanje 2.8

Instrukcija/podatak koju ra~unar pribavlja iz memorije je obima 24 bita. Postoji samo jedan format instrukcije, koji sadr`i opkôd deo i deo za neposredni operand. Svaka instrukcija je sme{tena u jednoj memorijskoj re~i. Skup instrukcija ~ini 150 razli~itih operacija. (a) sa koliko bitova se kodira opkôd deo instrukcije (b) koliko bitova se koristi za neposredni deo instrukcije (c) ako se neposredni operand koristi kao neozna~ena adresa memorije, koji je maksimalan broj re~i koji se mo`e adresirati (d) koja je najve}a i najmanja algebarska vrednost kod brojeva u prezentaciji dvoji~nog komplementa koja se mo`e predstaviti neposrednim operandom?

Test pitanje 2.9

Koje osnovne grupe organizacije podataka postoje? Uka`i na njihove osobine.

Odgovor Tipove podataka je mogu}e organizovati u slede}e ~etiri glavne grupe: skalarni, struktuirani, linearne liste i povezane liste. Skalarne podatke karakteri{e opseg vrednosti. Ovi podaci definisani su za fiksirani broj bitova. Naj~e{}e kori{}eni skalarni tipovi podataka su prikazani na Slici 2.3.

Page 7: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-6

tip podatka obim u bitovima opseg format logi~ki 1 0-1 d0 BCD 4 0-9 d3d2d1d0 heksadecimalni 4 0-15 d3d2d1d0 znak 8 0-255 d7d6d5d4d3d2d1d0 celobrojna vrednost N 2N-1 znak, moduo celobrojna vrednost dvostruke preciznosti 2N 22N-1 znak, moduo realna (FP) N ±2± k znak, eksponent, mantisa realna vrednost dvostruke preciznosti 2N ±2± L znak, eksponent, mantisa

Slika 2.3 : Skalarni tipovi podataka

Strukturne tipove podataka ~ine skalarni podaci koji su ure|eni u blokove. Postoje dve osnovne varijacije: polje i zapis. Polje ~ine isti skalarni tipovi podataka, kakve su recimo celobrojne vrednosti. Polje karakteri{e jedinstveno ime, po~etnu lokaciju i obim. Polje mo`e biti definisano kao 1D (vektor), 2D (matrica), ili kao vi{edimenzionalno. Na slici 2.4 je prikazana struktura podataka tipa polje. Elementi polja u konkretnom primeru su sve uzastopne neparne celobrojne vrednosti u opsegu izme|u 1 i 20.

adresa podatak N 1

N+1 3 N+2 5 N+3 7 N+4 9 N+5 11 N+6 13 N+7 15 N+8 17 N+9 19

Slika 2.4 : Struktura tipa polje

Zapis predstavlja tabela razli~itih skalarnih tipova podataka ure|enih u razli~ita polja. Svaki zapis je definisan na osnovu svog imena, lokacije, obima i sadr`aja polja. Na Slici 2.5 je prikazana struktura jednog tipi~nog zapisa (record).

ime ime oca prezime ulica broj mesto stanovanja datum rodjenja op{tina republika mati~ni broj broj li~ne karte izdata od obrazovanje organizacija gde je zapo{ljen broj telefona ku}i broj telefona posao

Slika 2.5 Jedna klasi~na struktura tipa zapis

Linearne liste se formiraju pomo}u tabela i jednog ili ve}eg broja adresnih pokaziva~a. Elementi liste sekvencijalno se ubacuju i izbavljuju iz liste. Magacin i red ~ekanja su liste koje naj~e{}e sre}emo. Magacin radi na principu LIFO bafera a karakteri{e se svojim imenom, obimom, lokacijom, i pokaziva~em. Red ~ekanja radi na principu FIFO bafera kome je pridru`en ulazni pokaziva~ za upis i izlazni pokaziva~ za ~itanje. Standardno je maksimalni opseg reda ~ekanja definisan po modulu N, gde je N veli~ina liste, a takav red ~ekanja se naziva kru`ni bafer. Dva reda ~ekanja je mogu}e kombinovati u jedinstveni red ~ekanja sa dva pristupa (dequeue), koji

Page 8: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-7

dozvoljava da se operacije ~itanja i upis obavljaju sa obe strane. Na Slici 2.6 prikazane su linearne liste strukture podataka.

123456

N-3N-2N-1N

123456

N-3N-2N-1N

1 N

N 1

PTR RDPTR

WRPTR

RD

WD

WD

RD

a) magacin b) red ~ekanja c) red ~ekanja sa dva pristupa

Slika 2.6 Strukture podataka tipa linearna lista

Povezane liste se formiraju pomo}u nekontinualnih memorijskih lokacija koje se me|usobno povezuju pokaziva~ima za povezivanje (link pointers). Povezivanje mo`e biti u jednom smeru ili u oba. Kod kru`no povezane liste veza u zadnjem elementu pokazuje na prvi element. Povezanoj listi se dodeljuje ime, lokacija, veli~ina (obim) i pokaziva~ veze. Karakteristi~an tip strukture povezana lista je binarno stablo. Inicijalni elemenat binarnog stabla zove se koren (root). Svaka lokacija narednog elementa se naziva ~vor, a svakom elementu su pridru`ena dva pokaziva~a, levi i desni. Ovakva definicija rezultuje hijerarhijskoj strukturi podataka koja je simetri~na oko korena. Struktura tipa koren se koristi za ~uvanje informacija koja je organizovana na logi~ki na~in. Na Slici 2.7 prikazani su pomenuti tipovi strukture povezane liste. Pristup elementima strukture povezane liste je sekvencijalan, ali osnovna karakteristika ovih struktura je ta {to su one lako pro{irljive.

A PTR B PTR C NULL

A PTR B PTR C NULL

L PTR A

D PTR

L PTR B

D PTR

L PTR C

D PTR

L PTR D

D PTR

L PTR E

D PTR

L PTR F

D PTR

L PTR G

D PTR

koren

~vor

a) povezana lista u jednom smeru

b) povezana lista u oba smera

c) binarno stablo

Slika 2.7 : Strukture podataka tipa povezana lista

Page 9: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-8

Test pitanje 2.10

Instrukciju relativnog grananja ~ine dve 16-bitne re~i koje su sme{tene u memoriji na lokacijama 310 i 311 (decimalno). Grananje se vr{i na ekvivalentnoj decimalnoj adresi 225. Opkôd instrukcije nalazi se na lokaciji 310 a adresa grananja ~ija je labela X, na lokaciji 311. (a) odrediti decimalnu vrednost X-a. (b) odrediti binarnu vrednost X koriste}i prezentaciju dvoji~nog komplementa.

Odgovor a) kod relativnog grananja efektivna adresa, EA, se izra~unava kao : EA=adresni deo instrukcije+sadr`aj PC-a 225=X+312⇒ X=-87 Nakon pribavljanja instrukcije grananja PC pokazuje na opkôd naredne instrukcije koja se nalazi na adresi 312. b) 16-bitna binarna vrednost decimalnog broja -87 iznosi:

1111111110101001

(PC)→

memorija

.

.

.opkôd BranchXopkôd naredneinstrukcije

adrese

225

310311312

Zadatak 2.3

Neka procesor koristi slede}e na~ine adresiranja Lda ADR ; direktno Lda #NADR ; neposredno Lda [ADR] ; indirektno Lda $ADR ; relativno, tj. M(ADR+PC) Lda (R1)ADR ; indeksno, tj. M(ADR+R1) Lda R1 : registarsko Lda [R1] ; registarsko indirektno a) Koliko puta }e se upravlja~ka jedinica obratiti memoriji u toku izvr{enja instrukcije Add R1,[OP1]. Instrukciju Add ~ine dve re~i. Prva re~ specificira opkôd i adresu registra R1 a druga indirektnu adresu. b) Koliko puta }e se upravlja~ka jedinica obratiti memoriji u toku izvr{enja instrukcije bezuslovnog grananja Jmp [ADR1]. Instrukciju Jmp ~ine dve re~i, prva je opkôd a druga indirektna adresa grananja.

Odgovor (a) Da bi odgovorili na ovo pitanje pretpostavi}emo slede}e:

Page 10: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-9

• opkôd instrukcije Add se nalazi na adresi A. • sadr`aj lokacije A+1 neka je 1000. • na lokaciji M[1000] upisana je vrednost 2000 • na lokaciji M[2000] upisana je vrednost 150 • pre po~etka izvr{enja instrukcije Add u registar R1 ~uva se vrednost 20.

Sadr`aj memorije i registra R1 pre i nakon izvr{enja instrukcije je oblika:

.

..

.

.

.opkôd Add

1000...

2000...

150

20 170+R1

pre po~etka Add nakon zavr{etka AddR1

memorijaadresa

AA+1

1000

2000

Da bi se izvr{ila instrukcija Add, upravlja~ka jedinica se obra}a ~etiri puta memoriji i to : Prvi put kada pribavlja opkôd Add, drugi put kada ~ita indirektnu adresu (sadr`aj lokacije A+1), tre}i put kada ~ita sadr`aj lokacije M[1000] = 2000 (adresu na kojoj se nalazi operand), i ~etvrti put kada ~ita adresu operanda instrukcije (M(2000)=150) b) Pod sli~nim uslovima, za instrukciju Jmp ima}emo:

.

..

.

.

.opkôd Jmp

1000...

2000...

3500

3500PC

nakon zavr{etkainstrukcije JMP[1000]

memorijaadresa

AA+1

1000

2000

I u ovom slu~aju upravlja~ka jedinica se obra}a memoriji ~etiri puta.

Page 11: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-10

Zadatak 2.4

Instrukcija koja je sme{tena na adresama 250 i 251 je tipa "Load u Acc" kod koje je adresno polje ADR (ili neposredni operando NOPR) jednak 500. Vrednost PC-a pre pribavljanja ove instrukcije je 250 a nakon pribavljanja 252 (ukazuje na narednu instrukciju). Sadr`aj registra R1 je 400, a u Acc se sme{ta rezultat koji se dobija izvr{enjem instrukcije. Odrediti sadr`aj registra Acc i efektivnu adresu za slede}e adresne na~ine rada ove instrukcije: a) direktni b) neposredni c) indirektni d) relativni e) indeksni f) registarski g) registarsko indirektni

.

.

.

opkôd modeADR ili NOPR=500

opkôd naredne instrukcije...

700...

800...

600...

300...

250251252

400

500

752

800

memorijaadrese

250PC

400R1

Acc

200...

900

Slika 2.8 : Izgled memorije i stanje PC-a, R1 i Acc pre izvr{enja instrukcije Lda

Odgovor adresni na~in rada simboli~ko

obele`avanje registarski prenos efektivna

adresa sadr`aj Acc-a

direktni Lda ADR Acc ← M[ADR] 500 800 neposredni Lda #NOPR Acc ← NOPR 251 500 indirektni Lda [ADR] Acc ← M[M[ADR]] 800 300 relativni Lda $ADR Acc ← M[ADR+PC] 752 600 indeksni Lda (R1)ADR Acc ← M[ADR+R1] 900 200 registarski Lda R1 Acc ← R1 - 400 registarsko-indirektni Lda (R1) Acc ← M[R1] 400 700

Slika 2.9 : Simboli~ka konvencija kod adresnih na~ina rada

Page 12: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-11

Test pitanje 2.11

Opkôd instrukcije Lda je sme{ten na lokaciji 200 a adresno polje na lokaciji 201. Adresno polje ima vrednost 300. Sadr`aj registra R1 je 750. Odrediti sadr`aj registra Acc i efektivnu adresu za slede}e adresne na~ine rada ove instrukcije: (a) direktno ; (b) neposredno ; (c) relativno ; (d) registarsko indirektno ; (e) indeksno sa R1 kao indeksnim registrom. Sadr`aj memorije, pre po~etka izvr{enja instrukcije Lda, prikazan je na Slici 2.10.

.

.

.

opkôd Lda mode300

opkôd naredne instrukcije...

700...

1200...

1400...

2000...

200201202

300

502

750

1050

memorijaadrese

200PC

750R1

Acc

Slika 2.10 : Izgled memorije pre izvr{enja instrukcije Lda

Test pitanje 2.12

Mikrora~unar koristi 32-bitni format instrukcija. Sve instrukcije su istog obima. Registarsko polje, RF, sadr`i 32 registra. (a) Za format kod koga ne postoji address-mode polje a ma{ina je troadresna (specificiraju se samo adrese registara iz RF polja) odrediti maksimalan broj mogu}ih opkôdova instrukcije. (b) Za format sa dvo-adresnim registarskim poljima, jednim memorijskim poljem i maksimalno 256 opkôdova, odrediti koliki je maksimalan broj memorijsko adresnih bitova dostupan.

Odgovor (a) Format instrukcije je oblika: rs1 i rs2 su adrese prvog i drugog izvornog operanda, a rd adresa, odredi{nog operanda. Sa 17 bitova mogu}e je adresirati 217=128k razli~itih instrukcija. (b) Format instrukcije je oblika: To zna~i da je maksimalno mogu}e adresirati 214=16k memorijskih lokacija.

opkôd rs1 rs2 rd 17 5 5 5

opkôd rs1 rs2/rd mem. adresa

8 5 5 14

Page 13: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-12

Test pitanje 2.13

Najve}i broj procesora koji ima k-bitno opkôd polje ima implementirano manje od 2k razli~itih tipova instrukcija. Shodno tome neki opkôd oblici su neva`e}i (invalid), {to zna~i da se procesor na ove opkôdove ne odaziva definisanim akcijama (akcije specificirane skupom instrukcija). S vremena na vreme procesor mo`e da pribavi i poku{a da dekodira i izvr{i neva`e}i opkôd pre svega zbog programskih ili hardverskih gre{aka. Opisati korektni kurs akcija koje procesor treba da preuzme kada detektuje neva`e}i opkôd. (Najve}i broj mikroprocesora nema ugra|eni mehanizam za obradu neva`e}ih opkôdova, tako da ishodi koji slede nakon poku{aja da se izvr{e ovakve operacije mogu biti nepredvidljivi)

Zadatak 2.5

Sastavni deo staze podataka ra~unara je RF polje koga ~ine 32 registra. Instrukcije PUSH i POP nisu implementirane, ali ra~unar koristi slede}e registarsko indirektne na~ine rada: • registarsko indirektni + inkrementiranje: Lda+ Rm,Rn ; Rm ← M[Rn] ; Rn ← Rn+1 Sto+ Rm,Rn ; M[Rn] ← Rm ; Rn ← Rn+1 • dekrementranje + registarsko indirektno: Lda- Rm,Rn ; Rn ← Rn-1 ; Rm ← M[Rn] Sto- Rm,Rn ; Rn ← Rn-1 ; M[Rn] ← Rm Pokazati kako se ove instrukcije mogu iskoristiti sa ciljem da se obezbede ekvivalentne instrukcije tipa PUSH i POP koriste}i se pri tome registrom R7 kao pokaziva~em magacina. Napomena: m≠n, m=0,...,31, n=0,...,31, dodatno Rm i Rn mogu da specificiraju registre PC i PSW.

Odgovor Instrukciju PUSH Rk kod najve}eg broja procesora ~ine slede}e aktivnosti: SP ← SP-1 M[SP] ← Rm a instrukciju POP Rm ← M[SP]

SP ← SP+1 Karakteristike ovakvog na~ina rada su slede}e: (a) magacin raste nani`e (b) SP uvek pokazuje na punu lokaciju (c) kod operacije PUSH pokaziva~ SP se prvo dekrementira a nakon toga sme{ta podatak u magacin. (d) kod operacije POP prvo se izbavlja podatak iz magacina a nakon toga se inkrementira SP. U konkretnom slu~aju koriste}i raspolo`ive naredbe Lda+, Sto+, Lda- i Sto- mogu}e je organizovati rad magacina koriste}i slede}e instrukcije: • operacija PUSH Sto- Rm,R7 ; R7 ← R7-1 ; M[R7] ← Rm

• operacija POP Lda+ Rm,R7 ; Rm ← M[R7] ; R7 ← R7+1 Zadatak ~itaoca je da ispita da li je mogu}e pomo}u naredbi Sto+ i Lda- organizovati magacin koji }e rasti navi{e?

Page 14: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-13

Zadatak 2.6

Registarsko polje, RF, ~ine osam registara, ozna~enih kao R0-R7. Koriste}i instrukcije Sto- Rm,Rn i Lda+ Rm,Rn napisati programske sekvence koje }e simulirati rad instrukcija PUSHR (sme{ta sadr`aj registra R0 do R6 u magacin) i POPR (izbavlja sadr`aj magacina i sme{ta ga u registre R6 do R0).

Odgovor • aktivnost instrukcije PUSHR je ekvivalentna slede}oj sekvenci Sto- R0,R7 Sto- R1,R7 Sto- R2,R7 Sto- R3,R7 Sto- R4,R7 Sto- R5,R7 Sto- R6,R7 • aktivnost instrukcije POPR ekvivalentna je slede}oj sekvenci Lda+ R6,R7 Lda+ R5,R7 Lda+ R4,R7 Lda+ R3,R7 Lda+ R2,R7 Lda+ R1,R7 Lda+ R0,R7 Treba uo~iti da se sme{tanje sadr`aja registara u magacin vr{i po rastu}em redosledu (po~ev od R0 ka R6), a izbavljanje iz magacina po obrnutom redosledu (po~ev od R6 ka R0).

Test pitanje 2.14

[esnaestobitna instrukcija sme{tena u memoriji na adresi 62010 koristi PC-relativni skok (Jump PC relative). Grananje se vr{i na lokaciju 53010. Adresno polje instrukcije je obima 10 bitova. Kojom binarnom vredno{}u je specificirano adresno polje koje se odnosi na relativni skok?

Odgovor PC, nakon izvr{enja instrukcije na adresi 62010 ,inkrementira se na vrednost 62210, tj. ukazuje na narednu instrukciju programa. PC-relativni skok se ra~una u odnosu na vrednost 62210. Prema tome, decimalna vrednost adresnog polja instrukcije bi}e -9210 a odgovaraju}i binarni ekvivalent jednak je 11 1010 0100 2.

Zadatak 2.7

Neka su N,Z,V i C ~etiri markera uslova koji su sastavni deo PSW registra CPU-a, a uslovna grananja se obavljaju shodno Slikama 2.11-2.13.

tip grananja mnemonik Test uslov Branch if zero BZ Z=1 Branch if not zero BNZ Z=0 Branch if carry BC C=1 Branch if not carry BNC C=0 Branch if minus BN N=1 Branch if plus BNN N=0 Branch if overflow BV V=1 Branch if not overflow BNV V=0

Slika 2.11 : Instrukcije uslovnog grananja koje se odnose na slanje statusnog bita PSW registra

Page 15: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-14

tip grananja mnemonik uslov statusni bitovi Branch if higher BH A>B C+Z=0 Branch if higher or equal BHE A≥B C=0 Branch if lower BL A<B C=1 Branch if lower or equal BLE A≤B C+Z=1 Branch if equal BE A=B Z=1 Branch if not equal BNE A≠B Z=0

Slika 2.12 : Instrukcije uslovnog grananja koje se odnose na neozna~ene brojeve *Napomena: Marker bit C u ovom slu~aju odnosi se na pozajmljivanje (borrow bit) tip grananja mnemonik uslov statusni bitovi Branch if greater BG A>B (N⊕V)+Z=0 Branch if greater or equal BGE A≥B N⊕V=0 Branch if less BL A<B N⊕V=1 Branch if less or equal BLE A≤B (N+V)+Z=1

Slika 2.13 : Instrukcije uslovnog grananja koje se odnose na ozna~ene brojeve

Program koji se izvr{ava na hipoteti~kom ra~unaru komparira dva neozna~ena (ozna~ena) broja A i B obavljaju}i operaciju oduzimanje A-B i uz istovremeno a`uriranje stanja statusnih bitova. Neka je A=00110101 i B=11000100. (a) odrediti razliku i interpretirati binarni rezultat (b) ako su A i B neozna~eni brojevi odrediti vrednosti statusnih bitova C (borow) i Z (zero) (c) ako su A i B ozna~eni brojevi odrediti vrednost statusnih bitova N (sign), Z (zero) i V (overflow) (d) ukazati koje instrukcije uslovnog grananja iz slike 2.12 imaju uslov=istinit (True) (e) ukazati koje instrukcije uslovnog grananja iz slike 2.13 imaju uslov=istinit (True)

Odgovor (a1) Algoritam za oduzimanje dva neozna~ena n-bitna broja A i B osnove 2 ~ine slede}i koraci: (i) oduzima se umanjilac B od umanjenika A (ii) ako se na mesto MS bit pozicije ne javi "Borrow" tada je A≥B razlika je pozitivna a rezultat korektan. (iii) Ako se na mesto MS bit pozicije javi "Borrow" tada je B>A pa razliku B-A treba oduzeti od 2n a znak minus pridru`iti rezultatu. Kada se javi pozajmljivanje imamo da je rezultat jednak A-B+2n, gde 2n predstavlja vrednost pozajmljivanja na MS bit poziciji. Umesto ovog rezultata, `eljeni moduo je B-A. On se mo`e dobiti oduzimanjem prethodne formule od 2n, tj. 2n-(A-B+2n)=B-A U konkretnom primeru treba da oduzmemo slede}a dva binarna broja A=00110101 i B=11000100. Borrow 1 1 0 0 0 0 0 0 A 0 0 1 1 0 1 0 1 B - 1 1 0 0 0 1 0 0 po~etni rezultat 0 1 1 1 0 0 0 1 MS Borrow je 1 a to ukazuje da je potrebno izvr{iti korekciju rezultata 28 1 0 0 0 0 0 0 0 0 -po~etni rezultat - 0 1 1 1 0 0 0 1 kona~ni rezultat - 1 0 0 0 1 1 1 1 (napomena : Do istog rezultata se dolazi formiranjem razlike B-A

Page 16: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-15

Borrow 0 0 1 1 1 1 1 1 B 1 1 0 0 0 1 0 0 A 0 0 1 1 0 1 0 1 kona~ni rezultat - 1 0 0 0 1 1 1 1 (Ovaj kona~ni rezultat je korektan) Alternativna operacija oduzimanja dva n-bitna neozna~ena broja A i B se mo`e obaviti na slede}i na~in: (j) dodaje se dvoji~ni komplement umanjilaca B umanjeniku A. Ova operacija se izvr{ava na slede}i na~in: A+(2n-B)=A-B+2n. (jj) ako je A≥B, suma }e generisati Carry na mesto MS bit pozicije, tj. 2n. Ovaj prenos se anulira (ne uzima u obzir) a ono {to ostaje predstavlja rezultat A-B. (jjj) ako je A<B, suma ne}e generisati Carry na mestu MS bit pozicije i ona je jednaka 2n-(B-A), {to predstavlja dvoji~ni komplement od B-A. Korekcija se obavlja kao i u prethodnom slu~aju (iii), uzimaju}i dvoji~ni komplement sume i dopisivanjem znaka minus ispred. U konkretnom slu~aju ima}emo: A = 0 0 1 1 0 1 0 1 dvoji~ni komp. od B = 0 0 1 1 1 1 0 0 rezultat_ime = 0 1 1 1 0 0 0 1 Ne postoji prenos na MS bit poziciji pa je zbog toga potrebno izvr{iti korekciju rezultata rezultat_ime na slede}i na~in u kona~ni kon_rezultat. kon_rezultat= - (dvoji~ni komplement od 01110001)= - 10001111 (a2) oduzimanje dva ozna~ena broja kada se za negativne brojeve koristi notacija dvoji~nog komplementa obavlja se shodno slede}em postupku: uzima se dvoji~ni komplement umanjilaca (uklju~uju}i i bit znaka) i dodaje se umanjeniku (uklju~uju}i i bit znaka). Carry koji se javlja na izlazu bita za znak ne uzima se u obzir. Su{tina procedure se sastoji u tome da se operacija oduzimanja mo`e promeniti u operaciju sabiranja ako se promeni znak umanjilaca. Naime, (±A)-(+B)=( ±A)+(-B) (±A)-(-B)=( ±A)+(+B) Promena pozitivnog broja u negativni lako se izvodi uzimanjem njegovog dvoji~nog komplementa. Obrnuta operacija je tako|e jednostavna, jer komplement negativnog broja koji je ve} u komplementarnoj formi generi{e pozitivni broj. 8-bitni ozna~eni brojevi u dvoji~nom komplementu se nalaze u opsegu od -128 do +127. Logika za detekciju Overflow oblika je kao na Slici 2.14.

n n

n

CinCn-1

Cn

V

C

BA

F

Slika 2.14 : Logika za Carry i Overflow

U konkretnom slu~aju imamo A=00110101=+53 dok je B=11000100=-60, pa }e razlika biti A = 0 0 1 1 0 1 0 1 (+53) dvoji~ni komplement od B = 0 0 1 1 1 1 0 0 (+60) rezultat 0 1 1 1 0 0 0 1 (+113) Cn=0 Cn-1=0

Page 17: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-16

S obzirom da nema Carry i Overflow, rezultat se nalazi u granicama dozvoljenog opsega za predstavljanje brojeva. (b) Kada su A i B neozna~eni brojevi shodno prvom algoritmu vidimo da se javilo pozajmljivanje na mesto MS bit pozicije pa je C=1, a kako je dobijena razlika razli~ita od nule to je i Z=0. (c) Kada su A i B ozna~eni brojevi ima}emo da je N=0 (rezultat je pozitivan), Z=0 (rezultat je razli~it od nule), i V=0 ( nije od{lo do prema{aja). (d) Slede}i uslovi bi}e istiniti: C=1 ⇒ A<B - BL ; branch if lower C+Z=1 ⇒ A≤B -BLE ; branch if lower or equal z=0 ⇒ A≠B - BNE ; branch if not equal (e) slede}i uslovi bi}e istiniti (N⊕V)+Z=0 ⇒ A>B - BG ; branch if greater N⊕V=0 ⇒ A≥B -BGE ; brench if greater or equal

Zadatak 2.8 Napisati program za izra~unavanje slede}eg aritmeti~kog izraza: X=(A*(B+C))/(D*E-F) Usvojiti da su svi operandi inicijalno sme{teni u memoriju (a) arhitektura procesora je tipa registar-u-registar a koriste se tro-adresne instrukcije. Za obra}anje memoriji koriste se isklju~ivo instrukcije Load i Store. (b) arhitektura procesora je tipa memorija-u-memoriju a koriste se dvo-adresne instrukcije, tj. instrukcije su tipa Inst memop <op> memop. (c) CPU ima jedan akumulator a koristi jedno-adresne instrukcije, tj. instrukcije su tipa Inst memop <op>.

Odgovor (a) Lw R1,D Lw R2,E Lw R3,F Mul R1,R2 ;D*E→R1 Sub R1,R1,R3 ; D*E-F→R1 Lw R2,A Lw R3,B Lw R4,C Add R3,R3,R4 ;B+C→R3 Mul R2,R3 ;A*(B+C) →R2 Div R2,R1 ;(A*(B+C))/(D*E-F) →R2 Sw X,R2 ;(A*(B+C))/(D*E-F) →X (b) Mul D,E ;D*E→D Sub D,F ;D*E-F→D Add B,C ;B+C→B Mul A,B ;A*(B+C) →A Div A,B ;(A*(B+C))/((D*E)-F) →A Mov X,A ;A→X (c) Mov D ;D→Acc, Acc je akumulator Mul E ;E*Acc→Acc Sub F ;Acc-F→Acc Mov T1 ;Acc→T1 Mov C ;C→Acc Add B ;B+Acc→Acc

Page 18: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-17

Mul A ;A*Acc→Acc Div T1 ;Acc/T1→Acc Mov X ;Acc→X

Zadatak 2.9

Napisati programsku sekvencu za izra~unavanje izraza: X = (A + B * C) / (D - E * F) kod nulto-, jedno-, dvo-, i tro-adresnih ma{ina. Dostupne instrukcije kod odgovaraju}ih ma{ina su:

a) nulto-adresna ma{inaPUSH MPOP MADDSUBMULDIV

c) dvo-adresna ma{inaMOV X,YADD X,YSUB X,YMUL X,YDIV X,Y

izv. i odr. izv.operand operand

b) jedno-adresna ma{inaLOAD MSTORE MADD MSUB MMUL MDIV M

d) tro-adresna ma{inaMOV X,YADD X,Y,ZSUB X,Y,ZMUL X,Y,ZDIV X,Y,Z

odr. izv.operand operand

izv. operand

Zadatak 2.10

Kreirati programske sekvence za izra~unavanje izraza c = a2-b2 kod ma{ina koje koriste slede}e formate instrukcija: a) tro-adresni - arhitektura je tipa R+M; b) dvo-adresni - arhitektura je tipa R+M; c) dvo-adresni - arhitektura je tipa Load/Store; d) jednoadresni - arhitrektura je tipa R/M. Napomena: (1) Koristiti skup naredbi hipoteti~kog procesora; (2) Promenljive a, b, c i privremena promenljiva x, ~uvaju se u memorijskim lokacijama A, B, C i X, respektivno.

Odgovor Izraz: c = a2-b2, mo`e se zapisati u obliku: c = (a+b)⋅(a-b) a) 1. Add X,A,B ; Mem (X) := Mem(A)+Mem(B)

2. Sub C,A,B ; Mem (C) := Mem(A)-Mem(B)

3. Mul C,X,C ; Mem (C) := Mem(X)*Mem(C) b) 1. Move X,A ; Mem(X) <- Mem(A)

2. Add X,B ; Mem(X) <- Mem(X)+Mem(B)

3. Move C,A ; Mem(C) <- Mem(A)

Page 19: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-18

4. Sub C,B ; Mem(C) <- Mem(C)-Mem(B)

5. Mul C,X ; Mem(C) <- Mem(C) *Mem(X) c) 1. Load R1,A ; (R1) <- Mem(A)

2. Load R2,B ; (R2) <- Mem(B)

3. Move R3,R1 ; (R3) <- (R1)

4. Add R1,R2 ; (R1) <- (R1)+(R2)

5 Sub R3,R2 ; (R3) <- (R3)-(R2)

6. Mul R1,R3 ; (R1) <- (R1)*(R3)

7. Store C,R1 ; Mem(C) <- (R1) Napomena: R1, R2, R3, ... su registri RF polja. d) 1. Load R1,A ; (R1) <- Mem(A)

2. Load R2,B ;(R2) <- Mem(B)

3. Add R3,R1,R2 ; (R3) <- (R1)+(R2)

4. Sub R4,R1,R2 ; (R4) <- (R1)-(R2)

5 Mul R5,R3,R4 ; (R5) <- (R3)*(R4)

7. Store C,R5 ; Mem(C) <- (R5) Napomena: R1, R2, R3, ... su registri RF polja. e) 1. Load A ; (ACC) <- Mem(A)

2. Add B ; (ACC) <- (ACC)+Mem(B) 3. Store X ; Mem(X) <- (ACC)

4. Load A ; (ACC) <-Mem(A)

5. Sub B ; (ACC) <-(ACC)-Mem(B) 6. Mul X ; (ACC) <-(ACC) *Mem(X)

7. Store C ; Mem(C) <- (ACC)

Zadatak 2.11

Neka je dat skup od ~etiri procesora P0, P1, P2 i P3, gde je Pi i-to adresna ma{ina. P0 je nulto-adresna stack ma{ina, dok su P1, P2 i P3 konvencionalni ra~unari svaki sa po 16 registara op{te-namene R0:R15 koji se koriste za manipulaciju sa podacima i kao adresni registri. Svi procesori, na nivou asemblerskog jezika, imaju opkôdove za instrukcije Add, Sub, Mul i Div radi implementacije operacija +, -, * i /, respektivno. a) Koriste}i {to je mogu}e manji broj instrukcija (kra}i program), kreirati programske sekvence po kojima }e svaka od ma{ina izra~unavati vrednost slede}eg aritmeti~kog izraza: X : = (A/B + C * D)/(D * E - F + C/A) + G , koriste}i standardne mnemonike za ostale instrukcije kakve su na primer Load, Store, Push, Pop i dr. b) Izra~unati ukupnu veli~inu (obim) sva ~etiri programa u bitovima usvajaju}i da instrukcije na nivou ma{inskog jezika imaju slede}e formate: (i) opkôdovi (ne sadr`e adresnu informaciju) su 8-bitni; (ii) memorijske adrese su 16-bitne; (iii) adrese registara su 4-bitne. (na primer, dvo-adresna instrukcija Load R7,B koja se odnosi

na ma{inu P2 i ozna~ava R7:=M(B), je obima 8 + 4 + 16 = 28 bitova).

Page 20: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-19

Odgovor instrukcija du`ina instrukcija du`ina instrukcija du`ina instrukcija du`ina Push A 24 Load D 24 Mov R1,A 28 Div R0,A,B 44 Push B 24 Mul E 24 Div R1,B 28 Mul R1,C,D 44 Div 8 Sub F 24 Mov R2,C 28 Add R0,R0,R1 20 Push C 24 Store R1 12 Mov R2,D 28 Mul R1,D,E 44 Push D 24 Load C 24 Add R1,R2 16 Sub R1,R1,F 32 Mul 8 Div A 24 Mov R0,D 28 Div R2,C,A 44 Add 8 Add R1 12 Mul R0,E 28 Add R1,R1,R2 20 Push D 24 Store R1 12 Sub R0,F 28 Div R0,R0,R1 20 Push E 24 Load A 24 Mov R2,C 28 Add X,R0,G 44 Mul 8 Div B 24 Div R2,A 28 ukupno 312 bitova Push F 24 Store R1 12 Add R0,R2 16 d) tro-adresna Sub 8 Load C 24 Add R1,G 28 Push C 24 Mul C 24 Store X,R1 28 Push A 24 Add R1 12 ukupno 356 bitova Div 8 Div R2 12 c) dvo-adresna Add 8 Add G 24 Div 8 Store X 24 Push G 24 ukupno 336 bitova Add 8 b) jedno adresna Pop 24 ukupno 336 bitova a) nulto adresna ma{ina

Zadatak 2.12

Neka je dat skup od ~etiri procesora P0, P1, P2 i P3 gde je Pi i-to adresna ma{ina. P0 je nulto adresna ma{ina a P1:P3 konvencionalni ra~unari od kojih svaki ima trideset dva 32-bitna registra op{te namene R0:R31 koji se koriste za ~uvanje adresa i podataka. Svi procesori imaju instrukcije sa (asemblersko-jezi~kim) opkôdovima Add, Sub, Mul i Div za implementaciju operacija +,-,* i /, respektivno. a) Napisati programske sekvence za svaku od ~etiri ma{ine pomo}u kojih se izra~unava slede}i aritmeti~ki izraz:

X←(A/B+C*D)/(D*E-F+C/A)+G Za ostale instrukcije u programu koristi standardna imena kao {to su Ld za "Load", St za "Store", Push, Pop, Mov i dr. b) Izra~unati obim (veli~inu) objektnog programa u bajtovima za svaki od ~etiri programa ako usvojimo da je format instrukcija na ma{inskom jeziku slede}i: • opkôdovi (ne sadr`e adresnu informaciju) su 14-bitni • adrese registara su 5-bitne (ukupno 15 bitova) • polje adresnih modifikatora je 3-bitno (tipa su R/ M ) • memorijska adresa 32-bitna Na primer, dvo-adresna instrukcija Ld R4,B ima zna~enje R4←M(B) zauzima 14+15+3+32 ukupno 64 bita, 8 bajtova ili dve 32-bitne re~i. Napomena: Prvih 32 bita= opkôd+adr_reg+adr_mod su obavezna kod svake instrukcije

Test pitanje 2.15

Stack orijentisana ma{ina se koristi za izra~unavanje izraza z:= w + 3 * (x - y). a) napisati program za izra~unavanje izraza; b) skicirati stanje magacina u toku izra~unavanja izraza.

Page 21: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-20

Odgovor

Upravlja~kajedinica

SP

Aritmeti~ko-logi~kajedinica

Magacin

TOS

TOS - vrh magacina

. . .

. . .

a)program

Push WPush 3Push XPush YSubMulAddPop Z

a) Program za odredjivanje izraza i princip rada ma{ine

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

w w w w

w w w+3(x-y) w+3(x-y)

3 3 3

3

x xy

x-y3(x-y)

w+3(x-y)

TOSTOS

TOSTOS

TOSTOS

TOS TOS

z z z z

z z z z

Push w Push 3 Push x Push y

Sub Mul Add Pop z

b) Izgled magacina u toku izvr{enja programa

Slika 2.26. Princip rada stack ma{ine

Zadatak 2.13

Na stack ma{ini sa Slike 2.17, izra~unava se izraz z := (4 * (a2 + b + c) - d)/(e + f * g). a) Odrediti odgovaraju}u Polish notaciju po kojoj ma{ina izra~unava vrednost izraza z.

Page 22: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-21

b) Kreirati odgovaraju}u programsku sekvencu po kojoj ma{ina odredjuje vrednost izraza z.

Odgovor Kod prevodjenja datog izraza iz infix notacije u odgavaraju}u Polish notaciju vr{i se zamena a2 sa a*a, tako da se kona~no dobija slede}i sufiks tip Polish notacije z 4 aa * b + c + * d - e f g * + / := (1) Postupak prevodjenja se izvodi rekurzivno zamenom infix izraza X op Y odgovaraju}im Polish izrazom X Y op, gde op ozna~ava odgovaraju}i operator u teku}em izrazu.

Upravlja~kajedinica

SP

Aritmeti~ko-logi~kajedinica

Magacin

. . .

. . .

TOS

Slika. 2.17 : Osnovni princip rada stack ma{ine

Postupak prevodjenja po~injemo prepisivanjem izraza Z := A u formi Z A := . Sada je A oblika B/C = BC/ tako da po~etni izraz dobija formu Z B C/ := . U konkretnom slu~aju C = e + D = e D + = e f g * +, tako da dobijamo delimi~no transformisani Polish Z B e f g * + / :=, gde je B = 4 * (a*a + b + c) - d. Istim na~inom rezonovanja mogu}e je transformisati formu B u 4 a a * b + c + * d -, pa shodno tome dobiti izraz definisan jedna~inom (1) b) Odgovaraju}a programska sekvenca je oblika: Push 4 Push a Push a Mul Push b Add Push c Add Mul Push d Sub Push e Push f Push g Mul Add Div Pop z

Test pitanje 2.16

Page 23: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-22

Za svaki binarni broj prikazan u tabeli, popuniti odgovaraju}u ekvivalentnu vrednost

k�d binarni broj neozna~eni

binarni 8-bitni ozna~eni

binarni neparna parnost

ASCII BCD

10011000 152 -104 98 01100001 01110011 10000101 10010110

Test pitanje 2.17

Izvr{iti konverziju slede}ih binarno ozna~enih brojeva u odgovaraju}e decimalne ekvivalente a) 1101 0001 b) 0101 0000 c) 1000 1111 0101 1101

Test pitanje 2.18

36-bitni FP broj ~ine 24-bitna mantisa plus bit znaka i 10-bitni eksponent plus bit znaka. Koji se najve}i i najmanji normalizovani pozitivni brojevi razli~iti od nule mogu predstaviti pomo}u ovog formata.

Zadatak 2.14 Napisati sekvencu instrukcija kojom se za dato x izra~unava vrednost funkcije y=x+2x+3, koriste}i slede}e adresne formate instrukcija: a) tro - adresni b) dvo- adresni c) jedno- adresni Usvojiti da hipoteti~ki procesor ima implementirano registarsko polje (RF polje) koga ~ine 32 registra R0-R31 sa izuzetkom slu~aja pod c). Odrediti broj instrukcija i pristupa memoriji za svaki od slu~ajeva.

Zadatak 2.15

Koriste}i tro-adresni format instrukcija napisati programske sekvence za ~itanje i upis u: a) magacin koji raste - nani`e b) magacin koji raste - navi{e c) red ~ekanja tipa FIFO d) red ~ekanja tipa LIFO Napomena: Koristiti skup naredbi hipoteti~kog procesora

Zadatak 2.16

Za dvo-adresni format instrukcija napisati procedure za ~itanje i upis u red ~ekanja tipa FIFO koriste}i: a) direktno adresiranje b) indirektno adresiranje c) relativno adresiranje Napomena: Koristiti skup naredbi hipoteti~kog procesora

Zadatak 2.17

Page 24: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-23

Napisati procedure za izbacivanje i dodavanje elemenata u povezanoj listi. Usvojiti da svaki elemenat liste koristi dve memorijske re~i, jedna sadr`i vrednost podataka a druga adresu narednog elementa u listi. Koristiti samo tro-adresni format instrukcija za slu~ajeve kada se radi pristupa elementima liste koriste slede}i na~ini adresiranja: a) direktno adresiranje b) indirektno adresiranje. Napomena: Koristiti skup naredbi hipoteti~kog procesora

Zadatak 2.18

Kreirati sekvencu instrukcija koja se koristi za izra~unavanje sume ∑=

100

1iii xa , gde A=[a1, a2,..., a100] i

X=[x1, x2,...,x100] predstavljaju vektori sme{teni u glavnoj memoriji. Koristiti dvo-adresni format instrukcija za slu~ajeve kada se radi pristupa elementima vektora koriste slede}i na~ini adresiranja: a) direktni b) relativni c) indeksni sa autoinkrementiranjem. Napomena: Koristiti skup naredbi hipoteti~kog procesora

Test pitanje 2.19

Kako se odre|uje memorijska adresa, kod sistema zasnovanog na mikroprocesoru 80x86, instrukcije Mov [3000h],AL, ako je DS=1000h.

Odgovor

Registar AL memorijska adresa13000h

DS*10h+DISP10000h+3000h

memorijskaadresa

memorijskalokacija

Test pitanje 2.20

Neka procesor 80x86 izvr{ava instrukcije u realnom na~inu rada. Ako su DS=0200h, BX=0300h i DI=400h, odrediti kojim se memorijskim adresama pristupa od strane slede}ih instrukcija: a) Mov AL,[1234h] b) Mov EAX,[BX] c) Mov [DI],AL

Odgovor a) DS*10h+DISP=2000h+1234h=3234h b) DS*10h+BX=2000h+300h=2300h c) DS*10h+DI=2000h+400h=2400h

Test pitanje 2.21

Mikroprocesor 80x86 radi u realnom na~inu rada. Ako su DS=1100h, LIST EQU 250h, SI=500h i BX=200h, odrediti kojim se memorijskim adresama pristupa od strane slede}ih instukcija: a) Mov LIST[SI],EDX b) Mov CL,LIST[BX+SI] c) Mov CH,[BX+SI]

Page 25: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-24

Odgovor a) DS*10h+SI+LIST=11000h+0500h+0250h=11750h b) DS*10h+BX+SI+LIST=11000h+0200h+0500h+0250h=11950h c) DS*10h+BX+SI=11000h+0200h+0500h=11700h

Test pitanje 2.22

Na asemblerskom jeziku mikrora~unara 80x86 kreirati strukturu podataka pod nazivom POLJA. Strukturu ~ine pet polja svako obima 16-bitova. Polja su imenovana kao F1, F2, F3, F4 i F5 i inicijalizirana su na vrednosti 1, 2, 3, 4 i 5, respektivno. Kojom se instrukcijom dobavlja sadr`aj polja F3 u registar AX.

Odgovor POLJA STRUC ; kreiranje i inicijalizacija strukture F1 DW 1 F2 DW 2 F3 DW 3 F4 DW 4 F5 DW 5 POLJA ENDS Pristup podatku koji se ~uva u polju F3 vr{i se slede}om instrukcijom: Mov AX,OFFSET POLJA.F3

Test pitanje 2.23

Pet razli~itih segmenata egzistiraju u sistemu. Segmenti se koriste na slede}i na~in: (a) isklju~ivo programski (kôdni); (b) ~uvaju se samo konstante; (c) namenjen je kao bafer za brze U/I operacije; (d) standardni segment podataka; (e) segment magacina. Za svaki od pomenutih segmenata definisati koja su prava pristupa dozvoljena a koja zabranjena.

Odgovor tip samo ~itanje samo izvr{enje samo upis ~itanje + upis ~itanje + izvr{enje (a) + (b) + (c) + (d) + (e) +

Test pitanje 2.24 Nakon izvr{enja slede}ih sekvenci na asemblerskom jeziku mikroprocesora 80x86: a) MOV BH,38h ADD BH,2Fh b) MOV AL,9Ch MOV DH,64h ADD AL,DH c) MOV AX,34F5h ADD AX,95EBh

Page 26: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-25

d) MOV BX,AAAAh ADD BX,5556h e) MOV AX,94C2h MOV BX,323Eh ADD AX,BX MOV DX,AX MOV CX,DX Odrediti u koje se stanje postavljaju markeri uslova CF, PF, AF, ZF i SF .

Odgovor a) MOV BH,38h ;BH = 38h ADD BH,2Fh ;38h + 2Fh = 67h = BH 38 0 0 1 1 1 0 0 0 + 2F + 0 0 1 0 1 1 1 1 67 0 1 1 0 0 1 1 1 CF = 0, PF = 0, AF = 1, ZF = 0, SF = 0 b) MOV AL,9Ch ; AL = 9Ch MOV DH,64h ; DH = 64h ADD AL,DH ; ⇒ AL = 0 9 C 1 0 0 1 1 1 0 0 + 6 4 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 CF = 1, PF = 1, AF = 1, ZF = 1, SF = 0 c) MOV AX,34F5h ; AX = 34F5h ADD AX,95EBh ; AX = CAE0h 3 4 F 5 0 0 1 1 0 1 0 0 1 1 1 1 0 1 0 1 + 9 5 E B 1 0 0 1 0 1 0 1 1 1 1 0 1 0 1 1 CA E 0 1 1 0 0 1 0 1 0 1 1 1 0 0 0 0 0 CF = 0 , PF = 0, AF = 1, ZF = 0, SF = 1 d) MOV BX,AAAAh ; BX = AAAAh ADD BX,5556h ; BX = 0000h AAAA 1 0 1 0 1 0 1 0 1 0 1 0 1 01 0 + 5 5 5 6 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 CF = 1, PF = 1, AF = 1, ZF = 1, SF = 0 e) MOV AX,94C2h ; AX = 94C2h MOV BX,323Eh ; BX = 323Eh ADD AX,BX ; AX = C700h MOV DX,AX ; DX = C700h MOV CX,DX ; CX = C700h

Page 27: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-26

nakon sabiranja 9 4 C 2 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 + 3 2 3 E 0 0 1 1 0 0 1 0 0 0 1 1 1 1 1 0 C 7 0 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 CF = 0, PF = 0, AF =1, ZF = 0, SF = 1

Test pitanje 2.25

Ukazati u kratkim crtama na ulogu prefiksa 66h kojim se odre|uje obim operanda i prefiksa 67h kojim se odre|uje obim adrese kod mikroprocesora i386.

Odgovor Opkôd slede}e dve instrukcije Mov EAX,[01h] i Mov AX,[01h] u oba slu~aja je isti i jednak je 10111000. Ipak mikroprocesor i386 pravi razliku izme|u ova dva opkôda samo na osnovu DB bita u deskriptoru kôdnog segmenta i prefiksa 66h kojim se ukazuje na obim operanda. Ako je DB bit u deskriptoru kôdnog segmenta postavljen na nulu, i386 standardno koristi 16-bitni razme{taj. Tada asembler na slede}i na~in vr{i kodiranje : ispred opkôda instrukcije Mov EAX, [01h] ubacuje se prefiks 66h koji ukazuje na obim operanda, tako da se sada javljaju slede}a dva slu~aja: (a1) Mov EAX,[01h] : 66 B8 00 01h (instrukcijom se prenosi 32-bitna vrednost sa ofset adrese o1h u 32-bitni akumulator EAX) (a2) Mov AX,[01h] : B8 00 01 (instrukcijom se prenosi 16-bitna vrednost sa ofset adrese 01h u 16-bitni akumulator AX) Kada je DB bit u odgovaraju}em deskriptoru segmenta podataka postavljen na 1, tada i386 standardno koristi 32-bitni razme{taj kao standard, a asembler vr{i kodiranje na slede}i na~in: ispred opkôda instrukcije ubacuje prefiks 66h koji ukazuje na obim operanda. Konkretnije ima}emo slede}a dva slu~aja: (b1) Mov EAX,[01h] : B8 00 01 (instrukcijom se prenosi 32-bitna vrednost sa ofset adrese 01h u 32-bitni akumulator EAX) (b2) Mov EAX, [01h] : 66 B8 00 01 (instrukcijom se prenosi 16-bitna vrednost sa ofset adrese 01h u 16-bitni akumulator AX) Na sli~an na~in prefiks 67h odre|uje obim adrese operanda kao na primer kod instrukcije Mov AX,mem16 i Mov EAX,mem32. Obja{njenje je identi~no kao i za prefiks 66h.

Test pitanje 2.26

Neka je zadata slede}a 16-bitna vrednost : 1010 1100 1110 0011. Koje operacije moraju da se obave od strane procesora 80x86 kako bi se: a) osam LS bitova postavilo na 1? b) prvih osam bitova 16-bitne vrednosti postavilo na 0? c) komplementirale vrednosti srednjih osam bitova? Napomena : Uzeti da je 16-bitna vrednost neposredna; Koristiti instrukcije procesora 80x86.

Odgovor a) Mov AX,#0ACD3h ; 1010110011100011 - binarno Or AL,#0FFh b) Mov AX,#0ACD3h And AH,#00h

Page 28: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-27

c) Mov AX,#0ACD3h Rol AX,4 ; rotiraj ulevo za ~etiri mesta Xor AH,#0FFh ; komplementiraj AH Ror AX,4 ; rotiraj udesno za ~etiri mesta

Test pitanje 2.27

Ukazati na koji se na~in marker ZF mikroprocesora 80x86 koristi za implementaciju programskih petlji.

Odgovor Termin programska petlja (program loop) se odnosi na skup instrukcija ~ije se izvr{enje ponavlja nekoliko puta. Na primer, da bi se sabralo pet bajtova podataka, neophodno je postaviti broja~ koji ~uva trag o tome koliko puta treba ponoviti programsku petlju. Svaki put kada se izvr{i sabiranje broja~ se dekrementira a marker ZF se testira. Kada broja~ dostigne vrednost 0 marker ZF se postavi (ZF=1) i izvr{enje petlje stopira. Programska sekvenca kojom se obavlja specificirana aktivnost oblika je MOV CX,05 ; CX je broja~ MOV BX,0200h ; BX ~uva ofset adresu podatka MOV AL,00 ; inicijalizira se AL PONOVI: ADD AL,[BX] ; AL = AL + naredni bajt INC BX ; inkrementira se broja~ podataka DEC CX ; dekrementira se broja~ petlje JNZ PONOVI ; skok na narednu iteraciju ako broja~ nije nula

Test pitanje 2.28

Ukazati, odgovaraju}im primerom, kako se u programu na asemblerskom jeziku mikroprocesora 80x86 defini{u segmenti magacina, podataka i kôda.

Odgovor I pored toga {to je mogu}e napisati program na asemblerskom jeziku koji koristi samo jedan segment, uobi~ajeno je da se program sastoji od najmanje tri segmenta: segment magacina, segment podataka i kodni segment. Direktive 'SEGMENT' i "ENDS" koje ukazuju na po~etak i kraj segmenta imaju slede}i format:

labela SEGMENT [opcije]

; iskazi koji pripadaju segmentu labela ENDS

Ime labela koje se nalazi ispred direktiva SEGMENT i ENDS je identi~no i jedinstveno. Polje [opcije] daje va`nu informaciju asembleru koja se odnosi na organizaciju segmenta, ali nije obavezno. Asemblersko jezi~ki iskazi grupisani su u segmente sa ciljem da se prepoznaju od strane asemblera a shodno tome i od CPU-a. Segmentom magacin defini{e se memorijski prostor za magacin, segmentom podataka defini{u se podaci koji }e program da koristi, a kôdni segment sadr`i (~ine ga) instrukcije na asemblerskom jeziku. Jedan jednostavan program na asemblerskom jeziku prikazan je na Slici 2.18.

; forma programa na asemblerskom jeziku procesora 80x86 STEKSEG SEGMENT

Page 29: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-28

DB 64 DUP(?) STEKSEG ENDS ; ******************************************* DATASEG SEGMENT POD1 DB 26 h POD2 DB 29 h SUMA DB ? DATASEG ENDS ; ******************************************* KODSEG SEGMENT GL_PROG PROC FAR ; po~etna ta~ka programa ASSUME CS:KODSEG, DS:DATASEG, SS:STEKSEG MOV AX, DATASEG ;napuni adresu segmenta podataka MOV DS, AX ; dodeli vrednost DS-u MOV AL, POD1 ; dobavi prvi operand MOV BL, POD2 ; dobavi drugi operand ADD AL, BL ; saberi operande MOV SUMA, AL ; smesti rezultat u lokaciju SUMA MOV AH, 4Ch ; postavi se za INT 21h ; povratak u DOS

GL_PROG ENDP KODSEG ENDS

END GL-PROG ; izlazna ta~ka programa

Slika 2.18 : Jednostavan program na asemblerskom jeziku

Segment magacina sadr`i liniju "DB 64 DUP (?)". Ovom direktivom rezervi{e se memorijski prostor obima 64-bajta za potrebe magacina. U segmentu podataka definisane su tri stavke: POD1, POD2, i SUMA, svaka obima bajt. Prva direktiva u kôdnom segmentu nakon SEGMENT direktive je direktiva PROC. Procedura predstavlja grupu instrukcija koja je namenjena da obavi specifi~nu funkciju. Program sa Slike 2.18 sastoji se od jedne procedure, ali uobi~ajeno po nekoliko malih procedura, u su{tini, ~ine program struktuiranijim. Svakoj proceduri se dodeljuje ime. Direktive PROC i ENDP mora da imaju istu oznaku (labelu). PROC direktiva mo`e da ima opciju NEAR i FAR. DOS zahteva da ulazna ta~ka korisni~kog programa bude procedura tipa FAR. Odmah nakon direktive PROC sledi direktiva ASSUME. Ova direktiva ukazuje asembleru koji }e od segmenata definisanih direktivama SEGMENT biti kori{}eni. Obi~no DOS dodeljuje ta~ne vrednosti segmentnim registrima CS i SS, dok se vrednost registra DS (i ES ako se koristi) mora inicijalizirati od strane programa kako je to prikazano na sl. 2.18. Zadnje dve instrukcije jezgra programa su MOV AH,4Ch INT 21h Namena ovih instrukcija je da vrate upravljanje radom CPU-a operativnom sistemu, u konkretnom slu~aju DOS-u. Zadnje tri linije ukazuju na kraj procedure, kôdnog segmenta i glavnog programa respektivno. Treba uo~iti da labela koja prethodi ENDP (GL_PROG) mora biti identi~na sa labelom koja prethodi direktivu PROC, a isti zaklju~ak va`i i za ENDS i SEGMENT (prethodi im ista labela KODSEG). Pseudo-instrukcijom END zavr{ava se ceo program i ukazuje DOS-u da je po~etnoj-ta~ki-programa kraj. Iz tog razloga labele za po~etnu-ta~ku-programa i END moraju biti identi~ne.

Test pitanje 2.29

Slede}i program napisan na asemblerskom jeziku mikroprocesora 80x86 ima pet gre{aka. Ukazati koje su to. STEKSEG SEGMENT DB 100 DUP ( ?)

Page 30: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-29

STE_SEG ENDS DATASEG SEGMENT POD1 DB ? DATASEG END KODSEG SEGMENT GL_PROG PROC FAR MOV AX,DATASEG MOV DS,AX MOV AL,34h ADD AL,4Fh MOV POD1,AL POCETAK ENDP KODSEG ENDS END Odgovor STEKSEG SEGMENT DB 100 DUP ( ?) *** STE_SEG ENDS DATASEG SEGMENT POD1 DB ? *** DATASEG END KODSEG SEGMENT GL_PROG PROC FAR *** ASSUME ; nema ASSUME u izvornom kôdu MOV AX,DATASEG MOV DS,AX MOV AL,34h ADD AL,4Fh MOV POD1,AL *** POCETAK ENDP KODSEG ENDS *** END Pogre{an kôd je ozna~en sa <***> shodno komentaru u prethodnoj liniji

Test pitanje 2.30

Tri koraka u procesu kreiranja izvr{ivih programa na asemblerskom jeziku mikroprocesora 80x86 prikazana su na Slici 2.19. Popuniti podacima ostale pozicije i ukazati na karakteristike fajlova sa ekstenzijom .asm, .obj, .crf, .map i .exe.

Odgovor Korak Ulaz Program Izlaz 1. Program za editovanje tastatura mojfajl.asm 2. Asembliranje programa mojfajl.asm MASM mojfajl.obj 3. Linkovanje programa mojfajl.obj LINK mojfajl.exe

Slika 2.19 : Koraci u procesu kreiranja izvr{ivih programa Napomena: U {rafiranoj oblasti nalaze se odgovori Vizuelne prezentacije efekata koraka na Slici 2.19 prikazani su na Slici 2.20. • "asm" fajl (izvorni fajl) kreira se od strane tekst procesora ili linijskog editora.

Page 31: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-30

• MASM asembler konvertuje .asm fajlove (instrukcije na asemblerskom jeziku) u ".obj" fajlove (fajl na ma{inskom jeziku)

• pored kreiranja objektnog programa MASM kreira i ".lst" fajl (listing fajl). ".lst" fajl je opcioni i veoma koristan programeru jer on lista sve opk�d i ofset adrese kao i sve gre{ke koje detektuje MASM.

• MASM generi{e i jedan opcioni fajl koji ima ekstenziju ".crf". On obezbedjuje alfabetsku listu svih simbola i labela koje se koriste u programu kao i broj linije u programu kada im se vr{i obra}anje.

• kada u programu postoji ve}i broj kôdnih segmenata i segmenata za podatke postoji i potreba da se sazna gde se svaki od tih segmenata locira i koliki je obim u bajtovima svaki od njih. Ovu informaciju pru`a fajl se ekstenzijom .map. Fajl sa ekstenzijom .map je opcioni i daje ime svakog segmenta, gde svaki segment po~inje, gde zavr{ava i koliki je njegov obim u bajtovima.

• fajl sa ekstenzijom .exe je izvr{ivi Napomena: Postoje dve asemblerske direktive koje se koriste da u~ine fajl sa ekstenzijom .lst ~itljivijim, a to su PAGE i TITLE. Format PAGE direktive je PAGE [linije],[kolone] ova direktiva ukazuje {tampa~u kako treba da se kuca tekst. Na primer PAGE 70.92 zna~i da }e se na jednoj stranici kucati 72 linije, a u svakoj liniji po 92 znakova. Tekst nakon pseudo instrukcije TITLE unosi programer i on na jedan bli`i na~in treba da opi{e (asocira) koja je namena programa i za {ta se koristi.

ASEMBLER(program)

EDITOR

(program)

LINKER(program)

mojfajl.asm

mojfajl.crtdrugi.objfajlovi

mojfajl.map

mojfajl.exe

mojfajl.lst

Slika 2.20 Koraci u generisanju izvr{ivih programa

Zadatak 2.19

Stepen inteligencije pet testiranih studenata je slede}i 82, 76, 73, 94 i 70. Napisati programsku sekvencu za odredjivanje najvi{eg stepena inteligencije.

Odgovor

Page 32: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-31

TITLE TESTIRANJE PAGE 80,100 SMAG SEGMENT DB 80 DUP (?) SMAG ENDS ;----------------------------------------------------------------------------------- SPOD SEGMENT KOEFIC DB 82,76,73,94,70 NAJVISI DB ? SPOD ENDS ;----------------------------------------------------------------------------------- SPROG SEGMENT PROG_1 PROC FAR

ASSUME CS:SPROG,DS:SPOD,SS:SMAG MOV AX,SPOD MOV DS,AX MOV CX,5 ; postavi broja~ MOV BX,OFFSET KOEFIC ;BX ukazuje na KOEFIC SUB AL,AL ; AL=0 i ~uva NAJVISI koeficijent PONOVI: CMP AL,[BX] ; uporedi naredni sa najvi{im JA NAREDNI ; skok ako je AL najvi{i MOV AL,BX ; AL ~uva novi najvi{i NAREDNI: INC BX ; uka`i na naredni koeficijent

LOOP PONOVI ; produ`i pretra`ivanje MOV NAJVISI,AL ; sa~uvaj najvi{i koeficijent MOV AH,4Ch ; povratak na DOS INT 21h PROG_1 ENDI SPROG ENDS END PROG_1

Zadatak 2.20

ASCII kôdovi za mala i velika slova prikazani su na Slici 2.21.

slovo Heksa decimalna vrednost slovo Heksa decimalna vrednost A 41 a 61 B 42 b 62 C 43 c 63 D 44 d 64 . . . . . . . . . . . . . . . . Y 59 y 79 Z 5A z 7A

Slika 2.21: ASCII kodovi za mala i velika slova

Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 za konverziju tekstva 'moJE IME je mILe' u niz velikih slova.

Odgovor TITLE KONVERZIJA U VELIKA SLOVA

Page 33: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-32

PAGE 80,100 SMAG SEGMENT DB 128 DUP (?) SMAG ENDS ;----------------------------------------------------------------------------------- SPOD SEGMENT POD1 DB 'moJE IME je mILe' POD2 DB 16 DUP(?) SPOD ENDS ;----------------------------------------------------------------------------------- SPROG SEGMENT KON PROC FAR ASSUME CS:SPROG,DS:SPOD,SS:SMAG MOV AX,SPOD MOV DS,AX MOV SI,OFFSET POD1 ; SI pokazuje na po~etni niz MOV DI,OFFSET POD2 ; DI pokazuje na konvertovani niz MOV CX,16 ; CX je broja~ simbola u nizu

PONOVI: MOV AL,[SI] ; dobavi naredni znak CMP AL,61h ; da li je manji od 'a'

JB IZNAD ; nema potrebe za konverzijom CMP AL,7Ah ; da li je ve}e od 'z' JA IZNAD ; nema potrebe za konverzijom AND AL,11011111b ; maskiraj DS bit poziciju za konverziju ; znaka u veliko slovo IZNAD MOV [DI],AL ; smesti veliko slovo INC SI ; pove}aj pokaziva~ po~etnog niza INC DI ; pove}aj pokaziva~ velikih slova LOOP PONOVI ; produ`i ako je CX=0 MOV AH,4Ch INT 21h ; povratak na DOS KON ENDP SPROG ENDS END KON

Zadatak 2.21

Niz od 10 ASCII znakova sme{ten je u segmentu podataka po~ev od ofset adrese 0010h na slede}i na~in: ASC DB "8473251064" ORG 0010h NEPAK DB 10 DUP(?) Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 za konverziju ASCII znakova u nepakovane BCD brojeve.

Odgovor Odgovaraju}i ASCII formati u heksadecimalnom i binarnom kôdu kao i BCD nepakovanom kôdu su oblika

dirka ASCII (hex) binarni BCD nepakovani 0 30 0011 0000 0000 0000

Page 34: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-33

1 31 0011 0001 0000 0001 2 32 0011 0010 0000 0010 . . . . . . . . . . . . 8 38 0011 1000 0000 1000 9 39 0011 1001 0000 1001

Konverzija ASCII kôda u nepakovani BCD kôd vr{i se logi~kom operacijom And ASCII broja sa "0000 1111" (0Fh). Programska sekvenca za konverziju je oblika: MOV CX,5 MOV BX,OFFSET ASC ; BX pokazuje na ASCII podatke MOV DI,OFFSET NEPAK ; DI pokazuje na "nepakovane" BCD PONOVI: MOV AX,[BX] ; kopiraj dva naredna ASCII u AX AND AX,0F0Fh ; poni{ti ASCII MS 3 MOV [DI],AX ; smesti nepakovani BCD ADD DI,2 ; uka`i na naredni BCD ADD BX,2 ; poka`i na naredni ASCII LOOP PONOVI Karakteristi~no za ovu sekvencu je slede}e: I pored toga {to je podatak definisan direktivom DB, njemu se pristupa kao 16-bitnom. Alternativno re{enje se zasniva na kori{}enju PTR direktive MOV CX,5 MOV BX,OFFSET ASC MOV DI,OFFSET NEPAK PONOVI: MOV AX,WORD PTR[BX] ; kopiraj dva bajta u AX AND AX,0F0Fh MOV WORD PTR[DI],AX ; smesti nepakovani BCD ADD DI,2 ADD BX,2 LOOP PONOVI Interesantno je takodje i re{enje koje umesto dva pokaziva~a koristi jedan pokaziva~ kao {to je slede}e MOV CX,10 ; puni se broja~ SUB BX,BX ; BX = 0 PONOVI: MOV AL,ASC[BX] ; AL = M[BX + ASC] AND AL,0Fh ; maskira se MS nibl MOV NEPAK[BX],AL ; AL M[BX + NEPAK] INC BX ; pove}aj pokaziva~ LOOP PONOVI Operandi kojima se pristupa su obima bajt. Za slu~aj da se pristupa operandima tipa re~ treba izvr{iti slede}u modifikaciju MOV CX,5 SUB BX,BX PONOVI: MOV AX,WORD PTR ASC[BX] AND AX,0F0Fh MOV WORD PTR NEPAK[BX],AX ADD BX,2 LOOP PONOVI

Zadatak 2.22

Page 35: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-34

Preko tastature se prihvataju dva ASCII kodirana broja 38h i 32h. Kreirati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 kojom se vr{i konvertovanje ASCII kodiranih brojeva u pakovani BCD format.

Odgovor Konverzija ASCII u pakovani BCD, vr{i se prvo konverzijom u nepakovani BCD a zatim njihovom kombinacijom se dobija pakovani BCD. Na primer kada se pritisnu dirke 8 i 2 tastatura generi{e kodove 38h i 32h, respektivno. Cilj je da se dobije 82h ili 10000010h koji se zove pakovani BCD broj. Programska sekvenca pomo}u koje se mo`e obaviti specificirana aktivnost ima oblik: ORG 0010h ; ofset adresa podataka VRED_ASC DB '82' ; na ofset adresi 0010h je 38,. a VRED_PBCD DB ? ; na ofset adresi 0011h je 32 MOV AX,WORD PTR VRED_ASC ; AH = 32, AL = 38 AND AX,0F0Fh ; maskiranje XCHG AH,AL ; AH↔AL MOV CL,4 ; CL = 4 radi pomeranja SHL AH,CL ; pomeri ulevo AH da bi dobio AH=80h OR AL,AH ; OR da bi se dobio pakovani BCD MOV VRED_PBCD,AL ; smesti rezultat Napomena: Obratiti pa`nju na LE notaciju kod pribavljanja podataka iz memorije u registar AX.

Zadatak 2.23

Kreirati programsku sekvencu, na asemblerskom jeziku mikroprocesora 80x86, koja je namenjena za konverziju pakovanog BCD broja 29 h u odgovaraju}i ASCII.

Odgovor Kod konverzije pakovanog BCD broja u odgovaraju}i ASCII, mora da se izvr{i prvo konverzija u nepakovani BCD a zatim u ASCII, shodno slede}em postupku: pakovani BCD napakovani BCD ASCII 29 h 02 h & 09 32 h & 39 0010 1001 0000 0010 & 0000 1001 0011 0010 & 0011 1001 Programska sekvenca bi}e oblika VRED_PBCD DB 29h VRED_ASC DW ? -------------- MOV AL,VRED_PBCD MOV AH,AL ; AL = AH, AL = 29 h, AH= 29h AND AX,0F00h ; maskiraj 9 od AH i 2 od AL MOV CL,4 ; pomeri udesno AH za nepakovani BCD SHL AH,CL OR AX,3030h ; kombinuj 30 da se dobije ASCII

XCHG AH,AL ; izvr{i konverziju radi LE formata MOV VRED_ASC,AX ; smesti ASCII

Zadatak 2.24

Page 36: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-35

Napisati program, na asemblerskom jeziku mikroprocesora 80x86, kojim se vr{i sabiranje slede}a dva broja BROJ1=52763198CD87h i BROJ2=3FC7DAB47BE8h. BROJ1, BROJ2 i SUMA su sme{teni u segmentu podataka po~ev od ofset adresa 0010h, 0020h i 0030h, respektivno.

Odgovor TITLE PROGSAB SABIRANJE PAGE 80,100 SMAG SEGMENT DB 64 DUP (?) SMAG ENDS ;--------------------------------------------------------------------------------------------------------------- SPOD SEGMENT BROJ1 DQ 52763198CD87h ORG 0010h BROJ2 DQ 3FC7DAB47BE8h ORG 0020h SUMA DQ ? ORG 0030h SPOD ENDS ; ------------------------------------------------------------------------------------------------------------ SKOD SEGMENT SAB PROC FAR ASSUME CS:SKOD,DS:SPOD,SS:SMAG MOV AX,SPOD MOV DX,AX CLC ; obri{i prenos pre prvog sabiranja MOV SI,OFFSET BROJ1 ; SI pokazuje na BROJ1 MOV DI,OFFSET BROJ2 ; DI pokazuje na BROJ2 MOV BX,OFFSET SUMA ; BX pokazuje na SUMA MOV CX,4 ; CX je broja~ PONOVI: MOV AX,[SI] ; prvi operand u AX ADC AX,[DI] ; saberi drugi operand sa AX MOV [BX],AX ; smesti sumu ADD SI,2 ; inkrementiranje pokaziva~a ADD DI,2 ADD BX,2 LOOP PONOVI ; ako nije kraj produ`i MOV AH,4Ch INT 21h ; povratak na DOS SAB ENDP SKOD ENDS ENDS SAB

Test pitanje 2.31

Izvr{iti analizu slede}e programske sekvence

POD_A DD 62562FAh POD_B DD 412963Bh RAZLIKA DD ? ------------------------- MOV AX,WORD PTR POD_A ; AX = 62FA SUB AX,WORD PTR POD_B ; oduzmi 963B od AX

Page 37: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-36

MOV WORD PTR RAZLIKA,AX ; sa~uvaj rezultat MOV AX,WORD PTR POD_A+2 ; AX = 0625 SBB AX,WORD PTR POD_B+2 ; oduzmi 0412 sa pozajmljivanjem MOV WORD PTR RAZLIKA+2,AX ; smesti rezultat i odrediti kona~nu vrednost koja je sme{tena na lokaciji RAZLIKA.

Odgovor Nakon SUB, AX=62FA-963B=CCBF i CF=1. Kako je CF=1 kada se obavi SBB ima}emo AX=625-412-1=212. Zbog toga vrednost sme{tena u RAZLIKA=0212CCBFh.

Test pitanje 2.32

Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 kojom se odredjuje broj jedinica u bajtu.

Odgovor ; u segmentu podataka POD1 DB 63h ; proizvoljno uzet broj BROJ DB ? ; u k�dnom segmentu SUB BL,BL ; BL = 0 ~uva broj jedinica MOV DL,8 ; broja~ rotacija MOV AL,POD1 PONOVI: ROL AL,1 ; rotiraj jednu bit poziciju JNC NAREDNI ; proveri za 1 INC BL ; ako je CF = 1 dodaj 1 broja~u NAREDNI: DEC DL ; dekrementiraj broj rotiranja JNZ PONOVI ; ako nije zavr{en ponovi MOV BROJ,BL ; smesti broj jedinica u broj

Test pitanje 2.33

Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 kojom se broji broj jedinica u re~i. Broj jedinica zapamtiti u BCD formatu.

Odgovor ; u segmentu podataka POD2 DW B483h ; proizvoljno uzet broj BROJ2 DB ? ; u kodnom segmentu SUB AL,AL ; AL = 0 ~uva broj jedinica u BCD MOV DL,16 ; 16 rotiranja MOV BX,POD2 ; kopiraj operand u BX PONOVI: ROL BX,1 ; rotiraj jednu bit poziciju JNC NAREDNI ; proveri za 1, ako je CF = 0 ska~i ADD AL,1 ; ako je CF = 1 dodaj 1 broja~u DAA ; podesi broja~ za BCD NAREDNI: DEC DL ; prodji kroz sekvencu 16 puta JNZ PONOVI ; ako nije kraj ponovi MOV BROJ2,AL ; smesti broj jedinica u BROJ 2

Test pitanje 2.34

Page 38: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-37

Da li slede}e dve programske sekvence na asemblerskom jeziku mikroprocesora 80x86 imaju isti efekat? ; programska sekvenca 1 MOV BH,72h ROL BH,1 ROL BH,1 ROL BH,1 ROL BH,2 ; programska sekvenca 2 MOV BH,72h MOV CL,4 ROL BH,CL

Test pitanje 2.35

Da li su slede}e dve programske sekvence na asemblerskom jeziku mikroprocesora 80x86 imaju isti efekat? ; programska sekvenca 1 CLC MOV AL,26h RCR AL,1 RCR AL,1 RCR AL,1 ; programska sekvenca 2 CLC MOV AL,26h MOV CL,3 RCR AL,CL

Test pitanje 2.36

Za{to instrukcija "ROR BX,4" generi{e gre{ku na asemblerskom jeziku mikroprocesora 80x86? Kako treba promeniti k�d da bi se ona korektno izvr{ila tj. da bi se ostvario njen efekat?

Odgovor Mo`e samo ROR BX,1. Vi{estruko pomeranje se mo`e implementirati ako se instrukcija ponovi ~etiri puta ili ako se inicijalizuje registar CL na broj pomeranja, a zatim izvr{i instrukcija ROR BX,CL.

Test pitanje 2.37

Kakva }e biti vrednost BX i CF nakon izvr{enja slede}ih sekvenci na asemblerskom jeziku mikroprocesora 80x86? a) MOV BX,672Ah MOV CL,3 ROL BX,CL b) STC MOV BX,37F1h MOV CL,5 RCR BX,CL c) CLC

Page 39: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-38

MOV BX,191Ch MOV CL,5 RCL BX,CL d) SUB BX,BX STC RCR BX,1 STC RCR BX,1 e) MOV BX,0FFFFh MOV CL,5 CLC RCL BX,CL

Test pitanje 2.38

Objasniti razlike izmedju pojmova potpuna definicija segmenata (full segment definition) i pojednostavljena definicija segmenata (simplified segment definition) kada se govori o programiranju na asemblerskom jeziku mikroprocesora 80x86.

Odgovor Procesor 80x86 uobi~ajeno (u najve}em broju slu~ajeva) koristi ~etiri segmentna registra: CS (kôdni segment), DS (segment podataka), SS (segment magacina) i ES (ekstra segment). Svaka linija u programu na asemblerskom jeziku mora da pripada (odgovara) jednom od ovih segmenata. Zadnjih godina novi metod segmenata je uveden (podr`avan) od strane Microsoft-ov MASM 5.0 i navi{e, Borland-ova TASM verzija 1 pa navi{e, i od strane drugih kompatibilnih asemblera. Ovaj metod se zove format sa pojednostavljenom definicijom, a njegova stu{tina se sastoji u tome {to koristi tri jednostavne direktive: ".CODE", ".DATA" i ".STACK", koje odgovaraju registrima CS, DS i SS, respektivno. Koriste}i ove direktive kori{}enje direktiva SEGMENT i ENDS ~ini nepotrebnim. U su{tini pojednostavljena definicija segmenata je lak{a za razumevanje i kori{}enje, posebno za po~etnike. Pre nego {to se koristi pojednostavljena definicija segmenata neophodno je izabrati memorijski model za program koji se kreira. Uglavnom se koriste slede}i memorijski modeli: • SMALL model - jedan od naj~e{}e kori{}enih modela, koji koristi 64kB memorija za program i

64kB za podatke • MEDIUIM model - podaci moraju se smestiti u 64kB, a program mo`e biti ve}i od 64kB. • COMPACT model - suprotan je modelu MEDIUM, tj. program se mora smestiti u 64kB, a podaci

u prostor ve}i od 64kB. • LARGE model - kombinovanjem prethodna dva modela dobija se LARGE model, tj. i kôd i

podatke mogu biti ve}i od 64kB. Jedinstvena struktura podataka kao {to je polje (vektor, matrica,...) ne sme da prema{i 64kB.

• HUGE model - program i podaci mogu da prema{e 64kB a takodje i jedinstvena struktura podataka mo`e biti ve}a od 64kB.

Postoji takodje, jo{ jedan model nazvan TINY. Ovaj model se koristi sa COM fajlovima kod kojih ukupna memorija program plus podaci ne sme da prema{i 64kB. TINY model se ne mo`e koristiti u sklopu pojednostavljene definicije segmenata. Na Slici. 2.22 ilustracije radi za jedan isti program prikazana je uporedna prezentacija potpune i pojednostavljene definicije segmenata. ; potpuna definicija segmenata ; pojednostavljena definicija segmenata ; --------- segment magacina ---- .MODEL SMALL SMAG SEGMENT .STACK 64

Page 40: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-39

DB 64 DUP (?) ; SMAG ENDS ; ; --------- segment podataka ----- ; ---------------------------------------------------- SPOD SEGMENT .DATA POD_1 DW 1234h POD_1 DW 1234h POD_2 DW 5678h POD_2 DW 5678h REZ DW ? REZ DW ? SPOD ENDS ; ; -------- programski segment ____ ; --------------------------------------------------- SPROG SEGMENT .CODE SABERI PROC FAR SABERI: MOV AX,@DATA ASSUME CS:SPROG MOV DS,AX MOV AX,SPOD ... MOV DS,AX ... ... ... SABERI ENDP ... SPROG ENDS ... END SABERI END SABERI

Slika 2.22 Potpuna u odnosu na pojednostvljenu definicija segmenata

Jedan jednostavan program koji koristi pojednostavljenu definiciju segmenata prikazan je na Slici. 2.23. TITLE PROG 1 pojednostavljena definicija segmenta PAGE 60,132 .MODEL SMALL .STACK 32 .DATA

POD_1 DW 1234h,4892h,3D87h,28E0h ORG 10h

SUMA DW ? .CODE POCETAK: MOV AX,@DATA MOV DS,AX MOV CX,4 ; CX = 4, broja~ MOV DI,OFFSET POD_1 ; postavi pokaziva~ SUB BX,BX ; inicijaliziraj sumu BX SABERI: ADD BX,[DI] ; dodaj novu re~ na BX INC DI ; inkrementiraj pokaziva~ INC DI DEC CX ; dekrementiraj broja~ JNZ SABERI ; granaj se ako je CX = 0 MOV SI,OFFSET SUMA ; postavi pokaziva~ MOV [SI],BX ; smesti sumu MOV AH,4Ch INT 21h ; povratak na DOS END POCETAK

Slika 2.23 : Program za sabiranje ~etiri re~i koji koristi pojednostavljenu definiciju segmenata

Kod programa sa Slike 2.23, redosled segmenata nije od va`nosti, ali to zna~i da su segmenti kodirani u slede}em redosledu .STACK .DATA

Page 41: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-40

.CODE Napomenimo da se program mo`e kodirati i u obrnutom redosledu .CODE .DATA .STACK kako je to prikazano na Slici 2.24. TITLE PROG 2 pojednostavljena definicija segmenta PAGE 60,132 .MODEL SMALL .CODE GL_P MOV AX,@DATA MOV DS,AX MOV SI,OFFSET POD_1 ; SI pokaziva~ izvornih podataka MOV DI,OFFSET KOPIRAJ ; DI pokaziva~ podataka koji se kopiraju MOV CX,06h ; CX broja~ petlje PETLJA: MOV AL,[SI] ; kopiraj naredni bajt u AL MOV [DI],AL ; kopiraj AL INC SI ; inkrementiraj pokaziva~ INC DI DEC CX ; dekrementiraj broja~ JNZ PETLJA ; granaj se ako je CX = 0 MOV AH,4Ch INT 21h ; povratak na DOS .DATA ORG 10h POD_1 DB 41h,23h,18h,12h,39h,62h ORG 28h KOPIRAJ DB 6 DUP (?) .STACK 32 END GL_P Slika 2. 24 : Program za kopiranje {est bajtova u memoriji kojii koristi pojednostavljenu definiciju

segmenata u obrnutom redosledu

Test pitanje 2.39

Ukazati na osnovne razlike izmedju fajlova sa ekstenzijom .COM i ekstenzijom .EXE

Odgovor EXE fajlovi COM fajlovi

neograni~enog obima maksimalni obim 64kB segment magacina je definisan segment magacina nije definisan segment podataka je definisan segment podataka nije definisan po~etak k�dnog i segmenta podataka se mo`e definisati na bilo koju adresu

po~etak k�dnog segmenta i segmenta podataka je na ofset adresi 0100h

veliki fajlovi (zauzimaju mnogo memorije) mali fajlovi (zauzimaju malo memorije) svakom fajlu prethodi zaglavlje od 512 bajtova. Zaglavlje sadr`i informacije o obimu, lokacija adresa u memoriji, adresa magacina i dr.

ne sadr`i zaglavlje

Page 42: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-41

Zadatak 2.25

Dva skupa ASCII kodiranih podataka se prihvataju sa tastature. Napisati program na asemblerskom jeziku mikroprocesora 80x86 za: a) konverziju podataka iz ASCII u pakovani BCD b) sabiranje vi{ebajtnih pakovanih BCD i pam}enje rezultata c) konverzija pakovanog BCD rezultata u ASCII

Odgovor TITLE PROG_KON ASCII u BCD konverzija i sabiranje PAGE 60, 132 SMAG SEGMENT DB 64 DUP (?) SMAG ENDS ;------------------------------------------------------------------------------------------------------------ PSEG SEGMENT POD1_ASC DB '2731947290' ORG 0010h POD2_ASC DB '3276401832' ORG 0020h POD3_BCD DB 5 DUP (?) ODG 0028h POD4_BCD DB 5 DUP (?) ORG 0030h POD5_SAB DB 5 DUP (?) ORG 0040h POD6_ASC DB 10 DUP (?) PSEG ENDS ; ----------------------------------------------------------------------------------------------------------- KSEG SEGMENT PROG1 PROC FAR ASSUME CS:KSEG,DS:PSEG,SS:SMAG MOV AX,PSEG MOV DS,AX MOV BX,OFFSET POD1_ASC ; BX pokazuje na prve ASCII MOV DI,OFFSET POD3_BCD ; DI pokazuje na prve BCD MOV CX,10 ; CX je broja~ CALL KONV_BCD ; konverzija ASCII u BCD MOV BX,OFFSET POD2_ASC ; BX pokazuje na druge ASCII MOV DI,OFFSET POD4_BCD ; DI pokazuje na druge BCD MOV CX,10 ; CX je broja~ CALL KONV_BCD ; konverzija ASCII u BCD CALL BCD_SAB ; sabrati BCD operande MOV SI,OFFSET POD5_SAB ; SI pokazuje na BCD rezultat MOV DI,OFFSET POD6_ASC ; DI pokazuje na ASCII rezultat MOV CX,05 ; CX je broja~ CALL KONV_ASC ; konverzija rezultata u ASCII MOV AH,4Ch INT 21h ; povratak na DOS PROG1 ENDP ; ------------------------------------------------------------------------------------------------------------- ; Potprogram za konverziju ASCII u pakovani BCD KONV_BCD PROC PONOVI: MOV AX,[BX] ; BX pokaziva~ ASCII podataka

Page 43: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-42

XCHG AH,AL AND AX,0F0Fh ; maskiraj ASCII 30h PUSH CX ; sa~uvaj broja~ MOV CL,4 ; pomeri AH ~etiri bita ulevo SHL AH,CL ; pripremi za pakovani BCD OR AL,AH ; kreiraj pakovani BCD MOV [DI],AL ; DI pokaziva~ na BCD ADD BX,2 ; uka`i na naredna dva ASCII bajta INC DI ; uka`i na naredni BCD POP CX ; obnovi sadr`aj broja~a LOOP PONOVI RETG KONV_BCD ENDP ; ------------------------------------------------------------------------------------------------------ ; Potprogram za sabiranje dva vi{ebajtna pakovana BCD operanda BCD_SAB PROC MOV BX,OFFSET POD3_BCD ; BX pokazuje na prvi operand MOV DI,OFFSET POD4_BCD ; DI pokazuje na drugi operand MOV SI,OFFSET POD5_SUM ; SI pokazuje na sumu MOV CX,05 CLC NOVI: MOV AL,[BX]+4 ; nabavi naredni bajt za operand 1 ADC AL,[DI]+4 ; nabavi naredni bajt za operand 2 DAA MOV [SI]+4,AL ; smesti sumu DEC DI ; uka`i na naredne bajtove DEC SI LOOP NOVI RET BCD_SAB ENDP ; ------------------------------------------------------------------------------------------------------------- ; Potprogram za konverziju pakovanog BCD u ASCII KONV_ASC PROC IZNOVA: MOV AL,[SI] ; SI pokaziva~ na BCD MOV AH,AL ; dupliciranje za nepakovani AND AX,0F00Fh ; raspakuj PUSH CX ; sa~uvaj broja~ MOV CL,04 ; pomeri udesno 4 bita za SHR AH,CL ; gornji nibl OR AX,3030h ; kreiranje ASCII XCHG AH,AL ; promeni mesta MOV [DI],AX ; sa~uvaj ASCII podatak INC SI ; poka`i na naredni BCD ADD DI,2 ; poka`i na naredni ASCII POP CX ; obnovi broja~ petlje LOOP IZNOVA RET KONV_ASC ENDP KSEG ENDS END PROG1

Zadatak 2.26

Page 44: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-43

Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 za mno`enje dve ASCII cifre '7' i '5', a dvocifreni rezultat pretstaviti u ASCII k�du.

Odgovor MOV AL,'7' ; AL = 37h AND AL,0Fh ; AL = 07 nepakovani BCD MOV DL,'6' ; DL = 36h AND DL,06h ; DL = 06 nepakovani BCD MUL DL ; AX = AL*DL = 07*06 = 002A h = 42 AAM ; AX = 0402 (7*6 = 42 nepakovani BCD) OR AX,3030h ; AX = 3432 rezultat u ASCII kodu

Zadatak 2.27

a) Napisati programsku sekvancu na asemblerskom jeziku mikroprocesora 80x86 koja se koristi za sabiranje dve ASCII cifre '5' i '2', a rezultat predstaviti u ASCII kôdu. b) Ponoviti aktivnost pod a) za slu~aj da su ASCII cifre '7' i '5'.

Odgovor a) MOV AL,'5' ; AL = 35 ADD AL,'2' ; AL = 35 + 32 = 67 AAA ; promeni 67 u 07 OR AL,30h ; OR AL sa 30 h da bi dobio ASCII b) SUB AH,AH ; AH = 0 MOV AL,'7' ; AL = 37 MOV BL,'5' ; BL = 35 ADD AL,BL ; AL = 37 + 35 = 6C AAA ; AL = 02 AH = CF = 1 OR AX,3030h ; AX = 3132

Test pitanje 2.40

(a) Koja od slede}ih instrukcija na asemblerskom jeziku mikroprocesora 80x86 puni registar BX podatkom 1000h? (i) Mov [1000h],BX (ii) Mov BX,1000h (iii) Mov BX,[1000h] (iv) Add BX,1000h (b) Koja od navedenih instrukcija puni registar BX sadr`ajem memorijske lokacije 10000h?

Test pitanje 2.41

Odrediti sadr`aj registra AL nakon izvr{enja slede}e sekvence instrukcija na asemblerskom jeziku mikroprocesora 80x86: Mov BL,8Ch Mov AL,7Eh And AL,BL

Test pitanje 2.42

Sadr`aj memorije prikazan je na Slici. 2.25. Odrediti sadr`aje registara AX, BX i SP nakon izvr{enja slede}e sekvence instrukcija na asemblerskom jeziku mikroprocesora 80x86 MOV SP,0700h POP AX

Page 45: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-44

POP BX

31

F0

D2

2C

89

37

24

0704

0703

0702

0701

0700

06FF

06FE

adrese memorija

Slika 2.25 : Sadr`aj memorije pre izvr{enja sekvence

Test pitanje 2.43

Odrediti vrednost operanda nakon izvr{enja svake od slede}ih instrukcija na asemblerskom jeziku mikroprocesora 80x86: a) Inc BX b) Inc BYTE PTR[BX] c) Inc WORD PTR[BX] d) Inc DWORD PTR[BX] Za svaku od instrukcija neka je BX = 0600h, a sadr`aj memorije je prikazan na Slici 2.26.

POLJE PODATAKA

0608

0607

0606

0605

0604

0603

0602

47

BB

CA

59

13

F8

DB

27

F8

8

7

6

5

4

3

2

BROJ ELEMENTA

adrese memorija

Slika 2.26 : Sadr`aj memorije pre izvr{enja instrukcije

Napomena: Da bi pristupio memorijskom operandu 80x86 koristi LE format.

Test pitanje 2.44

Neka mikroprocesor 386/486 izvr{ava naredbe In (ili Out) prikazane na Slici 2.27. Za svaku naredbu odrediti logi~ko stanje signala BE0, BE1, BE2 i BE3, kom se od portova pristupa i koje su linije za podatke aktivni.

Page 46: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-45

BE3 BE2 BE1 BE0 Instrukcija Pristupa se portovima

Magistrala podataka

1 1 1 0 In AL,0 0 D0 - D7 1 1 0 1 In AL,1 1 D8 - D15 1 0 1 1 In AL,2 2 D16 - D23 0 1 1 1 In AL,3 3 D24 - D31 1 1 0 0 In AX,0 0 i 1 D0 - D15 0 0 1 1 In AX,2 2 i 3 D16 - D31 0 0 0 0 In EAX,0 0,1,2 i 3 D0 - D31

Slika 2.27: Na~in pristupa mikroprocesoru 386/486 U/I prostoru u toku izvr{enja naredbi In i Out Napomena: U {rafiranom delu krije se odgovor

Zadatak 2.28

Za implementaciju formule

zx x x

01 2 32

2=

+ −

koristi se asemblerski programski jezik procesora 80x86, gde xl, x2 i x3 treba da su parne pozitivne celobrojne vrednosti u opsegu od 0 do 100. Rezultat z0 treba da bude takode pozitivna celobrojna vrednost. a) Napisati programsku sekvencu, u obliku potprograma, kojom se testira parnost vrednosti xl, x2 i x3. Ako su xl i x3 neparni brojevi ili z0 negativan broj, postaviti marker CPU-a ZF = 1. U slu~aju kada se nije detektovala gre{ka izvr{enje programa zavr{iti sa ZF =0. b) Napisati programsku sekvencu za izra~unavanje z0 prema formuli. c) Nacrtati dijagram toka algoritma. Napomena: (1) Kod re{avanja zadatka, prvo dati dijagram toka algoritma na osnovu koga bi se sagledao princip rada programa i potprograma. (2) Kod kreiranja programa i potprograma koristiti potpunu definiciju segmenata.

Zadatak 2.29

U memoriji mikrora~unara zasnovanog na mikroprocesoru 80x86 sme{ten je vektor od n ASCII cifara po~ev od adrese ANIZ (n je paran broj). a) Algoritamski (pomo}u dijagrama toka) predstaviti konverziju vektora ANIZ u vektor pakovanih BCD cifara, koje se sme{taju u memoriju po~ev od adrese BNIZ b) Napisati programsku sekvencu na asemblerskom jeziku pomo}u koje je mogu}e izvr{iti konverziju vektora od n ASCII cifara u vektor pakovanih BCD cifara. Du`ina vektora n ~uva se na lokaciji NAN. Po~etak programa je sa lokacije PROG. Kod kreiranja programa i potprograma koristiti potpunu definiciju segmenata. Napomena: dve ASCII cifre formiraju jednu pakovanu BCD cifru.

Zadatak 2.30

Odrediti broj bajt-lokacija ~iji je sadr`aj nula a koje se nalaze u tabeli po~ev od memorijske lokacije ALFA pa do ALFA+k-1, gde je k=256. Smestiti adrese lokacija ~iji je sadr`aj nula u novu tabelu koja po~inje sa lokacije BETA, gde je BETA=ALFA+k (adrese su 16-bitne). Program napisati na asemblerskom jeziku za mikroprocesor 80x86, koriste}i potpunu definiciju segmenata. Za segment magacina definisati prostor od 64 bajta. Po~etak programa je na adresi POC.

Zadatak 2.31

Za sistem zasnovan na mikroprocesoru 80x86 napisati programsku sekvencu na asemblerskom jeziku kojom se:

Page 47: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-46

(a) Postavljaju na nulu memorijske lokacije po~ev od adrese ALFA do ALFA+63h. b) Popunjavaju lokacije: ALFA decimalnim brojem 0, ALFA+1 decimalnim brojem 1, ALFA+2 decimalnim brojem 2, itd., do lokacije ALFA+63h. Kod oba slu~aja, (a) i (b), za pristup memorijskim lokacijama od ALFA do ALFA+63h, koristiti registarsko direktno adresiranje.

Zadatak 2.32

Za sistem zasnovan na mikroprocesoru 80x86 napisati programsku sekvencu na asemblerskom jeziku kojom se: (a) Postavljaju na nulu memorijske lokacije po~ev od adrese ALFA do ALFA+63h. b) Popunjavaju lokacije: ALFA decimalnim brojem 0, ALFA+1 decimalnim brojem 2, ALFA+2 decimalnim brojem 4, itd., do lokacije ALFA+63h, koja se puni brojem 126. Kod oba slu~aja, (a) i (b), za pristup memorijskim lokacijama od ALFA do ALFA+63h, koristiti memorijsko indirektno adresiranje.

Zadatak 2.33

Sistem prikazan na Slici 2.28 koristi se za pobudu desetocifarskog, multipleksiranog, sedmo-segmentnog displeja. U memoriji 8-bitnog hipoteti~kog ra~unara po~ev od lokacije DISP, sme{teno je pet BCD pakovanih cifara na sukcesivnim lokacijama. Adresa osmobitnog le~a u koji se upisuje podatak za pobudu dekodera/drajvera je LEC_A. Napisati programsku sekvencu u obliku potprograma PP1 za pobudu displeja sa Slike 2.28, shodno dijagramu toka sa Slike 2.29. U toku pisanja programa pridr`avati se slede}ih sugestija: • Registar R1 koristiti kao promenljivu BROJAC. • Informaciju o trajanju pobude svakog segmenta, ~uvati na lokaciji VREME. • Sadr`aj lokacije VREME napuniti u registar R2. • Potprogram PP1 po~eti sa lokacije POC. • Koristiti dvoadresni format instrukcija. • ACC je akumulator; • R1 i R2 su registri op{te namene hipoteti~kog ra~unara; • SP je pokaziva~ magacina.

DR

DK

10 –cifr.7-segm.

LEDdisplej

MS

LS

8-bitnile~

4

4

8

cifra 0cifra 9

segmentno-drajverske linije

. . .

.

.

.

Slika 2.28 : Principijelna {ema povezivanja LED displeja

Napomena: DR - BCD u sedmosegmentni dekoder/drajver; DR - dekoder “1 od 10”

Page 48: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-47

Magacin<-ACCBROJAC:=0

PP1

BROJACneparan ?

[ift ACC u levo za4 mesta

DISP:=DISP+1

DA

ACC:=ACC OR BROJAC

LEC_A:=ACC

BROJAC > 10 ?

ACC<-Magacin

Return

DA

DA

R1=R1-1

ACC<-M[DISP]R1:= VREME

R1=0 ?

BROJAC:= BROJAC+1

Slika 2.29 : Dijagram toka algoritma za pobudu 10-cifarskog decimalnog broja na

multipleksiranom 7-segmentnom displeju

Zadatak 2.34

Logi~ka operacija Xor se koristi kod {ifrovanja podataka. Naime, ako se obavi Xor operacija nad svakim elementom niza VEKTOR ~ija je po~etna adresa ALFA, sa klju~em, dobi}e se rezultantni {ifrovani niz REZNIZ koga treba smestiti po~ev od adrese BETA. Niz VEKTOR ~ini N elemenata tipa bajt. a) Ako su svi elementi niza VEKTOR inicirani na vrednost 55h, a klju~ ima vrednost 0AAh,

pokazati koja }e rezultantna vrednost biti upisana u svaku lokaciju REZNIZ-a. b) Napisati programsku sekvencu na asemblerskom jeziku mikroprocesora 80x86 kojom }e se

{ifrovani podaci sme{tati na lokacije REZNIZ c) Kakav treba da bude klju~ i koja operacija treba da se obavi da bi se {ifrovani podaci REZNIZ-

a dobili u izvornom obliku (tj. kao de{ifrovani). Program napisati kao FAR proceduru kori{}enjem potpune definicije segmenata. Segment podataka nazvati PODACI, segment magacina - MAGACIN, a programski segment - PROGRAM. Za segment magacina rezervisati prostor od 64 bajta. Na kraju procedure predvideti povratak u DOS slede}om sekvencom: Mov AH,4Ch Int 21h

Page 49: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-48

Zadatak 2.35

U segmentu podataka sme{ten je niz nazvan SIMA koga ~ini 100 elemenata. Svaki element niza SIMA je tipa zapis i obima je 20 bajtova. Formirati novi niz nazvan OSAM koga ~ini osmi bajt svakog elementa (zapisa). Program za kreiranje niza OSAM napisati na asemblerskom jeziku mikroprocesora 80x86 u vidu potprograma tipa PROC FAR. Na kraju potprograma, izvr{enjem sekvence: MOV AH,4Ch INT 21h obezbediti povratak u DOS. Za magacin predvideti prostor od 64 bajta. Koristiti pojednostavljenu definiciju segmenata.

Zadatak 2.36

Neka su data dva vektora VEK1 i VEK2, jednakih du`ina N = 256. Elementi vektora su ozna~ene 16-bitne vrednosti. Kompariranjem i-tih elemenata oba vektora (i = 0, ..., 255), prona}i sve elemente koji se medjusobno razlikuju, a njihov broj upisati kao prvi elemenat novog vektora RAZL. Svaki slede}i elemenat vektora RAZL sadr`i po tri 16-bitne re~i sa slede}im zna~enjem: redosledni broj elementa koji se razlikuje, srednja vrednost zbira - i, srednja vrednost razlike odgovaraju}ih elemenata VEK1 i VEK2. Program za kreiranje niza RAZL napisati na asemblerskom jeziku mikroprocesora 80x86 u vidu potprograma tipa PROC FAR. Na kraju potprograma, izvr{enjem sekvence: MOV AH,4Ch INT 21h obezbediti povratak u DOS. Za magacin predvideti prostor od 64 bajta. Koristiti pojednostavljenu definiciju segmenata.

Zadatak 2.37

Data su dva niza NIZX i NIZY jednakih du`ina, svaki od n (n<100) 16-bitnih elemenata. Elementi nizova NIZX i NIZY sme{teni su u memoriji na slede}i na~in: X(1), X(2), ..., X(n), Y(1), Y(2), ..., Y(n). Podatak o du`ini niza n ~uva se na lokaciji DUZINA. Napisati program na asemblerskom jeziku mikroprocesora 80x86 u vidu potprograma tipa PROC FAR, koji se koristi za izra~unavanje slede}eg izraza:

( )∑=

−=∆N

1i

2i

2i yxxy

Rezultat xy∆ smestiti na lokaciju RAZLIKA kao 32-bitni broj. Na kraju potprograma, izvr{enjem sekvence: MOV AH,4Ch INT 21h obezbediti povratak u DOS. Za magacin predvideti prostor od 64 bajta. Koristiti pojednostavljenu definiciju segmenata.

Test pitanje 2.45

[ta su moduli?

Odgovor ^esta je praksa kada se pi{e obiman softver, tj. veliki program, da se ceo program (projekat) razbije na manje celine, tzv. module, a zadatak koji se odnosi na pisanje ovih modula raspodeli izmedju ve}eg broja programera. Prednsoti ovakvog pristupa su slede}e: (1) svaki modul se mo`e pisati, debagirati i testirati nezavisno od ostalih,

Page 50: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-49

(2) gre{ke u jednom modulu ne dovode do blokiranja celog projekta, (3) mogu}e je koristiti module radi povezivanja (linkovanja) sa vi{im programskim jezicima kakvi su C, Pascal i drugi, (4) paralelni rad ve}eg broja programera na kreiranju razli~itih modula skra}uje ukupno vreme razvoja programa. Na{e dosada{nje iskustvo, strategija i saznanje u pisanju programa je bila slede}a: Program je bio kreiran od glavne procedure koja je u toku svog izvr{enja pozivala ve}i broj drugih potprograma. Ako se jedan od potprograma ne bi izvr{io korektno tada je bilo neophodno ceo program ponovo napisati i reasemblirati. Efikasniji pristup u razvoju softvera bio bi slede}i: Tretirati svaki potprogram kao poseban program (ili modul) i dodeliti mu posebno fajl-ime. Zatim svaki od modula asemblirati i testirati. Nakon testiranja i verifikovanja da su svi oni ispravni potrebno je izvr{iti njihovo povezivanje (linkovati ih) tako da oni ~ine jedinstvenu celinu (program). Mogu}nost povezivanja modula ostvaruje se zahvaljuju}i kori{}enju odredjenih asemblersko jezi~kih direktiva. Direktive koje se naj~e{}e koriste za ove potrebe su EXTRN (external) i PUBLIC. Direktiva EXTRN se koristi da uka`e asembleru i linkeru da odredjena imena i promenljive nisu definisane u teku}em modulu nego su definisana na drugo mesto, tj. ona su eksterna. Za slu~aj da se direktiva EXTRN ne koristi (ne specificira), asembler ne}e biti u stanju da odredi gde su ova imena definisana pa }e zbog toga generisati gre{ku. Format direktive EXTRN je slede}i:

EXTRN ime_1: tip ; svako ime mo`e biti u posebnoj EXTRN EXTRN ime_2: tip EXTRN ime_3: tip, ime_4:tip ; ve}i broj imena mo`e biti definisan istom direktivom EXTRN

Eksterna imena koja se koriste kod procedura mogu biti NEAR, FAR ili PROC (NEAR za male module, a FAR za ve}e). Imenovani podaci mogu biti slede}eg tipa: BYTE, WORD, DWORD, FWORD, QWORD ili TWORD. Ona imena ili parametri definisani kao EXTRN (definisani kao spoljni u odnosu na teku}i modul) moraju da se defini{u kao PUBLIC u modulu gde su definisani. Definisanjem imena kao PUBLIC dozvoljava asembleru i linkeru da obavi uparivanje sa odgovaraju}om definicijom koja se odnosi na EXTRN. Format direktive PUBLIC je slede}i:

PUBLIC ime_1 ; svako ime mo`e biti u posebnoj direktivi PUBLIC ime_2 PUBLIC ime_3, ime_4 ; vi{e imena mo`e biti izlistano u istoj direktivi tipa PUBLIC

Analizirajmo sada konstrukciju jednog programa koga ~ini glavna rutina, GLAVNA, i dva manja potprograma nazvana PP_1 i PP_2. Potprograme, PP_1 i PP_2, poziva glavna rutina.

; prvi fajl predstavlja glavna rutina EXTRN PP_1:FAR EXTRN PP_2:FAR PROG_SEG0 SEGMENT GLAVNA PROC FAR ASSUME CS:GLAVNA, DS:..., SS:..., ES:... ..... Call PP_1 Call PP_2 .... Mov AH, 4Ch Int 21h GLAVNA Endp PROG_SEG0 Ends End GLAVNA ; drugi fajl se odnosi na PP_1

Page 51: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-50

PUBLIC PP_1 PROG_SEG1 SEGMENT PP_1 PROC FAR ASSUME CS:PROG_SEG1 .... Ret PP_1 Endp PROG_SEG1 Ends End ; tre}i fajl se odnosi na PP-2 PUBLIC PP_2 PROG_SEG2 SEGMENT PP_2 PROC FAR ASSUME CS:PROG_SEG2 ... Ret PP_2 Endp PROG_SEG2 Ends End

Slika 2.30 : Pisanje i povezivanje modula

Analizom programa sa Slike 2.30 mo`e se zaklju~iti slede}e: (1) ulazna ta~ka programa je GLAVNA a izlazna END GLAVNA. (2) moduli koji se pozivaju od strane glavnog modula imaju direktivu End iza koje ne sledi oznaka ili ime. U konkretnom slu~aju PP_1 i PP_2 imaju direktivu End iza koje ne sledi oznaka.

Test pitanje 2.46

Kako se vr{i povezivanje modula?

Odgovor Neka je svaki od programskih modula sa Slike 2.30 (test pitanje 2.45) bio asembliran zasebno i zapam}en kao fajl pod slede}im imenom: PROG_1.OBJ, PP_1.OBJ i PP_2.OBJ, respektivno. Njihovo povezivanje (linkovanje) pomo}u makroasemblera MASM, sa ciljem da se dobije (generi{e) jedinstveni izvr{ivi k�d, se vr{i izdavanjem slede}e naredbe

C > LINK PROG_1.OBJ + PP_1.OBJ + PP_2.OBJ

Analizirajmo sada jedan program, prikazan na sl. 2.31 a) koji se koristi za: (a) sabiranje dve re~i, i (b) mno`enje dve re~i Svaku od nabrojanih aktivnosti obavlja poseban modul. Podaci su definisani u glavnom modulu dok moduli za sabiranje i mno`enje nemaju svoje segmente podataka.

TITLE PROG_1 Ukazuje na modularno programiranje PAGE 60,132 EXTRN PP_1:FAR EXTRN PP_2:FAR PUBLIC VR1,VR2,ZBIR,PROIZ ; segment magacina SMAG SEGMENT DB 100 DUP (?) SMAG Ends ; segment podataka SPOD SEGMENT

Page 52: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-51

VR1 DW 3412 VR2 DW 413 ZBIR DW 2 DUP (?) PROIZ DW 2 DUP (?) SPOD Ends ; kodni segment PR_SEG0 SEGMENT GLAVNI PROC FAR ASSUME CS:PR_SEG0,DS:SPOD,SS:SMAG Mov AX,SPOD Mov DS,AX Call PP_1 ; poziv potprograma za sabiranje Call PP_2 ; poziv potprograma za mno`enje Mov AH,4Ch Int 21h ; povratak na DOS GLAVNI Endp PR_SEG0 Ends End GLAVNI ; ************* a) Modul GLAVNI *************** ; program za odredjivanje sume dve eksterno definisane re~i i ; sme{taj sume u lokaciji definisana od strane pozivnog programa TITLE PP_1 Program za sabiranje dve re~i PAGE 60,132 EXTRN VR1:WORD EXTRN VR2:WORD EXTRN ZBIR:WORD PUBLIC PP_1 PR_SEG1 SEGMENT PP_1 PROC FAR ASSUME CS:PR_SEG1 Sub BX,BX ; inicijaliziraj broja~ prenosa Mov AX,VR1 Mov DX,VR2 Add AX,DX ; VR1 + VR2 Adc BX,00 ; akumuliraj prenos Mov ZBIR,AX ; sa~uvaj sumu Mov ZBIR+2,BX ; sa~uvaj prenos Ret PP_1 Endp PR_SEG1 Ends End ; *****************b) Modul za sabiranje ****************** ; program za odredjivanje proizvoda dve eksterno definisane re~i i sme{tanje ; proizvoda u lokaciji definisanoj od strane pozivnog programa TITLE PP_2 Program za mno`enje dve re~i PAGE 60,132 EXTRN VR1:WORD EXTRN VR2:WORD EXTRN PROIZ:WORD

Page 53: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-52

PUBLIC PP_1 PR_SEG2 SEGMENT PP_2 PROC FAR ASSUME CS:PR_SEG2 Mov AX,VR1 Mov CX,VR2 Mul CX ; VR1 * VR2 Mov PROIZ,AX ; memori{i proizvod LS deo Mov PROZ+2,DX ; memori{i proizvod MS deo Ret PP_2 Endp Pr_SEG2 Ends End ; *****************c) Modul za mno`enje *******************

Slika 2.31 : Program koga ~ine modul GLAVNI i moduli za sabiranje PP_1 i mno`enje PP_2

Analizom programa sa Slike 2.31 mo`emo da zaklju~imo slede}e: (1) u modulu GLAVNI svaki od oba potprograma je deklarisan direktivom EXTRN {to ukazuje da su ove procedure definisane u drugom fajlu. Eksterni potprogrami su pri ovome definisani kao FAR. (2) u fajlovima gde je definisan svaki potprogram, isti je deklarisan kao PUBLIC, tako da ga i drugi programi mogu pozivati. (3) u modulu GLAVNI imena VR1, VR2, ZBIR i PROIZ su definisana ka PUBLIC tako da i drugi programi mogu da pristupaju ovim podacima. U ostalim potprogramima ovi podaci se deklari{u kao EXTRN. (4) povezivanje (linkovanje) sva tri programa vr{i se na slede}i na~in

C > LINK GLAVNI .OBJ + PP_1. OBJ + PP_2.OBJ

Linker je taj koji re{ava sve probleme koji se odnose na uskladjivanja imena tipa PUBLIC i EXTRN.

Test pitanje 2.47

Kako se defini{e direktiva SEGMENT?

Odgovor U dosada{njoj analizi u toku definisanja segmenta nismo pominjali druge atribute koji prate ovu direktivu, nego smo samo koristili :

ime SEGMENT

Ovaj na~in definicije segmenta je prihvatljiv kada postoji samo po jedan segment za k�d, podatke i magacin. Ali u slu~aju kada postoji ve}i broj modula koji se povezuju zajedno, neophodno je uskladiti i odgovaraju}u definiciju segmenata. Kada se govori o modularnom programiranju potpuna definicija segmenta se vr{i na slede}i na~in:

ime SEGMENT poravnanje tip_koji_se_kombinuje ime_klase

Uvedena polja imaju slede}e zna~enje: • poravnanje - ukazuje da li granica segmenta po~inje na adresi tipa bajt, re~, paragraf ili

stranica. Ako se druga~ije ne nazna~i inicijalno (by default) se dodeljuje poravnanje tipa PARA, {to zna~i da je po~etna granica segmenta odredjena paragrafom (Kod DOS-a paragraf se defini{e kao 16 bajtova, tj. svaki segment po~inje na 16-bajtnoj granici).

Page 54: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-53

• tip_koji_se_kombinuje - ukazuje linkeru da li segmente istog tipa treba povezati zajedno ili ne. Tipi~ne opcije su STACK ili PUBLIC. Ako je tip_koji_se_kombinuje tipa PUBLIC linker }e kombinovati taj segment sa drugim segmentima istog tipa u ostalim modulima. To zna~i da je mogu}e kombinovati ve}i broj kôdnih segmenata sa razli~itim imenima u kôdni: segment koji ima jedinstveno ime.

• ime_klase - postoje slede}e ~etiri opcije: 'CODE', 'STACK', 'DATA' i 'EXTRA' koje su uokvirene jednostrukim navodnicama. Koristi se za kombinovanje segmenata istog tipa koji pripadaju razli~itim modulima.

Definicija segmenta magacina u modulu GLAVNI kojom se elimini{u upozorenja od strane linkera da segment nije definisan je oblika

ime SEGMENT PARA STACK 'STACK' Ako u drugim modulima segment podataka nije definisan tada se koristi slede}a definicija

ime SEGMENT PARA 'DATA' Ako je segment podataka definisan u nekom drugom modulu tada direktiva PUBLIC treba da se nalazi izmedju PARA i 'DATA'. Slede}im definicijama segmenata kombinuju se segmenti podataka i kôda iz razli~itih modula

ime SEGMENT PARA PUBLIC 'CODE' ime SEGMENT PARA PUBLIC 'DATA'

Treba naglasiti da kada se kombinuju razli~iti segmenti iz razli~itih modula u jedinstveni segment, tada imena segmenata moraju biti takodje jedinstvena. Kod programa prikazanog na Slici 2.32 vr{i se potpuno nova definicija svih segmenata u poredjenju sa programom prikazan na Slici. 2.31 (Kodni segmenti nisu tipa PUBLIC). TITLE PROG_2 Isti kao PROG_1 ali sa potpunom definicijom segmenata PAGE 60,132 EXTRN PP_1:FAR EXTRN PP_2:FAR PUBLIC VR1,VR2,ZBIR,PROIZ ; segment magacina SMAG SEGMENT PARA STACK 'STACK' DB 100 DUP (?) SMAG Ends ; segment podataka SPOD SEGMENT PARA 'DATA' VR1 DW 3412 VR2 DW 413 ZBIR DW 2 DUP(?) PROIZ DW 2 DUP(?) SPOD Ends ; kodni segment PR_SEG0 SEGMENT PARA 'CODE' GLAVNI PROC FAR ASSUME CS:PR_SEG0,DS:SPOD,SS:SMAG Mov AX,SPOD Mov DX,AX Call PP_1 ; poziv potprograma Sabiranje Call PP_2 ; poziv potporgrama mno`enje Mov AH,4Ch GLAVNI Endp PR_SEG0 Ends

Page 55: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-54

End GLAVNI ; ***************a) Modul GLAVNI *************** ; ovaj program izra~unava zbir dve spoljno definisane re~i i sme{ta sumu na lokaciji ; koju defini{e pozivni program TITLE PP_1 Program za sabiranje dve re~i PAGE 60,132 EXTRN VR1:WORD EXTRN VR2:WORD EXTRN ZBIR:WORD PUBLIC PP_1 PR_SEG1 SEGMENT PARA 'CODE' PP_1 PROC FAR ASSUME CS:PP_1 Sub BX,BX Mov AX,VR1 Mov DX,VR2 Add AX,DX Adc BX,00 Mov ZBIR,AX Mov ZBIR+2,BX Ret PP_1 Endp PR_SEG1 Ends End ; ******************b) Modul Sabiranje **************** ; ovaj program izra~unava proizvod dve eksterno definisane re~i i sme{ta proizvod na ; lokaciji koju defini{e pozivni program TITLE PP_2 Program za mno`enje dve re~i PAGE 60,132 EXTRN VR1:WORD EXTRN VR2:WORD EXTRN PROIZ:WORD PUBLIC PP_2 PR_SEG2 SEGMENT PARA 'CODE' PP_2 PROC FAR ASSUME CS:PR_SEG2 Mov AX,VR1 Mov CX,VR2 Mul CX Mov PROIZ,AX Mov PROIZ+2,DX Ret PP_2 Endp PR_SEG2 Ends End ; ****************c) Modul Mno`enje*****************

Start Stop Length Name Class 00000h 00063h 00064h SMAG STACK

Page 56: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-55

00070h 0007Bh 0000Ch SPOD DATA 00080h 00092h 00013h PR_SEG0 CODE 000A0h 000B5h 00016h PR_SEG1 CODE 000C0h 000D0h 00011h PR_SEG2 CODE

d) memorijska mapa

Slika 2.32 : Program kod koga su segmenti potpuno definisani

Na Slici 2.32 d) prikazana je mapa memorije koja se odnosi na po~etak i kraj svakog od segmenata nakon obavljenog linkovanja. Uo~imo da je po~etak svakog segmenta definisan 16-bitnom granicom : 00070h, 00080h,... . Kôdni segmenti PR_SEG0, PR_SEG1 i PR_SEG2 su odvojeni, a njihovi po~eci na 16-bajtnim granicama definisani su sa PARA. Kôdni segmenti se mogu spojiti u jedinstveni koriste}i opciju PUBLIC. Spajanje kôdnih segmenata je mogu}e pod uslovom da svi oni imaju jedinstveno ime u budu deklarisani kao PUBLIC. Memorijska mapa koja se dobija u tom slu~aju za program sa Slike 2.32, ima}e slede}i oblik

Start Stop Length Name Class 00000h 00063h 00064h SMAG STACK 00070h 0007Bh 0000Ch SPOD DATA 00080h 000D0h 00051h PR_SEG0 CODE

Ve} smo ranije ukazali da se kod makro asemblera Microsofta MASM 5.0 pa navi{e, i Borlanda TASM verzija 1 pa navi{e umesto potpune definicije setgmenata ~e{}e koristi pojednostavljena definicija segmenata. U tom slu~aju modularan program sa Slike 2.32 ima}e oblik kao na Slici 2.33. TITLE PROG_3 Isti kao PROG_2 ali sa pojednostavljenom definicijom segmenta PAGE 60,132 .MODEL SMALL .STACK 64 .DATA PUBLIC VR1,VR2,ZBIR,PROIZ VR1 DW 3412 VR2 DW 413 ZBIR DW 2 DUP(?) PROIZ DW 2 DUP(?) ; program .CODE EXTRN PP_1:NEAR EXTRN PP_2:NEAR GLAVNI Mov AX,#DATA Mov DS,AX Call PP_1 Call PP_2 Mov AH,4Ch Int 21h End GLAVNI ; ****************a) modul GLAVNI *************** TITLE PP_1 Program za sabiranje sa pojednostavljenom definicijom segmenta PAGE 60,132 .MODEL SMALL EXTRN VR1:WORD EXTRN VR2:WORD

Page 57: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-56

EXTRN ZBIR:WORD .CODE PUBLIC PP_1 PP_1 PROC NEAR Sub BX,BX Mov AX,VR1 Mov DX,VR2 Add AX,DX Adc BX,00 Mov ZBIR,AX Mov ZBIR+2,BX Ret PP_1 Endp End ; **********************b) modul Sabiranje ******************** TITLE PR_2 Program za mno`enje sa pojednostavljenom definicijom segmenta PAGE 60,132 .MODEL SMALL EXTRN VR1:WORD EXTRN VR2:WORD EXTRN PROIZ:WORD .CODE PUBLIC PP_2 PP_2 PROC NEAR Mov AX,VR1 Mov CX,VR2 Mul CX Mov PROIZ,AX Mov PROZ+2,DX Ret PP_2 Endp End ; *******************c) modul za Mno`enje ****************

Slika 2.33 : Modularni program koji koristi pojednostavljenu definiciju segmenata

Test pitanje 2.48

Kako se vr{i prenos parametara izme|u modula?

Odgovor ^esto se javlja potreba za prenos parametara izmedju razli~itih modula napisanih na asemblerskom jeziku ili izmedju programa napisanih na asemblerskom jeziku i HLL programa kakvi su Pascal, C i dr. Parametri koji se predaju mogu biti fiksne vrednosti, promenljive, polja podataka, ili pokaziva~i memorijskih lokacija. Naj~e{}e prenos parametara izmedju modula vr{i se preko registara, memorije ili magacina. Jedan tipi~an na~in predaje parametara preko registara prikazan je na Slici 2.34. Ovaj program se koristi za konverziju ASCII kôdiranih znakova u binarne. Program postavlja segment podataka, prihvata ASCII podatke za tastature, sme{ta ih u memoriji, a zatim poziva rutinu za konverziju broja u binarni. Kona~no rezultat sme{ta u memoriji. Registri BX i SI se koriste da ukazuju na odredjene podatke pre nego {to se modul pozove a pozvani modul sme{ta rezultat u registar AX pre nego {to se izvr{i povratak iz pozvane rutine u pozivnu.

Page 58: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-57

TITLE PROG_4 Poziv programa za konverziju iz ASCII u binarni PAGE 60,132 PUBLIC DESET SMAG SEGMENT PARA STACK 'STACK' DB 64 DUP(?) SMAG Ends ; segment podataka SPOD SEGMENT ASC_OB LABEL BYTE ; ASCII oblast MAX_DUZ DB 6 ; maksimalna du`ina ST_DUZ DB ? ; stvarna du`ina ASC_BR DB 6 DUP(?) ; ASCII broj ORG 10h BIN_BR DW 0 PORUKA DB 'MOLIM UNESI PETO CIFARSKI BROJ', '$' DESET DW 10 SPOD Ends ; segment programa SPROG SEGMENT EXTRN ASC2B_KON:FAR ; konverzija ASCII u binarni GLAVNI PROC FAR ASSUME CS:SPROG,DS:SPOD,SS:SMAG Mov AX,SPOD Mov DS,AX ; prikazivanje poruke (PROMPT) Mov AH, 09 ; prenos parametra preko Mov DX, OFFSET PORUKA ; registara Int 21h ; poziv prekidne DOS rutrine ; mno`enje niza Mov AH,0Ah ; prenos parametara Mov DX,OFFSET ASC_OB ; preko registara Int 21h Mov SI,OFFSET ASC_BR Mov BH,00 Mov BL,ST_DUZ Dec BX Call ASC2B_KON ; poziv potprograma za konverziju Mov BIN_BR,AX ; sa~uvaj binarni (heksa) rezultat Mov AH,4Ch Int 21h ; povretak na DOS GLAVNI Endp SPROG Ends End GLAVNI

Slika 2.34 : Pozivni program za konverziju ASCII u binarni

Prenos parametara preko registara veoma ~esto se koristi kod DOS-ovih i BIOS-ovih prekidnih funkcijskih poziva (tipi~no preko Int 21h i Int 10h i td). Prednost ovog metoda je brzi prenos podataka (procesor najbr`e pristupa internim registrima) a nedostatak ograni~eni broj CPU-ovih registara. Drugi metod za prenos parametara se zasniva na definisanju RAM oblasti, tj. memorijskih lokacija. DOS i BIOS ~esto koriste i ovaj metod. Problem sa prenosom parametara preko fiksnih memorijskih oblasti se sastoji u tome {to mora izmedju razli~itih proizvodja~a ra~unara da postoji univerzalni dogovor o memorijskim adresama preko kojih se prenose parametri. Na`alost ovakav dogovor do sada nije postignut.

Page 59: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-58

Naj~e{}e prenos parametara se vr{i preko magacina. Ovaj metod je univerzalan jer magacin postoji kod svih ra~unara. Ipak treba ukazati da su manipulacije sa magacinom kako komplikovane tako i rizi~ne iz slede}eg razloga: Kada se modul pozove, u magacin se sme{ta povratna adresa pozivnog programa. Za slu~aj da se sadr`aj magacina promeni program }e krahirati. Zbog ovoga manipulacije sa magacinom mora dobro da se poznaju pre nego {to se upustimo u takav rad. Program na Slici 2.35 prikazuje na~in prenosa parametara preko magacina. Glavni modul dobavlja tri operanda tipa re~ iz segmenta za podatke sme{ta ih u magacin, a zatim poziva potprogram. Potprogram dobavlja podatke iz magacina, sabira ih, sme{ta rezultat u registar, i obavlja povratak u pozivni program. Glavni program memori{e rezultat sabiranja.

TITLE PROG_5 Predaja parametara preko magacina PAGE 60,132 EXTRN PP_6:FAR ; segment magacina SMAG SEGMENT PARA STACK 'STACK' DB 64 DUP (?) SMAG Ends SPOD SEGMENT PARA 'DATA' ; segment podataka VR1 DW 4157 VR2 DW 8436 VR3 DW 39C8 REZ DW 2 DUP(?) SPOD Ends ; programski segment SPR0 SEGMENT PARA PUBLIC 'CODE' GLAVNI PROC FAR ASSUME CS:SPRO,DS:SPOD,SS:SMAG Mov AX,SPOD Mov DS,AX Push VR3 ; sme{taj parametara u magacin Push VR2 Push VR1 Call PP_6 ; poziv potprograma Mov REZ,AX ; sme{taj rezultata Mov REZ+2,BX Mov AH,4Ch Int 21h GLAVNI Endp SPR0 Ends End GLAVNI ; ******************** a) glavni modul *************** ; u posebnom fajlu TITLE PR_6 Modul za sabiranje tri re~i koje se prenose preko magacina PAGE 60,132 PUBLIC PP_6 ; segment podataka SPRO SEGMENT PARA PUBLIC 'CODE' PP_6 PROC FAR ASSUME CS:SPRO Sub BX,BX ; BX = 0 zbog prenosa Push BP ; sa~uvaj BP Mov AX,[BP]+6 ; VR1→ AX Mov CX,[BP]+8 ; VR2 → CX

Page 60: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-59

Mov DX,[BP]+10 ; VR3 → DX Add AX,CX ; VR1 + VR2 → AX Adc BX,00 ; CY → BX Add AX,DX ; (VR1 + VR2) + VR3 → AX Adc BX,00 ; BX + CY → BX Pop BP ; obnovi BP pre povratka Ret 6 ; dodaj 6 na SP da premosti podatke PP_6 Endp SPRO Ends End ; *********************b) modul sabiranja ******************

Slika 2.35 : Program za sabiranje tri broja gde se parametri prenose preko magacina

Da bi se bolje razumele manipulacije sa magacinom u okviru modula sabiranje (Slika 2.35)) na Slici 2.36 prikazan je izgled magacina poziva procedure PP_6, tj. modula za sabiranje. uslovno je uzeto da pre izvr{enja instrukcije Push VR3 pokaziva~ magacina, SP, ukazuje na lokaciju 2000 h.

YYXX

39C8

8436

4157

CS

IP

BP

200120001FFF1FFE1FFD1FFC1FFB1FFA1FF91FF81FF71FF61FF51FF41FF31FF2

SP (pre Push VR3nakon Ret 6)

SP (nakon PushVR3)

SP (nakon PushVR2)

SP (nakon PushVR1)

SP (nakon Call PP_6,nakon Pop BP)

SP (nakon PushBP)

VR3

VR2

VR1

CS

IP

BP

Slika 2.36 : Izgled magacina

Test pitanje 2.49

Kako se vr{i kombinovanje programa na asemblerskom jeziku i programskom jeziku C?

Odgovor I pored toga {to se programi napisani na asemblerskom jeziku za dati procesor najbr`e izvr{avaju oni nisu univerzalni iz prostog razloga {to se asemblerski jezici od jednog procesora do drugog razlikuju. Na primer, asemblerski jezik za Intelove proceosre iz familije 80x86 razlikuje se od asemblerskog jezika za Motoroline procesore iz familije 680xx. Daleko bolje re{enje je ono koje bi koristilo neki univerzalni programski jezik jer bi takvo re{enje obezbedjivalo prenosivost programa sa jedne ma{ine na drugu. Na`alost takav jezik do dana dana{njeg ne postoji. Ali programski jezik

Page 61: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-60

C zadnje dve decenije ~ini se da postaje sve vi{e univerzalni jezik za veliki broj procesora. Ilustracije radi veliki broj programa za PC ma{ine, radne stranice zasnovane na procesorima iz familije Motorola MC 680xx, i mnogo drugih ma{ina napisan je na jeziku C. U su{tini C je univerzalni programski jezik koji sa neznatnom izmenom ili skoro bez modifikacije mo`e da se izvr{ava na bilo kojem procesoru. Program napisan na C-u treba samo rekompajlirati za dati procesor. Imaju}i u vidu da je C prenosivi jezik on sve vi{e postaje dominantan jezik posebno kod aplikacija koje se odnose na rad u realnom vremenu. Danas ~esto se sre}emo sa slede}om situacijom: Oko 70% do 80% od nekih programa je napisan na C-u a ostatak na asemblerskom jeziku. Postoje dva na~ina za umetanje kôda napisanog na asemblerskom jeziku u C-u. Prva metoda se naziva in-line asembliranje, a kod druge iskaz u C poziva external asemblerski jezik.

Test pitanje 2.50

Kako se vr{i umetanje 80x86 asemlerskog kôda u program na C-u?

Odgovor Sagleda}emo sada metod in-line koji se koristi kod Borland-ovog Turbo C (Microsoftov C takodje koristi in-line metod koji je sli~an Borlandovom, ali ranije verzije C-a ne podr`avaju ovaj metod). Analizira}emo slede}u sekvencu: Kako u programu napisanom na C-u izvr{iti postavljanje kursora na poziciji vrsta = 20 i kolona = 30. Kada je u pitanju Borlandov C tada ispred svake asemblerske instrukcije stoji prefiks "asm" koji predstavlja rezervisana re~ (Microsoft-ov C koristi rezervisanu re~ "_asm"). Dve verzije Borlandovog formata za in-line asembliranje oblika su: /*verzija 1 : koristi klju~nu re~ asm pre svake linije u in-line kodu */ main () { asm mov ah, 2; /*svaka linija zavr{ava sa ";" ili <CR>*/ asm mov bh, 0; asm mov dl, 20 /* komentar mora da ima C-ov a ne ";" asemblerski stil */ asm mov dh, 10; asm int 10h; } /* verzija 2 : koristi kljuj~nu re~ asm pre bloka in-line koda */ main () { asm { mov ah, 2 mov bh, 0 mov dl, 20 mov dh, 10 int 10h } }

Slede}a dva programa prikazuju kako se vr{i prikaz niza podataka. Primer_1 je napisan strogo na C-u. Kod Primer_2 koristi se kombinacija Borlandovog Turbo C-a i asemblerskog kôda. Uo~imo da se kod kombinovanja C-a i asemblera asemblerske direktive tipa OFFSET (kao kod instrukcije Mov DX, OFFSET PORUKA) ne prepoznaju od strane C-a.

Primer_1 : Program na jeziku C

# include <stdio.h> main() { printf ("Student Mika. \n"); }

Page 62: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-61

Primer_2 : Turbo C sa in-line asembliranjem

char const *PORUKA = "Student Mika. \"$"; main () { asm mov ah, 9; asm mov dx, PORUKA; asm int 21h; }

Slede}a programska sekvenca prikazuje takodje in-line asembliranje. In-line k�d postavlja kursor na poziciji definisanoj sa vrsta = 15 i kolona = 30, a zatim prikazuje niz podataka koriste}i kombinaciju Borlandovog C-a i asemblera. main () { int const vrsta = 15; int const kolona = 30; char const *PORUKA = Student Mika. \n $"; asm { mov ah, 2 mov bh, 0 mov dl, kolona mov dh, vrsta int 10 h /* postavi kursor na poziciju */ mov ah, 09 mov dx, PORUKA int 21 h /* prika`i poruku */ } }

Test pitanje 2.51

Kako C program poziva asemblerske procedure?

Odgovor I pored toga {to je in-line asembliranje jednostavno u praksi se ~esto koristi slede}i pristup: Kreiraju se potprogrami na asmblerskom jeziku a zatim se oni pozivaju iz C-a isto kao i funkcije C-a. (Treba ukazati da termin funkcija koji se koristi u C-u ima isto zna~enje kao termin procedura (ili potprogram) u asemblerskom jeziku). Ali pre nego {to se po~ne sa pisanjem rutina na asemblerskom jeziku koje }e se koristiti od strane C-a neophodno je prvo da se razume tehnika koja se odnosi na na~in prenosa parametara iz C-a u asemblerski jezik. Kod svih vi{ih programskih jezika kakvi su C, Fortran, Pascal i dr. prenos parametara potprogramima (funkcijama) vr{i se preko magacina. Neki od kompilatora, kakvi su Pascal i C, prenose parametre po vrednosti, dok kod drugih kompilatora (kakvi su Fortran, Basic) predaju se adrese vrednosti. Tako na primer, kod Basic-a predaje se samo ofset adresa, dok se kod Fortrana predaju kako adresa segmenta tako i ofset adresa. Termin konvencija poziva (calling convention) se odnosi na tehniku kojom jezik predaje parametre potprogramu u trenutku kada ga pozove. U daljem tekstu analizira}emo konvenciju poziva koju koristi programski jezik C.

Test pitanje 2.52

Koje se konvencije poziva koriste kod C-a?

Odgovor

Page 63: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-62

Konvencija poziva kod C-a koja se koristi za kombinovanje C-a sa MASM asemblerskim jezikom bi}e ilustrovana na primeru prikazanom na Slici 2.37. Za slu~aj da je pre poziva procedure _KURSOR, pokaziva~ magacina SP ukazivao na adresu 198Ch tada sadr`aj magacina u toku izvr{enja ovog potprograma ima}e oblik kao na Slici 2.38.

extrn kursor (int, int), main () { kursor (15, 12); printf ("Ovaj program postavlja kursor"); } ; kursor.asm .MODEL SMALL .CODE PUBLIC _KURSOR ; ova procedura je pisana sa ciljem da se pozove iz C-a _KURSOR PROC Push BP ; sa~uvaj vrednost BP-a Mov BP, SP ; koristi BP kao indeks magacina Mov DH, [BP + 4] ; dobavi x = vrsta iz magacina Mov DL, [BP + 6] ; dobavi y = kolona iz magacina Mov AH, 02 ; postavi registar za poziv Int Int 10h Pop BP ; obnovi sadr`aj BP-a Ret _KURSOR Endp

Slika 2.37 : Poziv procedure napisana na asemblerskom jeziku iz C-a

000C

000F

IP

BP

Adrese198C198B198A19891988198719861985198419831982

BP+6 ~uva vrednosty=12=0Ch

BP+4 ~uva vrednostx=15=0Fh

BP+2 ~uva adresupovratka

SP=BP

Slika 2.38 : Sadr`aj magacina

Procedura na asemblerskom jeziku koja se poziva iz C-a mora da po{tuje slede}a pravila: (1) Parametri se predaju po vrednostima u obrnutom redosledu od onog kako je nazna~eno. Na primer, funkcija prog(x,y,z) prvo predaje z, zatim y, a na kraju x. (2) Nakon {to su parametri predati u magacin se sme{ta par CS : IP. Ako je C kompajliran u SMALL ili COMPACT memorijski modul (ili ako je procedura NEAR) tada se sme{ta samo IP. Ako je C kompajliran za MEDIUM, LARGE ili HUGE (ili je procedura FAR) tada se u magacin sme{taju CS i IP (prvo CS a zatim IP). (3) U magacin se sme{ta BP a zatim se parametrima pristupa preko registra BP uz kori{}enje odgovaraju}eg razme{taja. U daljem toku rada BP ~uva ofset u odnosu na segmentni registar SS. (4) Zadnja instrukcija treba da je Ret sa brojem kao operand, jer je posao C-a da vrati magacin u po~etno stanje a tako|e i pozivnom k�du vrati upravljanje.

Page 64: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-63

(5) Ispred bilo kog imena deklarisanog kao "PUBLIC" mora da stoji "_" (kao na primer _KURSOR). Samo prva osam slova imena se prepoznaju, ostala se zanemaruju. (6) Kada C prenosi parametre o podacima tipa polja tada se ti podaci ne prenose po vrednostima nego kao pokaziva~i adresa (by reference). (7) Ako je C kompajliran u MEDIUM, HUGE ili LARGE modelu, tada se za procedure na asemblerskom jeziku koristi opcija FAR, a ako je kompajliran sa SMALL modelom tada se za procedure na asemblerskom jeziku koristi opcija NEAR. Analizirajmo sada kako izgleda k�d procedure cursor (x,y) gde su x i y vrednosti vrste i kolone respektivno, napisana na asemblerskom jeziku da bi bila pozvana od strane C-a. Specifi~nost procedure je ta {to se i sadr`aji registara AX, BX i CX sme{taju u magacin. Sadr`aj magacina u toku izvr{enja pozvane procedure prikazan je na Slici 2.39 b). .MODEL SMALL .CODE PUBLIC _KURSOR ; ova procedura je pisana da bude pozvana iz C-a _KURSOR PROC Push BP ; BP u magacin Mov BP, SP Push AX ; smesti registre ~iji se sadr`aj Push DX ; menja u toku izvr{enja ovog modula Push BX ; u magacin Mov DH, [BP + 4] ; x = vrsta smesti u DH Mov DL, [BP + 6] ; y = kolona smesti u DH Mov AH, 02 ; postavi uslove za poziv Int Int 10h Pop BX ; obnovi sadr`aj registra Pop DX Pop AX Pop BP Ret _KURSOR Endp End ; **************a) procedura _KURSOR ***************

000C

000F

IP

BP

AHAL

DHDL

BHBL

200120001FFF1FFE1FFD1FFC1FFB1FFA1FF91FF81FF71FF61FF51FF4

BP+6 ~uva vrednost y=12

BP+4 ~uva vrednost x=15

BP+2 ~uva adresu povratka

SP=BP

AX

BX

DX

b) sadr`aj magacina

Slika 2.39 : Procedura _KURSOR koja se poziva iz C-a

Test pitanje 2.53

Page 65: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-64

Kako se parametri vra}aju C-u? Odgovor U prethodnim test pitanjima smo ukazali kako se parametri predaju iz C-a u magacin a zatim kako se oni koriste od strane procedure napisane na asemblerskom jeziku. Suprotno pitanje bi bilo slede}e: [ta se de{ava kada funkcija u C-u o~ekuje da primi argumenat? Kada C o~ekuje argumenat od procedure na asemblerskom jeziku tada on o~ekuje da nadje povratni parametar u odredjeni registar ili registre. Parametri u zavisnosti od obima sme{taju se shodno pravilima definisanim na Slici 2.40. registar obim tip podatka u C-u AL 1 bajt char, short AX 2 bajta int DX:AX 4 bajta long

Slika 2.40 : Povratne vrednosti koje C o~ekuje od procedure

Ako je vrednost koju procedura vra}a tipa pokaziva~ (adresa) tada u AX }e se nalaziti IP za slu~aj da je procedura NEAR, a u DX:AX bi}e CS:IP kada je procedura tipa FAR. Analizirajmo sada slede}i primer: Tri vrednosti, x, y i z, tipa int, od strane funkcije na C-u se predaju proceduri na asemblerskom jeziku. K�d na asemblerskom jeziku obavlja njihovo sabiranje a sumu vra}a nazad C-u, koji prikazuje rezultat. Ovaj programski primer je prikazan na Slici 2.41 a), a izgled magacina na Slici 2.41 b). extrn unsigned long suma (int, int, int), { main() printf ("Suma je jednaka % u", suma (200, 450, 138)); } Procedura suma .asm je oblika .MODEL MEDIUM .CODE .PUBLIC _SUMA ; ova procedura tipa FAR pribavlja tri re~i iz magacina sabira ih, a sumu vra}a preko ; registarskog para DX:AX _SUMA PROC FAR Push BP ; sa~uvaj BP Mov BP,SP ; koristi BP kao pokaziva~ Sub AX, AX ; AX = 0 Mov DX, AX ; DX = 0 Add AX, [BP+6] ; x + 0 = AX Adc DX, 0 ; saberi prenos Add AX, [BP+8] ; x + y = AX Adc DX, 0 ; saberi prenos Add AX, [BP+10] ; x + y + z = AX Adc DX, 0 ; saberi prenos Pop BP ; obnovi sadr`aj BP-a Ret ; vrati se u C _SUMA Endp End ; ************************a) programski primer *********************

Page 66: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-65

Z

Y

X

CS

IP

BP

200120001FFF1FFE1FFD1FFC1FFB1FFA1FF91FF81FF71FF61FF51FF4

BP+10 pokazuje na Z

BP+8 pokazuje na Y

BP+6 pokazuje na X

SP=BP

b) izgled magacina

Slika 2.41 : Programski primer _SUMA

Test pitanje 2.54

Kako se novi asembleri povezuju sa C-om?

Odgovor Verzije asemblera skorijeg datuma kakvi su Microsoftov MASM 5.1 ili Borlandov TASM 1.0 pa navi{e u~inili su da povezivanje modula na asembleru i C-u bude lak{e. Kao prvo nema potrebe da se vodi briga o razme{taju ili po~etku imena koje se, ili koja se, zajedni~ki koriste od C-a i asemblera (tj. da se pamti BP i da svako ime po~inje simbolom '_' kao {to je bio slu~aj sa _KURSOR). Ilustracije radi program sa Slici 2.41 prepisan je na Slici 2.42. Uo~imo umetanje slova C u direktivi ".MODEL MEDIUM C". Ova direktiva omogu}ava asembleru da automatski izra~unava [BP+n] za sve parametre.

.MODEL MEDIUM , C .CODE .PUBLIC _SUMA SUMA PROC FAR POD1 : WORK, POD2 : WORD, POD3 : WORD Sub AX, AX Mov DX, AX Add AX, POD1 Adc DX, 0 Add AX, POD2 Adc DX, 0 Add AX, POD3 Adc DX, 0 Ret _SUMA Endp End

Slika 2.42 : Procedura SUMA - nova verzija

Test pitanje 2.55

Page 67: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-66

Kako se vr{i predaja adresa polja iz C-a preko magacina?

Odgovor Programski jezik C predaje promenljive po vrednosti preko magacina a strukture podataka tipa polja kao pokaziva~e. Naime ofset adresa polja se sme{ta u magacin ako je memorijski model SMALL ili MEDIUM, ina~e u magacin se sme{ta par CS:IP. Primer na Slici 2.43 ilustruje ovaj aspekt. U primeru se koristi polje iz C-a koje ukazuje na dnevne zarade radnika za sva pet dana u nedelji koriste}i za definiciju podatak unsigned int (0 do 255). Nakon toga se koristi asemblerski k�d za njihovo sabiranje i vra}anje sume C-u radi prikazivanja.

int zarade [5] = {196, 214, 178, 126, 249} ; extern unsigned short ned_plata (int zarade [ ]); main ( ) { printf ("Nedeljna plata = % u", ned_plata (zarade)); } ned_plata.asm ima slede}i oblik .MODEL MEDIUM .CODE .PUBLIC _NED_PLATA ; ovom procedurom se sabiraju pet bajtova ; na kraju suma se ~uva u registar AX _NED_PLATA PROC FAR Push BP ; sa~uvaj BP Mov BP,SP Push SI ; sa~uvaj SI Sub AX, AX Mov CX, 5 ; broja~ bajtova Mov SI, [BP+6] PONOVI : Add AL, [SI] ; dodaj dnevnu zaradu Adc AH, 0 Inc SI ; inkrementiraj pokaziva~ na Inc SI ; narednu zaradu Loop PONOVI Pop SI Pop BP Ret _NED_PLATA Endp End

Slika 2.43 : Program za odredjivanje nedeljne plate

Test pitanje 2.56

Kako se vr{i povezivanje rutina na asemblerskom jeziku sa C-om? Odgovor Pravila koja va`e kod povezivanja Microsoftovog Quick C sa MASM asemblerskim rutinama su slede}a: 1. Proveri da li procedura na asemblerskom jeziku deklari{e proceduru kao PUBLIC. Ime procedure treba da po~ne simbolom "_". Na primer, ako se procedura u C-u zove "mika" tada se ona u asembleru mora nazvati "_mika". Ako je memorijski model SMALL tada procedura u asembleru treba da je NEAR, a za slu~aj da je MEDIUM procedura traba da je tipa FAR. 2. U programu napisan na C-u deklari{i proceduru kao external.

Page 68: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-67

3. Asembliraj program na asemblerskom jeziku sa MASM kako bi se generisao objektni fajl, kao na primer mika.obj. 4. Kompajliraj program na C-u kako bi se generisao objektni fajl, kao na primer program.obj. (Quick C inicijalno generi{e memorijski model MEDIUM). 5. Pove`i oba objektna fajla u jedan izvr{ivi C>link program.obj _ mika.obj Kod Borlandovog C++ oni se povezuju zajedno na slede}i na~in C > bcc program.C mika.asm Za vi{e detalja o ovoj problematici ~itaocu se preporu~uje da konsultuje izvornu literaturu Microsoft-a i Borlanda

Test pitanje 2.57

Potrebno je da se izvr{i grananje na adresi ADR1 ako je LS bit pozicija operanda, koji se ~uva u 16-bitnom registru R1, jednaka 1. Pokazati kako se ova aktivnost mo`e izvesti kori{}enjem instrukcija: TEST i BNZ Napomena: efekat TEST instrukcije je slede}i TEST Rx,Ry,Rz ; if Ry =Rz then Z=1, else Z=0 Efekat instrukcije BNZ (branch if not zero) je BNZ LAB1 ; if Z=0 goto LAB1, else continue

Test pitanje 2.58

Neka su zadata dva 8-bitna broja A=0011 0001 i B=10011100 (a) Odrediti decimalni ekvivalenat za svaki broj usvaju}i da su oni : (1) neozna~ene celobrojne vrednosti; i (2) ozna~ene celobrojne vrednosti. (b) Sabrati oba binarna broja i interpretirati sumu, usvaju}i da su oni: (1) neozna~ene; i (2) ozna~ene celobrojne vrednosti. (c) Nakon operacije sabiranja odrediti vrednost statusnih markera C (carry), Z (zero), N (sign) i V (overflow). (d) Koja }e, od instrukcija uslovnog grananja (Slika 2.44), imati uslov true (istinit) nakon izvr{enog sabiranja.

Uslov grananja mnemanik test uslov branch if zero BZ Z=0 branch if not zero BNZ Z=0 branch if carry BC C=1 branch if not carry BNC C=0 branch if minus BN N=0 branch if plus BNN N=0 branch if overflow BV V=1 branch if not overflow BNV V=0

Slika 2.44 Instrukcije uslovnog grananja i stanje uslovnih markera Napomena: Smatrati da operaciju sabiranja izvodi hipoteti~ki procesor.

Test pitanje 2.59

Lokacija na vrhu magacina, TOS, sadr`i vrednost 4130. Pokaziva~ magacina, SP, ima vrednost 3600. Instrukciju tipa CALL PP1 ~ine dve re~i. Prva re~ predstavlja opkôd i nalazi se na adresi 1200, a druga re~ ~ija je vrednost 2500 predstavlja po~etnu adresu potprograma PP1 i nalazi se na adresi 1202. Kakvi su sadr`aji PC-a, SP-a i TOS-a :

Page 69: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-68

(a) pre nego {to se instrukcija CALL PP1 pribavi iz memorije

(b) nakon izvr{enja instrukcije CALL PP1

(c) nakon povratka iz procedure

Test pitanje 2.60 Neka je zadat 8-bitni operand C=11001100. Za hipoteti~ki procesor napisati nezavisne sekvence

koje obavljaju slede}e operacije:

(a) SET b0 i b4

(b) RESET b2 i b6

(c) FLIP b1 i b7

(d) SIFT b0 i b7

Napomena:

(1) Bitovi u okviru bajta su definisani kao b7b6b5b4b3b2b1b0 gde je b7 MSB a b0 LSB;

(2) Za A=10101101 operacije FLIP b3, SIFT b5, RESET b2 SET b1 su definisane kao

FLIP b3 : A=10100101, gde A=A⊕B, i B=00001000

SHIFT b5 : A=00100000, gde A=A⋅B, i B=00100000

RESET b2 ; A=10101001, gde A=A⋅B, i B=1111 1011

SET b1 : A=10101111, gde A=A+B, i B=00000010

Test pitanje 2.61

Pokazati da jedna~ina Z+(N⊕V)=1 predstavlja potpuni test za uslov ACC≤0 kada se koristi aritmetika dvoji~nog komplementa. Na osnovu tablice istine, odredi slo`enost logike kojom se implementika uslov ACC≤0

Test pitanje 2.62

Pokazati da jedna~ina Z+(N⊕V)=0 predstavlja potpuni test za uslov ACC>0 kada se koristi aritmetika dvoji~nog komplementa. Na osnovu tablice istine, odredi slo`enost logike kojom se implementira uslov ACC>0.

Test pitanje 2.63

Pokazati da li su korektna imena testova i jedna~ine koje va`e za te testove, kada se manipulacije vr{e nad brojevima u dvoji~nom komplementu. Ime testa jedna~ina Carry set C=1 Carry clear C=0 Overflow V=1 no overflow V=0 negative N=1 positive N=0 (ACC)=0 Z=1 (ACC)≠0 Z=0 (ACC)>0 Z+(N⊕V)=0

Page 70: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-69

(ACC)<0 (N⊕V)=1 (ACC)≥0 (N⊕V)=0 (ACC)≤ 0 Z+(N⊕V)=2 (ACC)>(B) (C+Z)=0 (ACC)<(B) (N⊕V)=1 (ACC)≥(B) C=0 (ACC)≤(B) (C+Z)=1

Test pitanje 2.64

U slede}em programu napisanom na asemblerskom jeziku mikroprocesora 80x86 popuniti blanko mesta. Glavni program defini{e podatke i poziva drugi modul koji sabira 5 bajtova podataka, a zatim ~uva rezultat. Napomena: Neka blanko mesta mogu biti suvi{na

.MODEL SMALL

.STACK 100h

.DATA

.PUBLIC ______, _______ POD1 DB 16,14,27,36,12 REZUL DW ?

.CODE EXTRN ________:FAR

POC: MOV AX,@POD1 MOV DS,AX CALL SUMA MOV AH,4Ch INT 21h END ________

; u drugom fajlu postoji modul za sabiranje 5 bajtova podataka

.MODEL SMALL _______POD1:BYTE _______REZUL:WORD

BROJ EQU 5 .CODE _______SUMA

SUMA PROC ______ MOV BX,OFFSET POD1 SUB AX,AX MOV CX,BROJ

_______: ADD AL,BYTE PTR[BX] ADC AH,0 INC BX LOOP PONOVI MOV REZUL,AX RET

_______ ENDP END ______

Test pitanje 2.65

Page 71: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-70

Neka postoje ~etiri posebna modula ~ija su segmentna imena KODS1, KODS2, KODS3 I KODS4, respektivno. Ulazna ta~ka KODS1 je 00060h a mapa koja je dobijena nakon procesa linkovanja je slede}eg oblika.

Start Stop Length Name 00060 ---------- 0000Bh KODS1

--------- ---------- 00014h KODS2 --------- ---------- 00025h KODS3 --------- ---------- 00041h KODS4

(a) popuniti blanko polja ako su svi segmenti definisani kao PARA (b) popuniti blanko polja ako su svi segmenti definisani kao WORD

Zadatak 2.38

Kreirati program na asemblerskom jeziku mikroprocesora 80x86 koga ~ine slede}e komponente: (a) U glavnom programu su definisane dve vrednosti: 1228 i 52400 (b) Glavni program poziva dva posebna modula, i predaje vrednosti (prenosi parametre) preko magacina. (c) U prvom modulu vr{i se mno`enje oba broja, a rezultat ponovo se vra}a nazad glavnom modulu. (d) U drugom modulu vr{i se deljenje oba broja i predaje se glavnom programu koli~nik i ostatak. (e) Ukazati na sadr`aj magacina u toku izvr{enja svakog modula ako je neposredno pre prve instrukcije CALL u glavnom programu sadr`aj registra SP=FFF8h.

Zadatak 2.39

Koriste}i 80x87 instrukcije, kreirati program za izra~unavanje izraza: z=(x2+y2)1/2, gde su x=3,12 a y=5,43.

Zadatak 2.40

Koriste}i 80x87 instrukcije, kreirati program za izra~unavanje izraza: y=2x2+5x+12,34, za x=1,25.

Zadatak 2.42

Koriste}i 80x87 instrukcije, kreirati program za izra~unavanje: 3(πr3)/4 za r=25,5.

Test pitanje 2.66

Ukazati koji se adresni na~ini rada za izvori{ni i odredi{ni operand koriste kod svake od nabrojanih instrukcija instrukcija adresni na~in rada za drugi

izvori{ni i odredi{ni operand adresni na~in rada za prvi izvori{ni operand

MOV A,B direktno memorijski direktno memorijski LD A,R3 direktno memorijski registarsko direktno LD R3,A registarsko direktni direktno memorijski LDI R3,#413 registarsko direktni neposredni MOV R4,D registarsko direktni direktno memorijski IN AL,D8 registarsko direktni direktni ADD (R0),R2 registarsko direktni registarsko direktni

Page 72: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-71

(odgovor je tamnije {rafirani deo) Test pitanje 2.67 Napisati programsku sekvencu za impementaciju izraza A = (B+C)*(D+E) kod 3-, 2-, 1- i 0-adresnih ma{ina. U toku programiranja pridr`avati se slede}eg pravila: Izra~unavanje izraza ne sme da promeni vrednosti njegovih operanada.

Odgovor T-je memorijska lokacija gde se ~uva privremeno promenljiva 3-adresna 2-adresna 1-adresna 0-adresna ADD A,B,C LDA A,B LDA A PUSH D ADD T,D,E ADD A,C ADD E PUSH E MPY A,A,T LDA T,D STA T ADD ADD T,E LDA B PUSH C MPY A,T ADD C PUSH B MPY T ADD STA A MPY POP A

Test pitanje 2.68

Nezavisno od tipa ma{ine, strukture registara CPU-a, i prirode instrukcija, {ta svaki skup instrukcija mora da specificira, tj. koja kôdna polja mora da sadr`i svaka instrukcija?

Odgovor Svaka instrukcija eksplicitno ili implicitno mora da sadr`i kôdna polja pomo}u kojih se spcificira: (1) koja operacija treba da se obavi, tipi~ni primeri su ADD, MOV, LDA, SUB,... (2) gde se nalazi operand ili operandi ako postoje: operand ili operandi se mogu ~uvati u registrima CPU-a, memoriji, ili U/I portovima. Lokacija operanda se mo`e specificirati eksplicitno kao {to je memorijska adresa, registar CPU-a, ili da se specificira implicitno u okviru opkôda kao {to je akumulator kod jedno-adresnih ma{ina, ili magacin kod nulto-adresnih. (3) gde smestiti rezultat, ako postoji - lokacija rezultata na sli~an na~in kao i lokacija operanda se mo`e eksplicitno ili implicitno specificirati. (4) gde se nalazi naredna instrukcija - in-line kôd je sekvenca instrukcija bez eksplicitnog grananja, a kod instrukcija koje menjaju tok programskog izvr{enja Branch ili Jump adresa mora biti zadata kao deo teku}e instrukcije. Instrukcija Skip predstavlja izuzetak - adresa preskoka (skip) je implicitna, tj. to je adresa instrukcije nakon naredne instrukcije.

Test pitanje 2.69

Dati kratak opis sredstava koji se koriste od strane programera na asemblerskom jeziku.

Odgovor Sredstva koja programeri na asemblerskom jeziku koriste su: (1) editor - koristi se za ediciju izvornog kôda (2) asembler - omogu}ava programeru da od programa napisanih na asemblerskom jeziku generi{e programe na ma{inskom jeziku. Prevodi iskaze asemblerskog jezika u binarne ekvivalente.

Page 73: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-72

(3) linker - povezuje posebno asemblirane module u jedinstveni modul koji je pogodan za punjenje i izvr{enje (4) loader - puni izvr{ive binarne kôdove u memoriju i transformi{e neke logi~ke adrese u odgovaraju}e fizi~ke. (5) debugger - omogu}ava programeru da nadgleda (kontroli{e) detalje koji se odnose na izvr{enje programa (6) razvojni sistem - celina hardvera i softvera koja se koristi da podr`i razvoj novih sistema

Test pitanje 2.70

Koriste}i instrukcije date u slede}oj tabeli klasa instrukcije C instrukcije asemblerskog jezika kopiranje podataka a=b MOV b,a aritmeti~ko/logi~ke b=c+d*e ADD c,b,a upravlja~ke go to LAB1 BR LAB1 prevesti slede}e iskaze napisane na programskom jeziku C u odgovaraju}e asemblerske. Usvojiti da su sve promenljive tipa Integer. a) A = (B+C) * (D+E); b) A = B*C+D*E; c) X = X+ Y; d) U = V; W = X * Y;

Odgovor Neka s i t predstavljaju memorijske lokacije u kojima se privremeno ~uvaju podaci

a) ADD B,C,s ADD D,E,t MPY s,t,A b) MPY B,C,s MPY D,E,t ADD s,t,A c) ADD X,Y,X d) MOV V,U MPY X,Y,W

Test pitanje 2.71 Stavke koje prate specifikaciju instrukcije su: a) koja operacija treba da se obavi, b) gde se nalazi operand ili operandi ako postoje, c) gde se sme{ta rezultat ako postoji , i d) gde se nalazi naredna instrukcija Kako treba specificirati instrukciju uslovnog grananja koja uporedjuje dva broja i obavlja grananje ako su oni jednaki?

Page 74: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-73

Odgovor 1) opkod : odgovara insturkciji Branch-equal 2) operandi : gde se nalaze oba operanda koji se uporedjuju 3) rezultat : ovu stavku nije potrebno specificirati 4) naredna instrukcija : lokacija naredne instrukcije ako je uslov istinit.

Test pitanje 2.72

Objasniti zna~enje slede}ih termina: (a) segment; (b) ofset; (c) grani~na adresa

Test pitanje 2.73

Koja je uloga magacina? Koja je inicijalna vrednost vrha magacina (Top of Stack - TOS) i kako se adresira magacin?

Test pitanje 2.74

U toku izvr{enja programa CS=74A5h, SS=752Bh, IP=54h i SP=24h. Izra~unati adrese: (a) instrukcije koja se izvr{ava, i (b) teku}e lokacije vrha magacina.

Test pitanje 2.75

Kakva je namena (svrha) instrukcije INTn ?

Test pitanje 2.76

Objasniti razlike izmedju kompajlera i asemblera.

Test pitanje 2.77

Objasniti razlike izmedju direktiva i instrukcija i dati po dva primera od svake.

Test pitanje 2.78

(a) Objasniti ulogu procedure (b) Kako se defini{e po~etak i kraj procedure? (c) U kom slu~aju procedura se defini{e kao FAR? (d) U kom slu~aju procedura se defini{e kao NEAR?

Test pitanje 2.79

Kakav }e biti generisani heksadecimalni kôd za: (a) DB 34; (b) DB '34'; (c) DB 4DUP(0)

Page 75: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-74

Test pitanje 2.80

Sa aspekta izvr{enja koja razlika postoji izmedju slede}e dve instrukcije? ADD CX,2548h ADD CX,[2548h]

Test pitanje 2.81

Sa ta~ke gledi{ta izvr{enja ukazati na razlike izmedju slede}e dve instrukcije ADD BX,25 ADD [BX],25

Test pitanje 2.82

Objasniti koju aktivnost obavlja slede}a instrukcija ADD DX,[BX+SI+8]

Test pitanje 2.83

Kod specifikacije slede}eg iskaza postoji gre{ka ADD [BX],[DI] (a) Izvr{iti identifikaciju gre{ke (b) Objasniti kako se mo`e ispraviti gre{ka

Test pitanje 2.84

Za zadate definicije podataka prona}i gre{ke u iskazima, i obaviti odgovraju}e kodiranje da bi se iste ispravile BAJTA DB 23 BAJTB DB 49 RECC DW 162 (a) ADD BAJTA,BAJTB (b) ADD AL,RECC (c) SUB BL,047Bh

Test pitanje 2.85

Objasniti kakav efekat imaju instrukcije INT i IRET na magacin.

Test pitanje 2.86

Napisati program za izra~unavanje Fibona~ijevog niza 1,1,2,3,5,8,13,... (Sa izuzetkom prva dva broja niza, svaki broj se dobija kao suma prethodna dva). Koristi instrukciju LOOP da bi postavio granicu na 12 iteracija.

Test pitanje 2.87

a) Odrediti vrednost svake fizi~ke adrese 1000H : 1234H 0100H : ABCDH

Page 76: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2-75

A200H : 12CFH B2C0H : FA12H b) Odrediti nepoznate vrednosti za svaku fizi~ku adresu A000H :? = A0123H ?: 14DAH = 235DAH D765 : ? =BABC0H ?: CD21H = 32D21H

Test pitanje 2.88

Segment podataka je lociran po~ev od adrese A0000H do AFFFFH. Koja vrednost mora biti napunjena u DS?

Test pitanje 2.89

Odrediti vrednost fizi~ke adrese izvornog operanda za slede}u instrukciju MOV AL,1234H+[SI*2] neka je DS = 0200H a SI = 2000H

Odgovor Fizi~ka adresa = DS(0) + 1234H + (SI * 2) = 02000H + 1234H + (2000H * 2) = 07234H

Test pitanje 2.90

Identifikovati adresne na~ine rada izvori{nih i odredi{nih operanada u slede}im instrukcijama (a) MOV AL,BL (b) MOV AX,0FFH (c) MOV [DI],AX (d) MOV DI,[SI] (e) MOV [BX]+0400H,CX (f) MOV [DI]+0400H,AH (g) MOV [BX][DI]+0400H,AL

Test pitanje 2.91

Kako se naziva proces otklanjanja gre{aka u programu?

Test pitanje 2.92

Koja je razlika izmedju sintaksne gre{ke i gre{ke u izvr{enju programa?

Test pitanje 2.93

Opisati kakav se rezultat dobija nakon izvr{enja slede}e sekvence instrukcija. Rezultat se ~uva u registru AL.

Page 77: 2. Format naredbi, skup naredbi, adresiranja, rad sa ...es.elfak.ni.ac.rs/Books/StaraZbirka/Poglavlje2.pdf · 2-1 2. Format naredbi, skup naredbi, adresiranja, rad sa procedurama

2. Zbirka zadataka iz Mikroprocesora i mikrora~unara

2-76

MOV AL,01010101B AND AL,00011111B OR AL,11000000B XOR AL,00001111B NOT

Odgovor AL = 25H

Test pitanje 2.94

Napisati programsku sekvencu za sabiranje dve heksadecimalne cifre koje su sme{tene na bajt lokaciji ALFA. Rezultat smestiti u AL.

Odgovor MOV AL,ALFA MOV BL,AL MOV CL,04H ROR BL,CL AND AL,OFH AND BL,OFH ADD AL,BL