You are on page 1of 117

UNIVERZITET U ISTONOM SARAJEVU

SAOBRAAJNI FAKULTET DOBOJ

Mr Miroslav Kostadinovi, dipl. ing. el.

Praktikum za auditorne vjebe iz

MIKROPROCESORSKIH SISTEMA

Doboj, 2013.
Edicija: Tehnike knjige-udbenici
Naziv udbenika: Praktikum za auditorne vjebe iz mikroprocesorskih sistema
Autor: mr Miroslav Kostadinovi
Recezenti: prof. dr Zlatko Bundalo, Elektrotehniki fakultet Banja Luka
prof. dr Duanka Bundalo, Filozofski fakultat Banja Luka
Dizajn korica: Perica Luki, dipl. ing. inf.
Izdava: Saobraajni fakultet Doboj
Glavni i odgovorni urednik: prof.dr Perica Gojkovi
tampa: Izdavako-grafika kua GRAFOMARK, Laktai
tampanje odobrilo: Nauno-nastavno vijee Saobraajnog fakulteta, odluka
broj NNV: 61/12 od 09.07.2012. godine.
Tira: 100

CIP -

,
004.2(075.8)(076)
004.31(075.8)(076)
,
Praktikum za auditorne vjebe iz
mikroprocesorskih sistema / Miroslav Kostadinovi.
- Doboj : Saobraajni fakultet, 2013 (Laktai :
Grafomark). - 115 str. : tabele, graf. prikazi ;
25 cm. - (Edicija Tehnike knjige-udbenici)
Tira 100. - Bibliografija: str. 115.
ISBN 978-99955-36-36-7
COBISS.BH-ID 3571736

Napomena:
Sva prava zadrava autor. Nije dozvoljeno fotokopiranje, niti drugi vid
umnoavanja ovog udbenika bez pismene saglasnosti autora.
PREDGOVOR

Praktikum iz mikroprocesorskih sistema nastao je iz viegodinjih auditornih vjebi koje je autor


drao na Vioj tehnikoj koli i Saobraajnom fakultetu u Doboju i ispitnih zadataka u okviru
predmeta Arhitektura raunara i Mikroprocesorski sistemi.
Sadraj i obim praktikuma je proizaao iz plana i programa izbornog predmeta Mikroprocesorski
sistemi i prvenstveno je namjenjen studentima tree godine na smjeru telekomunikacije
Saobraajnog fakulteta Doboj kako bi proirili svoje znanje iz oblasti mikroprocesorskih
sistema.
Praktikum se sastoji iz osam poglavlja koji se izuavaju kao zasebne cjeline. Prvo poglavlje
opisuje brojne sisteme i kako se prevode brojevi iz jednog brojnog sistema u drugi. Jedan dio
ovog poglavlja se odnosi na binarnu, oktalnu i heksadecimalnu aritmetiku. Drugo poglavlje
pokriva tipove podataka koji se predstavljaju i koriste u raunaru. Tree poglavlje obrauje
strukturu mikroprocesora sa osvrtom na programski model, naine adresiranja i signale
mikroprocesora Intel 8085. etvrto poglavlje bavi se osnovama programiranja od pisanja
algoritama do metoda programiranja. U petom poglavlju daje se uvod u asemblerski jezik
mikroprocesora Intel 8085. esto poglavlje bavi se skupom instrukcija mikroprocesora Intel
8085. Sedmo poglavlje obezbjeuje veliki broj jednostavnih i znaajnih programa realizovanih
koritenjem asemblerskog jezika za mikroprocesor Intel 8085. Osmo poglavlje sastoji se od
zadataka predispitnog testa. U prilogu daje se pregled skupa instrukcija mikroprocesora Intel
8085.
Na kraju autor se zahvaljuje recezentima prof. dr Duanki Bundalo i prof. dr Zlatku Bundalu,
koji su nali slobodnog vremena da pregledaju dati tekst i daju niz korisnih savjeta i sugestija i
time daju znaajan doprinos u konanom izgledu ovog praktikuma.

Autor
SADRAJ
1. BROJNI SISTEMI 5

1.1. PREGLED DECIMALNOG BROJNOG SISTEMA 6

1.2. BINARNI BROJNI SISTEM 6

1.3. ORGANIZACIJA PODATAKA 7

1.4. HEKSADECIMALNI BROJNI SISTEM 8

1.5. OKTALNI BROJNI SISTEM 10

1.6. OZNAENI I NEOZNAENI BROJEVI 11

1.7. ZNAKOVNO I PROIRENJE NULAMA 12

2. PREDSTAVLJANJE PODATAKA 15

2.1. BINARNO KODOVANI DECIMALNI BROJEVI 16

2.2. BCD ARITMETIKA 21

2.3. ALFANUMERIKI KODOVI 22

2.4. PREDSTAVLJANJE BROJNIH PODATAKA 23

3. STRUKTURA PROCESORA 25

3.1. PROGRAMSKI MODEL MIKROPROCESORA INTEL 8085 27

3.2. NAINI ADRESIRANJA 30

3.3. SIGNALI MIKROPROCESORA INTEL 8085 31

4. PROGRAMIRANJE 37

4.1. ALGORITMI 38

4.2. PROGRAMIRANJE I PROGRAMSKI JEZICI 40

4.3. PROGRAMSKI JEZICI 43

4.4. METODE PROGRAMIRANJA 44


5. ASEMBLERSKI JEZIK 45

5.1. ASEMBLER ZA MIKROPROCESOR INTEL 8085 46

5.2. PSEUDO INSTRUKCIJE 46

6. SKUP INSTRUKCIJA MIKROPROCESORA INTEL 8085 49

6.1. INSTRUKCIJE PRENOSA PODATAKA 50

6.2. INSTRUKCIJE KOJE MANIPULIU SADRAJEM


AKUMULATORA I REGISTARA 51

6.3. INSTRUKCIJE ZA UPRAVLJANJE


TOKOM IZVRAVANJA PROGRAMA 53

6.4. INSTRUKCIJE ZA UPRAVLJANJE STEKOM,


ULAZOM/IZLAZOM I MIKROPROCESOROM 54

7. ZADACI 57

8. PREDISPITNI TEST 99

A. PRILOG 111

A.1. INSTRUKCIJSKI SET ZA MIKROPROCESOR INTEL 8085 112

LITERATURA 115
1. BROJNI SISTEMI
6 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Mnogi moderni raunarski sistemi ne predstavljaju numerike vrijednosti korienjem


decimalnog brojnog sistema. Da bi razumjeli ogranienja raunarske aritmetike, moramo
najprije razumjeti kako se brojevi predstavljaju u raunaru.

1.1. PREGLED DECIMALNOG BROJNOG SISTEMA


Mi koristimo decimalni brojni sistem (sa bazom 10) ve mnogo vremena, tako da smo se navikli
koristiti ga ne razmiljajui. Kada vidimo broj kao to je 123, ne razmiljamo kolika je
vrijednost tog broja; ve radije, stvaramo mentalnu sliku o tome koliko neega ovaj broj
predstavlja. U stvarnosti, meutim, broj 123 predstavlja:

1102 + 2101 + 3100 ili 100+20+3=123.


Svaka cifra koja se nalazi na lijevoj strani od decimalnog zareza predstavlja vrijednost izmeu
nula i devet koja se mnoi sa rastuim stepenom od deset. Cifre koje se nalaze sa desne strane
decimalnog zareza predstavljaju vrijednost izmeu nula i devet koja se mnoi sa rastuim
negativnim stepenom od deset. Na primjer, vrijednost 123.456 se moe predstaviti:

1102 + 2101+ 3100+ 410-1 + 510-2 + 610-3 ili


100 + 20 + 3 + 0.4 + 0.05 + 0.006 .

1.2. BINARNI BROJNI SISTEM


Najmoderniji raunarski sistemi (ukljuujui IBM PC) rade sa binarnom logikom. Raunar
predstavlja vrijednosti korienjem dva naponska nivoa (obino 0 i +5V). Sa ova dva nivoa
moemo prikazati tano dvije razliite vrijednosti. Ovo mogu da budu bilo koje dvije razliite
vrijednosti, ali po dogovoru koristimo vrijednosti 0 i 1. Ove dvije vrijednosti odgovaraju dvjema
ciframa koje se koriste u binarnom brojnom sistemu.
Binarni brojni sistem funkcionie ba kao i decimalni, uz dva izuzetka: binarni sistem sadri
samo dvije cifre 0 i 1 (za razliku od cifara 0-9), i binarni sistem koristi stepen od dva, a ne deset
(drugim rijeima baza binarnog sistema je 2, a decimalnog 10). Zbog toga je veoma lako
pretvarati binarne brojeve u decimalne. Za svaku 1 u binarnom nizu, dodajemo 2n, gdje je n
pozicija binarne cifre u nizu brojei od nulte pozicije. Na primjer, binarna vrijednost 11001010
predstavlja:

127 + 126 + 025 + 024 + 123 + 022 + 121 + 020 =


128 + 64 + 8 + 2 = 20210 .
Pretvaranje decimalnih brojeva u binarne je neto komplikovanije. Naime, decimalni broj
dijelimo sa 2, ostatak dijeljenja uzimamo kao cifru binarnog broja na najnioj poziciji, a rezultat
koristimo za sljedee dijeljenje sa 2. Ostatak sljedeeg dijeljenja uzimamo kao cifru na sljedeoj
poziciji. Postupak dijeljenja ponavljamo sve dok rezultat dijeljenja ne postane jednak nuli. Na
primjer, izvriemo pretvaranje broja 345:
345/2 = 172 (1);
172/2 = 86 (0);
86/2 = 43 (0);
43/2 = 21 (1);
21/2 = 10 (1);
10/2 =5 (0);
5/2 =2 (1);
2/2 =1 (0);
1/2 =0 (1).
1. Brojni sistemi 7

Binarni broj koji se dobije je 101011001.

1.3. ORGANIZACIJA PODATAKA


U istoj matematici binarne vrijednosti se mogu sastojati od neogranienog broja bita. Raunari,
s druge strane, u optem sluaju rade sa odreenim brojem bita. Uobiajeni skupovi bita su jedan
bit, grupa od etiri bita (koji se nazivaju niblovi nibbles), grupa od osam bita (tzv. bajtovi
bytes), grupa od 16 bita (koja se naziva rije words), i tako dalje.
BITI
Predstavljaju najmanju jedinicu u raunaru. Kako jednim bitom moemo da predstavimo samo
dvije razliite vrijednosti (obino nula i jedinica) dobijamo utisak da se vrlo malo stavki moe
predstaviti na ovaj nain. To nije tano! Postoji neogranieno mnogo stavki koje mogu biti
predstavljene upotrebom samo jednog bita.
Sa jednim bitom moemo prikazati dva razliita dogaaja. Primjeri za ovo su: nula ili jedan,
ukljueno ili iskljueno stanje, pravilno ili pogreno, tano ili netano itd. Uglavnom, ne postoji
ogranienje u smislu upotrebe samo binarnih tipova podataka.
NIBLOVI
Nibl ili tetrada je skup od etiri bita. Ovakva grupa podataka je posebno zanimljiva pri
razmatranju BCD (Binary Coded Decimal) i heksadecimalnih brojeva. etiri bita u grupi
predstavljaju jednu BCD ili heksadecimalnu cifru. Sa niblom, moemo da predstavimo do 16
razliitih vrijednosti.
BAJTOVI
Najbitnija struktura podataka u raunarskoj tehnici svakako jeste bajt. Bajt se sastoji od osam
bita i to je najmanja jedinica podataka koja se moe adresirati kod svih raunarskih arhitektura.
Kapacitet memorije svakog raunara izraava se brojem bajtova. Bitovi u bajtu numeriu se,
prema dogovoru, kao na sljedeoj slici.

Bit 0 je bit nieg reda ili najmanje znaajan bit (LSB Least Significant Bit), dok je bit 7 bit
vieg reda ili najvie znaajan bit (MSB Most Significant Bit).

Biti 0-3 ine nibl nieg reda (low order nibble), dok biti 4-7 ine nibl vieg reda (high order
nibble). Kako se bajt sastoji od tano dva nibla, potrebne su dvije heksadecimalne cifre da bi se
predstavila vrijednost bajta. O heksadecimalnom brojnom sistemu bie vie rijei neto kasnije.
S obzirom da bajt sadri osam bita, sa njim se moe predstaviti 28, ili 256, razliitih vrijednosti.
U optem sluaju, mi emo koristiti bajt za predstavljanje numerikih vrijednosti u opsegu 0 do
8 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

255, oznaenih brojeva u opsegu 128 do 127, za prikaz ASCII/IBM alfanumerikih kodova, i
za druge strukture podataka koje ne zahtijevaju vie od 256 razliitih vrijednosti.
RIJE I DUPLA RIJE

Dupla rije (double word), kao to samo ime kae, ima 32 bita, i ine je dvije rijei od po 16

1.4. HEKSADECIMALNI BROJNI SISTEM


Veliki problem pri upotrebi binarnog brojnog sistema je njegova nepreglednost. Da bi
predstavili broj 202 (decimalno) u binarnom obliku potrebno nam je osam binarnih cifara. U
decimalnom sistemu ovaj broj je predstavljen sa samo tri decimalne cifre. Kada radimo sa
veoma velikim vrijednostima, binarni brojevi brzo postaju preveliki. Naalost, raunar radi sa
binarnim brojevima, tako da je pogodnije koristiti binarni brojni sistem. Iako mi moemo vriti
pretvaranje brojeva iz decimalnog u binarni sistem i obrnuto, ovakvo pretvaranje ne predstavlja
trivijalan zadatak. Heksadecimalni brojni sistem (sa bazom 16) rjeava opisane probleme.
Heksadecimalni brojevi omoguavaju dvije karakteristike koje su nama znaajne: veoma su
kompaktni, i lako ih je pretvarati u binarne brojeve i obrnuto. Zbog toga, veina dananjih
raunarskih sistema koristi heksadecimalni brojni sistem za prikazivanje podataka. Kako je baza
heksadecimalnog broja 16, svaka heksadecimalna cifra lijevo od heksadecimalnog zareza
predstavlja vrijednost koja se mnoi sa rastuim stepenima od 16. Na primjer, broj 1234
(heksadecimalno) je jednako:

1163 + 2162 + 3161 + 4160 ili 4096 +512 + 48 + 4 = 4660 (decimalno).


Svaka heksadecimalna cifra moe predstavljati jednu od 16 vrijednosti izmeu 0 i 15. S obzirom
da postoji samo deset decimalnih cifara, potrebno je uvesti dodatnih est cifara koje e
predstavljati vrijednosti u opsegu od 10 do 15. Da ne bi morali izmiljati nove simbole za ove
cifre, dogovoreno je da se koriste slova A do F.
Heksadecimalni brojevi se esto koriste u raunarskoj tehnici, pa je potrebno posebno oznaiti
ove brojeve da znamo da se radi o heksadecimalnim brojevima. Heksadecimalne cifre se
oznaavaju sa slovom h ili H u indeksu broja koji piemo (npr. 1234H, 5AEF4H, 64D54H itd.).
Decimalni brojevi obino nemaju nikakvu posebnu oznaku ili se u indeksu pie 10 (npr. 256,
1810, 7863 itd.), dok se za oktalne brojeve (o njima vie u sljedeem odjeljku) u indeksu pie
broj 8 (npr. 458, 678, 1238 itd.).
Kao to se moe vidjeti, heksadecimalni brojevi su kompaktni i laki za itanje. Takoe,
pretvaranje izmeu binarnih i heksadecimalnih brojeva je jednostavno.
1. Brojni sistemi 9

Binarni Heksadecimalni

0000 0

0001 1

0010 2

0011 3

0100 4

0101 5

0110 6

0111 7

1000 8

1001 9

1010 A

1011 B

1100 C

1101 D

1110 E

1111 F

U prikazanoj tabeli date su sve informacije koje su potrebne da bi pretvorili bilo koji
heksadecimalni u binarni broj i obrnuto.
Da bi pretvorili heksadecimalni u binarni broj, prosto izvrimo zamjenu odgovarajua etiri bita
iz tabele za svaku heksadecimalnu cifru u broju. Na primjer, da bi pretvorili 0ABCDH u binarnu
vrijednost, prosto pretvorimo svaku heksadecimalnu cifru prema tabeli koja je prikazana.

0 A B C D heksadecimalno

0000 1010 1011 1100 1100 binarno


10 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Pretvaranje binarnog broja u heksadecimalni format je takoe lako. Prvi korak sastoji se u
dodavanju potrebnog broja nula binarnom broju na strani MSB-a, tako da se obezbjedi da broj
bita predstavlja umnoak broja etiri. Sljedei korak je razdvajanje binarne vrijednosti u grupe
od po etiri bita. Konano, gledajui za ove binarne vrijednosti ekvivalentne heksidecimalne
cifre dobijamo heksadecimalni ekvivalent binarnog broja.

1) 1011001010
2) 001011001010
3) 0010 1100 1010
4) 2CAH

1.5. OKTALNI BROJNI SISTEM


Oktalni brojni sistem je po svemu slian heksadecimalnom. ak je i pretvaranje iz oktalnog u
binarni i obrnuto potpuno analogno pretvaranju kod heksadecimalnog brojnog sistema. Razlika
je u tome to kod oktalnog brojnog sistema baza nije 16 ve 8. Cifre kod oktalnog brojnog
sistema uzimaju vrijednost 0-7. Na primjer, pogledajmo koju decimalnu vrijednost ima oktalni
broj 4568.

482 + 581 + 680 ili 256 +40 + 6 = 302 (decimalno).


Pretvaranje iz oktalnog u binarni i obrnuto se vri slino kao kod heksadecimalnog sistema,
samo to se biti grupiu u skupove od tri bita i koristi se sljedea tabela za konverziju.

Binarni Oktalni

000 0

001 1

010 2

011 3

100 4

101 5

110 6

111 7

Oktalni brojevi se takoe esto koriste za predstavljanje podataka u raunarskom sistemu. Oni su
pogodniji za korienje u odreenim situacijama u odnosu na heksadecimalne, iako se
heksadecimalni brojevi daleko ee koriste.
Konverzija izmeu oktalnog i heksadecimalnog brojnog sistema vri se pretvaranjem prvo u
binarni brojni sistem, a zatim u eljeni brojni sistem, dakle posrednim putem.
1. Brojni sistemi 11

1.6. OZNAENI I NEOZNAENI BROJEVI


Dosada smo tretirali binarne brojeve kao neoznaene vrijednosti. Binarni broj ...00000
predstavlja nulu, ...00001 predstavlja jedan, ...00010 predstavlja dva, i tako do beskonanosti.
Postavlja se pitanje: ta sa negativnim brojevima? Da bi mogli predstaviti oznaene brojeve
korienjem binarnog brojnog sistema moramo uvesti ogranienje u ve postojee brojeve: oni
moraju imati konaan i nepromjenljiv broj bita. Najee se koriste podaci duine osam, 16 ili
32 bita.
Sa nepromjenljivim brojem bita moemo da predstavimo samo odreeni broj objekata. Na
primjer, sa osam bita moemo predstaviti samo 256 razliitih objekata. Negativne vrijednosti su
objekti kao i pozitivne vrijednosti. Zbog toga moramo da koristimo neke od ovih 256 vrijednosti
da bi predstavili negativne brojeve. Drugim rijeima, moramo da koristimo neke od pozitivnih
brojeva da bi predstavili negativne brojeve. Najbolji pristup je da se pola moguih kombinacija
dodijeli pozitivnim, a druga polovina negativnim brojevima. Na taj nain moemo da
predstavimo negativne vrijednosti u opsegu -128 do -1 i pozitivne vrijednosti u opsegu 0 do 127
sa jednim podatkom veliine osam bita. Sa 16-bitnom rijei moemo predstaviti vrijednosti u
opsegu -32768 do +32767. Sa 32-bitnom duplom rijei moemo da predstavimo vrijednosti u
opsegu -2147483648 do +2147483647. U optem sluaju, sa n bita moemo da predstavimo
oznaene vrijednosti u opsegu:
2n-1 do 2n-1 1.
Za predstavljanje negativnih brojeva postoji mnogo naina, ali veina dananjih raunarskih
sistema koristi notaciju u drugom komplementu. Primjenom sistema drugog komplementa, bit
najveeg znaaja (MSB) se naziva bit znaka. Ako je ovaj bit nula, broj je pozitivan, a ako je
jedan, onda je broj negativan.
Primjer:
8000H je negativan zato to mu je MSB jednak jedinici.
100H je pozitivan jer je MSB nula.
7FFFH je pozitivan.
Ukoliko je MSB nula, onda je broj pozitivan i smjeta se kao standardna binarna vrijednost.
Meutim, ako je MSB jednak jedinici, onda je broj negativan i smjeta se u formi drugog
komplementa. Da bi pretvorili pozitivan broj u negativan u drugom komplementu, koristimo
sljedei algoritam.
1) Invertujemo sve bite u broju (zamijenimo jedinice nulama i nule jedinicama).
2) Dodamo jedinicu invertovanom rezultatu.
Primjer :
Izraunajmo osmobitni ekvivalent od -5.
0000 0101 Pet (binarno).
1111 1010 Svi biti invertovani (prvi komplement).
1111 1011 Dodana jedinica.
Sada emo izvriti konverziju u drugi komplement 16-bitnih oznaenih vrijednosti.
7FFFH: 0111 1111 1111 1111 (+32767)
1000 0000 0000 0000 Invertujemmo sve bite (8000H)
1000 0000 0000 0001 Dodajemo 1 (8001H ILI -32767)
8000H: 1000 0000 0000 0000 (-32767)
0111 1111 1111 1111 Invertujemmo sve bite (7FFFH)
1000 0000 0000 0000 Dodajemo 1 (8000H ili -32768)
12 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

4000H: 0100 0000 0000 0000 (16384)


1011 1111 1111 1111 Invertujemo sve bite (BFFFH)
1100 0000 0000 0000 Dodajemo 1 (0C000H ili -16384)

Odavde vidimo da vrijednost 8000H invertovana postaje 7FFFH. Poslije dodavanja jedinice
dobijamo 8000H! Odavde izlazi da je -(-32768) jednako -32768!!! To naravno nije tano. Ali
vrijednost +32768 se ne moe predstaviti sa 16-bitnim oznaenim brojem, tako da ne moemo
da obavimo negaciju za najmanju negativnu vrijednost.
Postavlja se pitanje zato se muiti sa ovako komplikovanim nainom prikazivanja oznaenih
brojeva? Zato ne bi koristili MSB bit za odreivanje znaka, smjetajui pozitivan ekvivalent u
ostale bite? Odgovor je u jednostavnosti projektovanja hardvera. Korienjem sistema drugog
komplementa, veina drugih operacija u binarnom sistemu je laka. Na primjer, pretpostavimo da
elimo da obavimo sabiranje 5+(-5). Rezultat treba da bude nula. Razmotrimo ta se deava kada
izvrimo sabiranje ove dvije vrijednosti u sistemu drugog komplementa:
0000 0101
1111 1011
1 0000 0000
Ako ignoriemo vrijednost koja se dobija u bitu prenosa dobijamo korektan rezultat. Ovo znai
da moemo da koristimo isti hardver za sabiranje i za oduzimanje upotrebom drugog
komplementa. Ovo ne bi bio sluaj sa nekim drugim brojnim sistemima.

1.7. ZNAKOVNO I PROIRENJE NULAMA


Kako cjelobrojni format u drugom komplementu ima nepromjenljiv broj bita dolazi do malog
problema. ta ukoliko mi elimo da pretvorimo cjelobrojnu vrijednost u drugom komplementu
duine osam bita u podatak duine 16 bita? Ovaj problem se moe rijeiti pomou operacije
znakovnog proirivanja. Slino, proirenje nulama omoguava pretvaranje 8-bitnog u 16-bitni
neoznaeni podatak.
Razmotriemo vrijednost -64. Osmobitna vrijednost drugog komplementa za ovaj broj je 0C0H.
esnaestbitni ekvivalent ovog broja je 0FFC0H. Sada posmatrajmo vrijednost +64. Osmobitne i
16bitne verzije ove vrijednosti su 40H i 0040H. Razlika izmeu osmobitnih i 16-bitnih podataka
moe se opisati sljedeim pravilom: "Ako je broj negativan, bajt vieg reda 16-bitnog broja
sadri 0FFH; ako je broj pozitivan, bajt vieg reda 16-bitnog broja je nula".
Znakovno proirivanje neke vrijednosti sa manjeg broja bita na vei je lako, samo izvrimo
kopiranje bita znaka u sve dodatne bite kod novog formata. Na primjer, da bi znakovno proirili
podatak sa osam na 16 bita, potrebno je prosto kopirati sedmi bit osmobitnog broja u bite 8-15
16bitnog broja.
Znakovno proirivanje potrebno je pri manipulaciji sa oznaenim veliinama promjenljive
duine. esto je potrebno sabrati podatak tipa bajt sa podatkom tipa rije. Da bi ovo ostvarili
potrebno je najprije znakovno proiriti manji podatak, pa tek onda izvriti naznaenu operaciju.
Druge operacije (posebno mnoenje i dijeljenje) mogu ak zahtijevati znakovno proirivanje na
32bitne vrijednosti. Neoznaene vrijednosti se ne smiju znakovno proirivati.
Primjer:
8-bitni 16-bitni 32-bitni
80H FF80H FFFFFF80H
28H 0028H 00000028H
9AH FF9AH FFFFFF9AH
7FH 007FH 0000007FH
1. Brojni sistemi 13

----- 1020H 00001020H


----- 8088H FFFF8088H

Da bi proirili neoznaene vrijednosti, potrebno je izvriti proirivanje nulama. Proirivanje


nulama je veoma lako potrebno je samo smjestiti nule u bajtove vieg reda manjeg podatka.
Na primjer, da bi proirili nulama vrijednost 82H na 16-bitnu vrijednost, prosto dodajemo nule u
bajt vieg reda to daje 0082H.
8-bitni 16-bitni 32-bitni
80H 0080H 00000080H
28H 0028H 00000028H
9AH 009AH 0000009AH
7FH 007FH 0000007FH
----- 1020H 00001020H
----- 8088H 00008088H
14 Praktikum za auditorne vjebe iz mikroprocesorskih sistema
2. PREDSTAVLJANJE PODATAKA
16 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

2.1. BINARNO KODOVANI DECIMALNI BROJEVI


Za obavljanje numerikih operacija najpogodniji je decimalni brojni sistem. Meutim, binarni
brojni sistem je povoljniji sa stanovita jednostavnosti konstrukcije digitalne mree. Zbog toga
su razvijeni mjeoviti sistemi. Oni sadre binarno kodovane decimalne cifre i zbog toga se
nazivaju BCD (Binary Coded Decimal) kodovi.
Pri izboru koda nastoji se da on bude pogodan ne samo za brojanje, aritmetike operacije,
pretvaranje, ve i za lako otkrivanje i korigovanje eventualnih greaka pri kodovanju
informacija. Kod svih BCD sistema decimalni brojevi se predstavljaju binarnim, tako da se
svaka cifra decimalnog broja zamjenjuje odreenom grupom binarnih cifara.
Kako decimalni brojni sistem ima deset cifara u opsegu od 0 do 9, vrijedi:
23 < m = 10 < 24.
Iz prethodne jednaine vidimo da su nam za predstavljanje 10 dekadnih cifara potrebne grupe od
po etiri binarne cifre koje nazivamo tetrade. Postoji veliki broj kombinacija tih tetrada, odnosno
mnogo BCD kodova. U praksi se koristi relativno mali broj moguih kombinacija.
PRIRODNI BCD (NBCD) KOD ILI KOD 8421
Tetrade kod ovog koda se u potpunosti podudaraju sa prirodnim binarnim brojevima, tj. koristi
se prvih deset binarnih brojeva, a ostalih est se odbacuje.

8421

0 0000

1 0001

2 0010

3 0011

4 0100

5 0101

6 0110

7 0111

8 1000

9 1001

Primjer:
92410 = 1001 0010 0100NBCD
1000 0111 1001NBCD = 87910
Prirodni NBCD kod je teinski kod. To znai da svaka binarna cifra ima odreenu teinu pri
formiranju decimalne cifre, koja je odreena pozicijom te cifre.
2. Predstavljanje podataka 17

AJKENOV KOD ILI KOD 2421


Ovaj kod je teinski kod koji je samokomplementaran BCD kod, tj. ima tu osobinu da pri
inverziji svakog bita dekadni ekvivalent postaje sopstveni komplement broja devet.
U sljedeoj tabeli prikazani su binarni kodovi za decimalne cifre u Ajkenovom kodu.

2421

0 0000

1 0001

2 0010

3 0011

4 0100

5 1011

6 1100

7 1101

8 1110

9 1111

Primjer:
97410 = 1111 1101 0100AJKEN
0000 0010 1011AJKEN = 02510
18 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

KOD "VIE 3" ILI XS3 ("EXCESS 3") KOD


Ovaj kod se dobija dodavanjem trojke svakoj tetradi kod prirodnog binarnog sistema. Tetrade su
date u sljedeoj tabeli. Ovaj kod nije teinski, ali je samokomplementaran.

XS3

0 0011

1 0100

2 0101

3 0110

4 0111

5 1000

6 1001

7 1010

8 1011

9 1100

Primjer:
7010 = 1010 0011XS3
1011 1100XS3 = 8910
2. Predstavljanje podataka 19

GREJOV (GRAY) KOD


Grejov kod je specijalan kod koji ima tu osobinu da se svaka kodna grupa razlikuje za samo
jedan bit od prethodne. Na taj nain se postie da je manja mogua greka, nego kada se
mijenjaju sve cifre u tetradi.

Gray Gray BCD

15731 15731

0 0000 0000

1 0001 0001

2 0011 0011

3 0010 0010

4 0110 0110

5 0111 0111

6 0101 0101

7 0100 0100

8 1100 1100

9 1101 1000

10 1111

11 1110

12 1010

13 1011

14 1001

15 1000

Primjer:
10 = 15 7 + 3 1
36710 = 0010 0101 0100Gray BCD
20 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

DONSONOV (JOHNSON) KOD

Johnson

0 00000

1 00001

2 00011

3 00111

4 01111

5 11111

6 11110

7 11100

8 11000

9 10000

Primjer
Napisati sljedee brojeve u NBCD, XS3, Grejovom i Donsonovom kodu:
a)847
b)2170.25
c)35.29.
Rjeenje:
a) 1000 0100 0111NBCD
1011 0111 1010XS3
1100 0110 0100Gray BCD
11000 01111 11100Johnson
b) 0010 0001 0111 0000. 0010 0101NBCD
0101 0100 1010 0011. 0101 1000XS3
0011 0001 0100 0000. 0011 0111Gray BCD
00011 00001 111000 00000. 00011 11111Johnson
c) 0011 0101. 0010 1001NBCD
0110 1000. 0101 1100XS3
0010 0111. 0011 1000Gray BCD
00111 11111. 00011 10000Johnson
2. Predstavljanje podataka 21

2.2. BCD ARITMETIKA


Ukoliko su numeriki podaci predstavljeni nekim BCD kodom, tada i rezultati poslije
izvravanja aritmetikih operacija takoe treba da budu u istom BCD kodu. Pri aritmetikim
operacijama nad BCD brojevima primjenom klasinog binarnog sabiranja dobijaju se tetrade
koje ne pripadaju BCD kodu. Zbog toga je neophodno izvriti korekciju rezultata dodavanjem
tetrade 0110.
Tetrade zbira treba da se koriguju sa 0110 u sljedeim sluajevima: 1) Ukoliko je zbir dvije
tetrade u opsegu 1010 do 1111. 2) Ako je neka od tetrada u zbiru u opsegu 0000 do 1001, ali je
postojao prenos u sljedeu lijevu tetradu.
Primjer
Izvriti sabiranje sljedeih NBCD brojeva:
a) 59 i 73
b) 137 i 266
c) 379 i 458.
Rjeenje:
a) 0101 1001 59
+ 0111 0011 73
1100 1100 132
+ 0110 0110
0001 0011 0010
b) 0001.0011 0111 137
+ 0010 0110 0110 266
0011 1001 1101 403
+ 0000 0000 0110
0100 0000 0011
c) 0011 0111 1001 379
+ 0100 0101 1000 458
0111 1101 0001 837
+ 0000 0110 0110
1000 0011 0111
22 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

2.3. ALFANUMERIKI KODOVI


Dosad pominjani kodovi upotrebljavaju se samo za kodiranje brojeva i zato se nazivaju
numeriki kodovi. Meutim, pri prenosu podataka potrebno je kodirati i druge znakove kao to
su: slova, specijalni i interpunkcijski znakovi. BCD kod nema dovoljno bita za predstavljanje
takvih podataka. Zbog toga se koriste tzv. alfanumeriki kodovi koji koriste vie od etiri bita za
predstavljanje podataka. Alfanumeriki podaci su tipa char (character). Kako skup latinskih
slova ima 26 znakova, zatim imamo 10 cifara, to ukupno daje 36 simbola. Odavde
zakljuujemo da alfanumeriki kod mora imati vie od 5 bita.
2 5< 36
Najpoznatiji alfanumeriki kodovi su: a) ASCII (American Standard Code for Information
Interchange) kod koji se sastoji od sedam bita b) EBCDIC (Extended Binary Coded Decimal
Interchange Code) kod koji se sastoji od osam bita.
Danas se najvie koristi ASCII kod, dok se EBCDIC koristi u nekim IBM raunarima.
ASCII KOD
Skup ASCII karaktera izdijeljen je u grupe od po 32 karaktera. Prva 32 karaktera, ASCII kodovi
od 0 do1Fh (31), ini specijalni skup kontrolnih karaktera koji se ne tampaju. To su npr.
karakteri kao to su carriage return, koji postavlja kursor na lijevu stranu trenutne linije
karaktera, line feed (koji pomjera kursor jednu liniju nie na izlaznom ureaju), i back space
(koji pomjera kursor nazad ulijevo za jednu poziciju).
Druga grupa od 32 ASCII karaktera sadri razne interpunkcijske simbole, specijalne karaktere, i
numerike cifre. Najznaajnije karaktere u ovoj grupi ine znak razmaka space (ASCII kod
20h) i numerike cifre (ASCII kodovi 30h do 39h). Vidimo da oduzimanjem 30h od ASCII koda
za bilo koju cifru moemo dobiti numeriki ekvivalent te cifre.
Trea grupa 32 ASCII karaktera je rezervisana za simbole velikih slova abecede. ASCII kodovi
za karaktere "A" do "Z" se nalaze u opsegu 41h do 5Ah (65 do 90). Kako imamo samo 26
razliitih alfabetskih karaktera, ostalih est kodova predstavlja razne specijalne simbole.
etvrta grupa 32 ASCII karaktera rezervisana je za simbole malih slova abecede, pet dodatnih
specijalnih simbola, i jo jedan kontrolni karakter (delete). Kodovi velikih slova se razlikuju od
kodova ekvivalentnih malih slova tano u jednoj bit poziciji. Na primjer, razmotriemo kod
karaktera "E" i "e" na slici:

Jedino gdje se ova dva karaktera razlikuju jeste u bitu na petoj poziciji. Karakteri velikih slova
uvijek sadre nulu na petoj poziciji; karakteri malih slova uvijek sadre jedinicu u petom bitu.
Na ovaj nain se moe vriti lako pretvaranje velikih slova u mala i obrnuto.
2. Predstavljanje podataka 23

Bit 6 Bit 5 Grupa

0 0 Kontrolni karakteri

0 1 Cifre i interpunkcija

1 0 Velika slova i specijalni znaci

1 1 Mala slova i specijalni znaci

Sedmi bit u standardnom ASCII kodu je uvijek postavljen na nulu. Ovo znai da ASCII skup
karaktera zauzima polovinu moguih kodova karaktera u bajtu.

2.4. PREDSTAVLJANJE BROJNIH PODATAKA


Brojni podaci koji se predstavljaju u raunaru mogu biti tipa integer (cjelobrojni podaci) i real
(realni brojevi).
Integer su cijeli brojevi i za njihovo predstavljanje se standardno koristi binarna rije od 32 bita.
Meutim, u praksi je ponekad dovoljno koristiti 8 ili 16 bita, pa postoje razliiti tipovi
cjelobrojnih podataka (short int, int, long int itd.). Cjelobrojni podaci se predstavljaju u drugom
komplementu. Najstariji bit je bit znaka S (sign).

31 0

Tipom podataka real u raunaru se predstavlja jedan konaan podskup realnih brojeva. Kako
raunari posjeduju registre i memoriju ogranienog kapaciteta, ogranien je opseg i preciznost
realnih brojeva, odnosno skup brojeva koji se mogu prikazati u raunaru je diskretan i konaan
za razliku od skupa realnih brojeva koji je kontinualan i beskonaan. Zbog prirode diskretnosti
postoji uvijek praznina izmeu dva susjedna broja, tako da se moe desiti da rezultat bude ba u
tom opsegu. U tom sluaju vri se zaokruivanje na broj koji je najblii dobijenom rezultatu a
koji se moe predstaviti u raunaru.
PREDSTAVLJANJE BROJEVA SA POMINIM ZAREZOM (FLOATING POINT)
U praktinim primjenama javljaju se veoma velike i veoma male vrijednosti (npr. 1024 i 10-27).
Realan broj se moe napisati u eksponencijalnom obliku.
E
m = M bE
b baza
E eksponent
M mantisa
Realni broj se najee predstavlja sa 32 bita, pri emu se usvaja normalizovani oblik broja. To
znai da mantisa ima oblik 0.xyz... pri emu je x 0.
24 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Primjer :

Opseg brojeva koji se mogu predstaviti na ovaj nain odreen je brojem binarnih cifara
eksponenta, dok broj binarnih cifara mantise odreuje preciznost predstavljanja i tanost
raunanja.
3. STRUKTURA PROCESORA
26 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Osnovne jedinice procesora su:


aritimetiko-logika jedinica (ALU),
upravljaka jedinica i
blok registara (registarska jedinica).
Aritimetiko logika jedinica obavlja obradu podataka.
Upravljaka jedinica izvrava instrukcije i upravlja svim sklopovima u raunaru.
Registarska jedinica se koristi da bi se poveala brzina rada proscesora (a time i raunara).
Blok registara se nalazi u procesoru (to je mnogo vea brzina upisivanja i oitavanja, odnosno
koritenja podataka iz tih registara, nego kada bi se ti podaci nalazili u operativnoj memoriji koja
je izvan procesora). Poeljno je da procesor ima to vei broj unutranjih registara (a svaki
procesor ima tano odreen broj registara). Za povezivanje jedinica procesora koristi se
zajednika magistrala jer je to jednostavnije i jeftinije.

Blok ema procesora

Svi registri koji se koriste u procesoru su sa paralelnim ulazima i izlazima. Registri procesora se
mogu podjeliti u grupe:
registar instrukcije,
privremeni registar,
akumulator,
adresni registri,
blok registara opte namjene,
registar adrese,
registar podataka i
registar bita stanja.
3. Struktura procesora 27

3.1. PROGRAMSKI MODEL MIKROPROCESORA INTEL 8085


Programski model mikroprocesora ine oni registri procesora koji su dostupni programeru
(sadraj im se mijenja izvravanjem instrukcija programa ili se moe ispitivati pomou
instrukcija programa).
Programski model ine:
akumulator,
registri opte namjene,
registar bita stanja i
adresni registri.
AKUMULATOR
Akumulator je registar u kojem se uvijek nalazi jedan podatak, odnosno operand koji se koristi
pri realizovanju aritmetike ili logike operacije. Rezultat realizovanja te operacije se upisuje u
akumulator.
Broj bita akumulatora je jednak broju bita koje procesor paralelno obrauje i na osnovu tog
broja bita obino se definie tip procesora. Tako se kae da imamo "n-bitni procesor", gdje je
"n" broj bita akumulatora.
Sadraj akumulatora se moe mijenjati instrukcijama, pa se kae da je dostupan programeru.
Kod mikroprocesora Intel 8085 akumulator je osmobitni.
REGISTRI OPTE NAMJENE
Registri opte namjene su skup registara koji se mogu koristiti za trenutno memorisanje
podataka, rezultata i adresa. Oni omoguavaju da se operacije realizuju u procesoru bez
pristupanja operativnoj memoriji to poveava brzinu rada mikroprocesora (poeljno je da
procesor ima to vei broj registara, ali to poveava sloenost i cijenu procesora).
Kod mikroprocesora Intel 8085 blok registara opte namjene ine registri B, C, D, E, H i L (za
privremeno smjetanje podataka). Broj bita ovih registara je kao kod akumulatora, ali se obino
radi sa parovima registara ((B,C), (D,E) i (H,L)).
Registarski par (H,L) slui kao esnaestobitni pokaziva na memorijsku lokaciju iji sadraj
moe da se koristi kao operand mnogih instrukcija.
PRIMJER:
Sabrati sadraj akumulatora sa sadrajem memorijske lokacije M ija je adresa smjetena u
registarskom paru (H,L).
ADD M; (A)+M(H,L)(A)
REGISTAR BITA STANJA
Registar bita stanja spada u sastavni dio aritmetiko-logike jedinice i daje informacije o stanju
rezultata nakon izvravanja aritmetike ili logike instrukcije.
ine ga skup flip-flopova, ija stanja za vrijeme izvravanja instrukcije zavise od rezultata
realizovane aritmetike ili logike operacije (postavljaju se ili briu).
Biti stanja koji postoje kod mikroprocesora Intel 8085 su:
28 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Od osam bita, pet se koristi i to su:


S bit znaka rezultata se koristi pri radu sa podacima sa predznakom (+,). To je
najvii bit u akumulatoru. Ako je S=1 podatak je negativan, a ako je S=0 onda je
pozitivan.
Z bit nule rezultata pokazuje da je rezultat nula ili ako su u akumulatoru nule onda i
ovaj bit pokazuje nulu.
AC bit poluprenosa pojavljuje se ako postoji prenos iz nie polovine bajta u viu
polovinu bajta, pri operacijama sa BCD podacima tzv. "pakovanog tipa". Pakovani
BCD podaci su oni kod kojih se dvije BCD cifre nalaze u jednom bajtu.
7 6 5 4 3 2 1 0

P bit parnosti pokazuje da podatak u akumulatoru ima paran ili neparan broj jedinica.
Ako je paran, onda je na njegovom mjestu upisan broj jedan. Koristi se za
generisanje bita parnosti (ili bita neparnosti), koji se primjenjuje za kontrolu
ispravnosti kodovanja, tj. za kontrolu parnosti. Kod osmobitnih podataka on je deveti
bit.
C bit prenosa pokazuje da li je pri realizovanju prethodne operacije dolo do pojave
prenosa ili pozajmice bita. Prenos se pojavljuje kod sabiranja ako rezultat ima vie
bita nego to je broj bita akumulatora, u takvim sluajevima ono to ne moe da stane
u akumulator ide u bit prenosa.
Npr. Najvei broj koji moe da stane u akumulator je br. 255.
256 128 64 32 16 8 4 2 1

Ovaj bit se moe pojaviti i pri oduzimanju, ako se oduzima vei broj od manjeg (pojava
pozajmice).
Koristi se i pri pomjeranju bita u lijevo ili u desno pri emu bit koji ulazi ili izlazi, se upisuje se
u bit prenosa.
ADRESNI REGISTRI
Adresni registri su registri iji se sadraj koristi za adresiranje memorijskih lokacija u
operativnoj memoriji ili za adresiranje ulaznih i izlaznih sklopova.
Pri izvravanju instrukcija procesor postavlja na svoje adresne linije sadraj nekog od adresnih
registara.
Adresni registri mikroprocesora Intel 8085 su:
programski broja (PC) i
pokaziva steka (SP).
3. Struktura procesora 29

Programski broja (Program Counter) je adresni registar u kojem se uvijek nalazi adresa sljedee
instrukcije koju e procesor izvravati. U toku izvravanja instrukcije sadraj programskog
brojaa se automatski mijenja tako da adresira onu instrukciju koja e sljedea biti oitana i
izvrena. Broj bita programskog brojaa jednak e broju bita adrese koju generie procesor. Ako
je broj bita programskog brojaa "n" tada on moe adresirati "2n" memorijskih lokacija to znai
da kod mikroprocesora Intel 8085 iji raunari imaju 64KB operativne memorije ima 16 bita, jer
je 64KB=2n.
Pokaziva steka (Stack Pointer) se koristi za adresiranje memorijski lokacija u steku. Stek je
memorijska struktura LIFO (Last In, First Out) tipa, to znai da se onaj podatak koji je
posljednji upisan prvi oitava. Stek se koristi kod rada sa podprogramima i sa prekidima, jer se
mijenja redoslijed izvravanja instrukcija tako to procesor prelazi na izvravanje podprograma
ili programa za obradu prekida. Da bi se po zavretku tih programa moglo nastaviti daljnje
izvravanje prethodnog programa u steku se memorie tzv. "povratna adresa".
Programski model mikroprocesora Intel 8085 je prikazan na sljedeoj slici.

IE-"bit maske prekida" slui da se omogui (logika jedinica) ili zabrani (logika nula)
prihvatanje zahtjeva za prekid.
30 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

3.2. NAINI ADRESIRANJA


Naini na koji se pribavljaju instrukcije i odreeni operandi za vrijeme izvoenja instrukcija se
nazivaju "naini adresiranja".
Za vrijeme izvravanja programa procesor mora da dobije informaciju o tome u kojoj lokaciji
memorije se nalazi instrukcija koju treba sljedeu izvriti kao i to gdje se nalaze operandi koji e
se koristiti pri izvravanju instrukcije.
U sastavu same rijei instrukcije nalazi se informacija o nainu adresiranja. Ta informacija je
obino u sastavu operacionog dijela instrukcije, tako da se sama instrukcija sastoji od tri polja
odnosno tri dijela.
Polje operacionog koda Polje naina adresiranja Polje operanda ili adrese

Operacioni dio

Svi mikroprocesori raspolau sa vie naina adresiranja. Mikroprocesor Intel 8085 koristi
sljedee naine adresiranja:
IMPLICITNO ADRESIRANJE
Kod ovakvog naina adresiranja informacija o tome gdje se nalazi operand sadrana je u sastavu
operacionog dijela same istrukcije.
Kod ovakvih instrukcija operand se obino nalazi u nekom registru procesora a najee u
akumulatoru.
Primjer:
ADD r; (A)+(r)(A), Sadraj registra (r) sabrati sa
sadrajem akumulatora i rezultat smjestiti u
akumulator.
NEPOSREDNO ADRESIRANJE
Kod ovog naina adresiranja, operand koji se koristi pri izvravanju instrukcije nalazi se u
sastavu same instrukcije iza operacionog dijela instrukcije u okviru dijela operanda. To je
konstantan podatak koji e se upisati u neki od registara procesora ili koji e se koristiti pri
realizovanju odreene operacije.
Primjer:
MVI B,78h; 78h(B), Vrijednost 78h smjestiti u registar (B).
LXI B,1F02h; 1Fh(B) (vii bajt), 02h(C) (nii bajt), Napuniti
registarski par (B,C) sa brojem 1F02h
MVI M,1Fh; 1FhM(H,L), Vrijednost 1Fh smjestiti u memorijsku
lokaciju ija je adresa odreena sadrajem
registarskog para (H,L).
DIREKTNO ADRESIRANJE
Kod ovog naina adresiranja, adresa memorijske lokacije na kojoj se nalazi operand koji je
potreban za izvrenje instrukcije, nalazi se direktno u sastavu instrukcije i to u dijelu operanda
instrukcije. Na primjer:
LDA 0123h; napuniti akumulator sadrajem lokacije ija je adesa
0123h.
3. Struktura procesora 31

INDIREKTNO ADRESIRANJE
Kod ovog naina adresiranja, adresa operanda se nalazi u nekom od registarskih parova ((B,C),
(D,E), (H,L)) koji se koriste kao pokazivai na lokaciju u kojoj se nalazi operand. Na primjer :
MOV A,M; M(H,L)(A)
Sadraj memorijske lokacije M ija je adresa odreena registarskim parom (H,L) smjestiti u
akumulator.

3.3. SIGNALI MIKROPROCESORA INTEL 8085


INTR INTA RST5.5 RST6.5 RST7.5 TRAP SID SOD

Upravljanje serijskim
Upravljanje prekidom
ulazom i izlazom

Unutranja sabirnica (8 bita)

B(8) C(8)
Privremeni Registar Registar
Akumulator
registar bita stanja instrukcija D(8) E(8)
H(8) L(8)
SP(8)
Aritmetiko-
Dekoder PC(8)
logika
instrukcija SKLOP ZA INC. I DEC.
jedinica ADRESE

VCC
VSS Bafer
Upravljako kontrolna jedinica Bafer
X1 adrese i
adrese
X2 podataka
10
S0
S1
CLK
READY
RD

ALE

HOLD
HLDA
RESET IN
RESET OUT
WR

A8 A15 AD0 AD7

Blok ema mikroprocesora Intel 8085

Signale mikroprocesora dijelimo prema funkciji:


SIGNALI NAPAJANJA
Postoje dva prikljuka za napajanje i to za plus signal napona Vcc i drugi za minus signal ili
masu Vss.
TAKT SIGNAL
Mikroprocesor Intel 8085 na samom integrisanom kolu sadri sve sklopove za generisanje takta,
pa je dovoljno na ulaze X1 i X2 prikljuiti elemenat koji definie frekvenciju takta.
ADRESNI SIGNALI
Preko adresnih signala se prenose adrese od procesora prema ostalim sklopovima raunara. Na
njima se uvijek nalazi adresa memorijske lokacije u operativnoj memoriji iz koje se oitava
instrukcija koju treba izvriti ili adresa memorijske lokacije u kojoj se nalazi operand koji se
koristi pri izvravanju instrukcije.
32 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Preko ovih signala se prenose i adrese "U/I" (ulazno-izlaznih) sklopova pri izvravanju ulaznih i
izlaznih instrukcija. Na njima se uvijek nalazi sadraj nekog od adresnih registara procesora.
Broj adresnih signala je uglavnom jednak broju bita adrese koju proceor generie. Da bi se
smanjio ukupan broj izvoda na integrisanom kolu (procesoru) jedan dio adrese se prenosi preko
signala podataka, a drugi dio adrese preko adresnih signala.
Ovaj mikroprocesor ima osam adresnih signala preko kojih se prenosi "vii" bajt adrese (A8-A15)
i oni su stabilni za vrijeme trajanja mainskog ciklusa. "Nii" bajt adrese se prenosi preko
signala kojim se prenose i podaci, i to u toku prvog takt perioda mainskog ciklusa , a nakon
toga na tim linijama se pojavljuju podaci pa se kae da se vri multipleksiranje adresa i podataka
na tim linijama.
SIGNALI PODATAKA
Preko ovih signala se prenose podaci u procesor i iz procesora.
Procesor ima onoliko signala podataka koliko bita imaju podaci sa kojima operiu, tj. onoliko
bita koliko bita ima akumulator.
Mikroprocesor Intel 8085 ima osam signala podataka oznaenih sa AD0-AD7, preko kojih se
prenosi i nii bajt adrese.
UPRAVLJAKI SIGNALI
To su signali pomou kojih procesor upravlja radom operativne memorije, "U/I" sklopovima i
nekim drugim sklopovima u raunaru. Koriste se i za davanje informacije procesoru o stanju
ostalih sklopova. Tipini upravljaki signali su:
signal za oitavanje iz operativne memorije,
signal za upisivanje u operativnu memoriju,
signal za oitavanje iz ulaznog sklopa,
signal za upisivanje u izlazni sklop,
signal zahtjeva za prekid,
potvrda prihvatanja zahtjeva za prekid,
zahtjev za zaustavljanje ili "DMA" (Direct Memory Access) prenos,
potvrda za prihvatanje zahtjeva za zaustavljanje ili "DMA" prenos i
resetovanje.
To su jednosmjerni signali od kojih su jedni ulazni (daju informaciju o stanju ostalih sklopova),
a drugi su izlazni (koje generie procesor).
SIGNAL ZA OITAVANJE IZ OPERATIVNE MEMORIJE
RD je izlazni signal (kontrolni signal oitavanja), logika nula na ovom izlazu se generie kada
je potrebno oitati podatak iz memorije ili ulaznog sklopa.

Dok je RD = 0 , podatak se mora pojaviti na linijama magistrale podataka. Mora biti stabilan na
tim linjama kada signal postane visok jer se tada podatak sa magistrale upisuje u odgovarajui
registar mikroprocesora.
SIGNAL ZA UPISIVANJE U OPERATIVNU MEMORIJU

WR je izlazni signal, kontrolni signal upisivanja.

WR = 0 se generie kada je potrebno podatak iz nekog registra upisati u memoriju ili izlazni
sklop. WR = 0 pokazuje da je magistrala podataka spremna za prenos i da se podatak nalazi na
linijama magistrale podataka. Podatak mora biti stabilan kada WR postane "visok" (stanje
logie jedinice).
3. Struktura procesora 33

SIGNAL ZA OITAVANJE IZ ULAZNOG SKLOPA


To je izlazni signal, a mikroprocesor Intel 8085 ne posjeduje ovakav poseban signal, ve za
oitavanje podataka iz ulaznog sklopa koristi isti signal kao za oitavanje podataka iz operativne
memorije, RD .
Da bi se razlikovalo da li se radi o oitavanju iz operativne memorije ili iz ulaznog sklopa,
koristi se izlazni signal IO M .

Ako je IO M = 1 znai da se pristupa tj. oitava iz ulaznog sklopa. Ako je IO M = 0 znai da


se pristupa tj. oitava iz memorije.
SIGNAL ZA UPISIVANJE U IZLAZNI SKLOP
To je izlazni signal mikroprocesora Intel 8085. Za upisivanje u izlazni sklop koristi se signal kao
za upisivanje u operativnu memoriju WR . Da bi se razlikovalo da li se radi o upisivanju u
memoriju ili u izlazni sklop koristi se izlazni signal IO M .

Ako je IO M = 1 upisivanje u izlazni sklop, a ako je IO M = 0 upisivanje u memoriju.

SIGNAL ZAHTJEVA ZA PREKID


To je ulazni signal za procesor i moe postojati jedan ili vie takvih signala. Kada se taj signal
pojavi na tom ulazu, procesor prekida izvravanje tekue sekvence programa i prelazi na
izvravanje programa za obradu prekida. Po zavretku tog programa procesor nastavlja
izvravanje prekinute sekvence programa.
INTR je ulazni signal zahtjeva za prekid opte namjene (peti nivo prioriteta-najnii). On se moe
"maskirati" (omoguiti ili onemoguiti). IE je bit maske za prekid INTR. IE = 0 , prekid
onemoguen; IE = 1 ,prekid je omoguen.
Za INTR = 1 , mikroprocesor prihvata zahtjev za prekid i prekida se normalno izvravanje
programa, programski broja (PC) se ne uveava, a mikroprocesor generie izlazni signal
potvrde prihvatanja zahtjeva za prekid oznaen sa INTA .
Tri ulazna zahtjeva za restart prekid su:
RST 5.5.
RST 6.5.
RST 7.5.
Imaju istu funkciju i koriste se na isti nain kao i "INTR", osim to se pri njihovoj pojavi obavlja
skok na tano definisanu poetnu adresu programa za obradu zahtjeva za prekid.
Te adrese su sljedee:
RST 5.5 0026h
RST 6.5 0034h Ovo su vektori prekida
RST 7.5 0036h

Maskiranje se vri pomou instrukcije SIM pomou koje postavljamo ili briemo unutranji bit
prekida.
Ova tri signala imaju vii prioritet od INTR, a nii prioritet nego ulaz TRAP. Najvii prioritet od
ova tri ima RST 7.5, a najnii RST 5.5.
TRAP je ulazni signal za prekid najvieg nivoa prioriteta. Kada je TRAP = 1 vri se skok na
"fiksnu" poetnu adresu programa za obradu prekida, a ona je 0024h .
34 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Ovaj prekid se ne moe maskirati, on je uvijek omoguen tj. ne moe se zabraniti njegovo
prihvatanje.
POTVRDA PRIHVATANJA ZAHTJEVA ZA PREKID
To je izlazni signal procesora. Procesor ga generie kada prihvati zahtjev za prekid. Taj signal se
vodi na periferni ureaj koji je izazvao prekid kao informacija ureaju da je njegov zahtjev
prihvaen. Koristi se i za oitavanje vektora prekida koji definie poetnu adresu odgovarajueg
programa za obradu prekida.

Kod mikroprocesora Intel 8085 koristi se signal INTA .


ZAHTJEV ZA ZAUSTAVLJANJE ILI "DMA PRENOS"
To je ulazni signal za procesor koji se koristi u sistemu sa vie procesora ili pri realizovanju
prenosa podataka tzv. "direktnim pristupom memoriji".
Kada se taj signal pojavi procesor odvaja svoje izlaze od zajednike magistrale i zaustavlja
izvravanje programa te oslobaa zajedniku magistralu za realizovanje DMA prenosa izmeu
perifernog sklopa i operativne memorije.
Kod mikroprocesora Intel 8085 imamo ulaz HOLD.
Ako je HOLD = 1 , znai da drugi sklop ili mikroprocesor zahtjeva koritenje zajednike
magistrale i dok je on visok mikroprocesor je zaustavljen i odvojen od magistrale.
Ako je HOLD = 0 , mikroprocesor preuzima upravljanje magistralom.
POTVRDA ZA PRIHVATANJE ZAHTJEVA ZA ZAUSTAVLJANJE
To je izlazni signal procesora koji se generie kada prihvati zahtjev za zaustavljanje i odvoji se
od magistrale, te se vodi i na sklop koji ga je postavio kao informacija da moe koristiti
magistralu i realizovati DMA prenos.
Kod mikroprocesora Intel 8085 imamo izlazni signal HLDA, i to je signal prihvatanja HOLD
zahtjeva. Kada nestane HOLD zahtjeva HLDA se vraa na stanje logike nule (za HOLD = 0 i
HLDA = 0 ).
RESETOVANJE
To je ulazni signal procesora. Kada se on pojavi procesor se resetuje, odnosno dovede u tzv.
"poetno stanje". Po nestanku tog signala procesor poinje izvravati program od poetka. Kod
mikroprocesora Intel 8085 imamo RESET IN ulaz.

Kada je ovaj ulaz na nivou logike nule ( RESET IN = 0 ) tada on dovodi mikroprocesor u
RESET stanje u kome je PC=0, IE=0, HLDA=0 i program se ne izvrava.

Prelaskom na visok nivo ovog signala ( RESET IN = 1 ) tada procesor poinje izvravanje
programa od poetne adrese ( 0000h ).

Pored ovog signala mikroprocesor posjeduje i izlazni RESET OUT .


Ako je RESET OUT = 1 , mikroprocesor se nalazi u stanju RESETA.
ALE
To je izlazni signal procesora i koristi se za upisivanje nieg bajta adrese u vanjski registar kako
bi se formirala kompletna esnaestobitna adresa.
S0 I S1
To su izlazni signali koji pokazuju stanja procesora.
3. Struktura procesora 35

READY
To je ulazni signal koji se koristi pri radu sa sporim memorijma i U/I sklopovima kod kojih
procesor mora da eka dok ne budu spremni.

READY = 1 , spreman za prenos (oitavanje i upisivanje).


READY = 0 , procesor mora da eka.
SID
To je ulazni signal za realizovanje serijskog ulaza podataka.
SOD
To je izlazni signal za serijski izlaz podataka.
CLK
To je izlazni signal, tj. izlaz takt signala procesora koji moe koristiti kao takt signal za druge
sklopove.
36 Praktikum za auditorne vjebe iz mikroprocesorskih sistema
4. PROGRAMIRANJE
38 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

4.1. ALGORITMI
POJAM ALGORITMA I OSNOVNA SVOJSTVA ALGORITMA
Obavljanje razliitih poslova svodi se na izvoenje pojedinih osnovnih operacija zadanim
redoslijedom. Pod pojmom algoritma podrazumijevamo tano opisana pravila za postizanje
eljenog cilja, odnosno, moemo rei da je algoritam konaan niz nedvosmislenih koraka za
postizanje cilja.
Svojstva algoritma:
uz svaki algoritam moraju jasno biti definisani poetni objekti nad kojima se
obavljaju operacije i zavrni objekti ili rezultati koji se pojavljuju kao rezltat
provoenja algoritma.
algoritam mora biti sastavljen od konanog broja koraka. Svaki korak opisuje se
instrukcijom. Obavljanje algoritma naziva se algoritamskim procesom.
za obavljanje algoritma potreban je izvrilac algoritma, koji razumije algoritam i
zna tano obaviti svaki korak algoritma. Trajanje algoritamskog procesa odreeno je
brzinom kojom izvrilac obavlja korake algoritma. Obavljanje algoritma ne zahtjeva
nikakvu domiljatost ili inicijativu izvrioca. Izvrilac djeluje sasvim mehaniki
algoritam je upotrebljiv (ili teorijski upotrebljiv) ako se za bilo koji lan iz
poetne klase objekata moe dobiti rezultat iz klase dozvoljenih zavrnih objekata u
konanom vremenu, tj. uz konaan broj koraka u algoritamskom procesu. Neki
teorijski upotrebljivi algoritmi su krajnje neprikladni za praktinu upotrebu jer
njihovo izvoenje moe trajati neprihvatljivo dugo. Isto tako neki teorijski
neupotrebljivi algoritmi mogu biti praktino upotrebljivi za odreeni podskup klase
poetnih objekata, ako se u njih ugrade ogranienja koja zaustavljaju algoritamski
proces nakon odreenog broja koraka ili ga zaustavljaju nakon pojave prepreke u
nekom od koraka.
Algoritme, s obzirom na obim primjene, moemo podijeliti u dvije vrste:
specijalizovane mogu se primijeniti samo na pojedine poetne objekte
opte dozvoljava razliite vrijednosti poetnih objekata.
JEZIK ZA ZAPISIVANJE ALGORITAMA INSTRUKCIJE ZA OBAVLJANJE
OPERACIJA
Algoritmi se mogu pisati na bilo kojem govornom jeziku. Isto je tako mogue sainiti i
umjetne jezike za zapisivanje algoritama. Bitno je da izvrilac algoritma poznaje jezik na kojem
je algoritam zapisan. Algoritmi zapisani dobro oblikovanim umjetnim jezikom mogu biti mnogo
saetiji, pregledniji i mogu se jednoznano tumaiti. Algoritmi zapisani takvim jezikom nazivaju
se programima, a jezici programskim jezicima.
S obzirom da su vrste osnovnih objekata u takvim jezicima relativno jednostavne i da najee
poprimaju oblik brojki i slova, objekti se najee nazivaju podacima. Umjesto klasa objekata
koristimo naziv tip podataka.
Poetne vrijednosti podataka nazivaju se ulaznim podacima, a zavrne vrijednosti objekata
izlaznim podacima programa.
Sastavni dio programa su instrukcije koje se ugrubo mogu podijeliti na:
instrukcije za obavljanje operacija
instrukcije za odreivanje toka programa
instrukcije za ulaz i izlaz podataka.
esto se javlja potreba da se vie instrukcija objedini u grupu instrukcija.
4. Programiranje 39

U programskim se jezicima za zapisivanje algoritama koriste simboli, te odabrane rijei ili


skraenice koje se jo nazivaju kljune ili rezervisane rijei.
NEKE POSEBNE PROGRAMSKE INSTRUKCIJE
Ovisno o vrijednostima varijabli mogu se izvoditi razliite grupe instrukcija, pa kaemo da se
program odvija razliitim moguim tokovima izvravanja. Jedna od vanih instrukcija
odreivanja toka programa odreena je kljunim rijeima ako je onda inae. Ona
slui za donoenje odluke o obavljanju jedne od dviju alternativnih grupa instrukcija, koje se
mogu nazvati granama.
Vrijednosti varijablama moemo pridodati pomou dvije vrste instrukcija. Jedna vrsta
instrukcija pridruuje pojedinim varijablama konstantne vrijednosti. Takvim instrukcijama
vrijednosti varijabli se utvruju prilikom pisanja programa, meutim varijable poprimaju
te vrijednosti tek u toku izvravanja programa i to u trenutku zavretka instrukcije
pridruivanja.
Druga vrsta instrukcija slui za davanje vrijednosti varijabli u toku odvijanja algoritamskog
procesa opisanog programom. Vrijednosti varijable unose se iz okoline. One poprimaju
vrijednosti u trenutku nakon zavretka instrukcije. Ova vrsta instrukcije naziva se ulaznom
instrukcijom: ulaz (X, Y, ).
Isto tako neke od rezultata je potrebno prenijeti u okolinu. Instrukcije koje to izvode nazivamo
izlazne instrukcije: izlaz (X, Y, ).
Takoer imamo instrukcije za ponavljanje (petlje). Dijelimo ih na instrukcije sa:
unaprijed zadanim brojem ponavljanja instrukcija za. U takvim petljama
imamo jednu upravljaku varijablu, poetnu i konanu vrijednost. Odreeni niz
instrukcija se izvrava onoliko puta koliko je potrebno da upravljaka varijabla
poprimi konanu vrijednost.
ponavljanjem sa ispitivanjem logikog uslova.
Petlje s ponavljanjem gdje ispitujemo uslov dijelimo na:
petlje s ispitivanjem uslova prije izvoenja niza instrukcija instrukcija
dok je uslov raditi. Kako se prvo provjerava uslov mogue je da se niz instrukcija
niti jednom ne izvri.
petlje s ispitivanjem uslova nakon izvoenja niza instrukcija instrukcija
ponavljati do uslova. S obzirom da se uslov ispituje na kraju niza instrukcija,
one e se sigurno izvriti barem jednom.
Imamo i instrukcije za bezuslovni skok u programu na odreenu instrukciju idi na ili
vrati se na.
STVARANJE ALGORITAMA I NJIHOVA VREMENSKA SLOENOST
Stvaranje algoritama je kreativna djelatnost. Algoritmi nastaju na razliite naine. Izvore
algoritama moemo podijeliti na:
praktino iskustvo tu imamo imitacijske i eksperimentalne algoritme
znanstvena teorija teorijski algoritmi
skup prethodno definisanih algoritama konstrukcijski algoritmi
domiljatost stvaraoca
kombinacija svega navedenog
Dva algoritma su ekvivalentna kada su:
klase ulaznih objekata dovoljne i za jedan i za drugi algoritam iste
rezultati i jednog i drugog algoritma za jednake ulazne objekte su jednaki
40 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Kod novostvorenih algoritama vano je najprije ustanoviti njihovu ispravnost ili korektnost.
Algoritam je korektan ako za sve objekte iz klase dozvoljenih ulaznih objekata omoguuje
odreivanje rezultata i ako je taj rezultat ispravan pri svim moguim vrijednostima ulaznih
varijabli.
Druga vana injenica, koju treba ocijeniti kod algoritama, je trajanje algoritamskog procesa,
izraeno kao broj osnovnih operacija koje treba obaviti. Pretpostavlja se da e trajanje
algoritamskog procesa biti proporcionalno ukupnom broju operacija. To svojstvo se naziva
vremenska sloenost ili kompleksnost algoritma.

4.2. PROGRAMIRANJE I PROGRAMSKI JEZICI


Programiranje je u irom smislu rijei postupak sastavljanja programa, tj. odreivanje
redoslijeda radnji (operacija) pomou kojih se dolazi do eljenog rezultata. Program je niz
logikih povezanih operacija, odnosno instrukcija. Svaka instrukcija predatavlja odreenu
naredbu koju kompjuter mora izvriti. To je najmanji element programa. U kompjuterskoj obradi
instrukcije se smjetaju u memoriji centralne jedinice jedna do druge, onako kako slijede u
programu. Program se odvija redoslijedom kako su instrukcije napisane ako raunaru nije
nareeno drugaije.
Razlikujemo slijedee najvanije vrste instrukcija:
instrukcije ulaza/izlaza
instrukcije grananja
instrukcije raunanja
logike instrukcije
instrukcije prijenosa
FAZE PROGRAMIRANJA
Kada je program napisan na odreenom programskom jeziku tada se prenosi na nosioce
podataka. Da bi kompjuter mogao izvravati na program, mora se program prethodno prevesti
na jezik razumljiv maini, tj. na mainski jezik. Taj se prevod dobiva pomou posebnog
programa programa prevodioca koji je sastavni dio sistemskog softvera. Prilikom prevoenja
mogu se otkriti formalne pograke u programu koje su nastale naruavanjem propisanih pravila
pisanja programa. Kada se isprave formalne pogreke, jo su mogue logike pogreke uslijed
kojih se pri izvoenju programa ne dobije eljeni rezultat obrade.
BLOK DIJAGRAM
Blok dijagram (algoritamska shema, dijagram toka) grafiki je prikaz programa. Tako prikazan
program vrlo je pregledan i potpuno odreen. Posebno je pogodan za analize programa, traenje
slinih rjeenja ili potrebne izmjene. Pri crtanju dijagrama toka sluimo se posebnim znakovima:
4. Programiranje 41

OGRANIENJE: oznaava poetak, kraj ili privremeni prekid


programa

PRIKLJUNA TAKA: povezuje razne dijelove programa,


tj. izlaz iz nekog dijela programa i ulaz u drugi dio.

ULAZ/IZLAZ: oznaava instrukcije kojima se preko ulazne


jedinice unose podaci u memoriju ili izvlae iz memorije preko
izlazne jedinice.

OBRADA: oznaava instrukcije kojima se obrauju podaci da bi


se dobili eljeni podaci za izlaz

ODLUKA: oznaava mjesto grananja programa poslije


poreenja ili ispitivanja da li postoji odreeni uslov.

POZIV POTPROGRAMA: instrukcija kojom se trai


izvravanje nekog dijela programa, prethodno sastavljenog i
zapisanog izvan glavnog dijela programa.

Znakovi se u blok-dijagramu mogu slagati u tri osnovne grupe:


sekvenca niz instrukcija koje se izvravaju u slijedu, jedna za drugom.
selekcija dio programa u kojem treba na temelju odluke izvriti jedan ili drugi dio
programa.
petlja zatvoreni krug instrukcija koje u programu valja ponavljati tako dugo dok ne
bude zadovoljen postavljeni uslov.
Primjer
Opiite dijagram toka za algoritam koji odreduje sumu S, aritmetiku sredinu A i proizvod P
brojeva X, Y i Z.
Rjeenje:
42 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Primjer
Opiite dijagram toka za algoritam koji za dva zadana broja ispisuje iste u padajuem poretku.
Rjeenje:
4. Programiranje 43

Primjer
Opiite dijagram toka za algoritam koji za ispisuje prvih 10 elemenata niza.
Rjeenje:

4.3. PROGRAMSKI JEZICI


Uopteno, programski jezici se dijele na:
mainske i
simbolike (nii i vii simboliki jezici)
GENERACIJE PROGRAMSKIH JEZIKA
Obino se razvoj programskih jezika promatra kroz pet generacija programskih jezika.
Prva generacija programskih jezika nastaje u ranim 50-im godinama 20. vijeka. Ti jezici se
nazivaju mainskim jezicima. Mainski programski jezici se piu u binarnom obliku, tj.
pomou znakova 0 i 1.
Mainski jezici se dijele prema mainama za obradu podataka. Svaka vrsta maine za obradu
podataka ima svoj mainski jezik. Program koji je napisan na mainskom jeziku jedne maine ne
moe se koristiti na drugoj maini, ak ni na razliitim mainama istog proizvoaa. Pisanje
takvih programa je bili izuzetno komplikovano zbog velike mogunosti greaka i dugog
vremena potrebnog za pisanje.
Taj problem se donekle rijeio pojavom II. generacije programskih jezika polovinom 50-ih
godina prolog vijeka. To su bili simboliki jezici gdje su se pojedine instrukcije zapisivalu u
obliku simbola, a takoer se i adresiranje podataka vrilo pomou simbola. Glavni predstavnik je
bio assembler. Assembler je programski jezik orijentisan maini. Svaka instrukcija u
mainskom jeziku ima svoj par u assembleru. Program napisan u assemleru je bilo potrebno,
prije izvoenja, prevesti na mainski jezik pomou assembler-translatora.
III. generacija programskih jezika nastaje 60-ih. Jo se nazivaju i vii simboliki jezici.
Njihova glavna odlika je nezavisnost jezika od maine i usmjerenost problemu. To su uglavnom
proceduralni jezici.
44 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Glavni predsatvnici su:


Fortran prilagoen je za rjeavanje matematikih, naunih i tehnikih problema.
Mali obim ulazno/izlaznih podataka ali vrlo kompleksna i komplikovana obrada
podataka.
Cobol jezik orijentisan prema optem poslovanju. i masovnoj obradi podataka.
Radi s velikom koliinom ulazno/izlaznih podataka dok je sama obrada jednostavna.
PL/1 sijedinjuje karakteristike poslovnog i znanstvenog jezika. Modularan je,
slobodnog formata i predvien je za velike sisteme.
IV. generacija se pojavljuje poetkom 80-ih. To su generatori aplikacija, tj. ekspertni sistemi
za programiranje. Njihova svojstva su orijentacija korisniku i dijaloko okruenje.
V. generacija ekspertni sistemi (sistemi baza znanja i mehanizam za zakljuivanje),
mainsko odluivanje, procesiranje prirodnih jezika, umjetna inteligencija, neuronske mree itd.
Glavni predstavnici su Prolog, Lisp, Logo itd.

4.4. METODE PROGRAMIRANJA


Strukturno programiranje odlikuje vrsta logika struktura programa. Instrukcije se odrauju
u nizu i izbjegavaju se instrukcije programskog skoka, odnosno instrukcije tipa idi na.
Softver bilo koje vrsta danas se pie modularno, tj. kompletno se programsko rjeenje
ralanjuje na manje, zaokruene logike cijeline, module, u koje postoji samo jedan ulaz i iz
kojih se izlazi na jednoj jedinoj taki. Moduli se nakon toga povezuju u sloenije programske
strukture.
PREVOENJE (KOMPAJLIRANJE)
Prevoenje (kompajliranje) je postupak kojim se program napisan na simbolikom jeziku,
prevodi uz pomo programa prevodioca u program na mainskom jeziku.
Program na simbolikom jeziku nazivamo i izvornim programom. Program prevodilac
obrauje izvorni program kao to drugi programi obrauju podatke. Taj se program zove jo i
kompajler, a prevoenje kompajliranje. Rezultat prevoenja je program na mainskom
jeziku, tj. u binarnom obliku, koji se zove predmetni (radni) ili objektni program.
INTERPRETIRANJE
Postoje neki programski jezici, npr. BASIC, koji se ne prevode u mainski jezik prevoenjem,
nego interpretiranjem. Interpreter je takoer program prevodilac koji prevodi program iz
simbolikog jezika u mainski, u toku rada, i to instrukciju za instrukcijom. Rezultat
interpretiranja je izveden program, odnosno obraeni podaci.
5. ASEMBLERSKI JEZIK
46 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Mikroprocesor izvrava program iz memorije koji predstavlja upisane binarne podatke u


memoriju. Da se pri pisanju programa ne bi manipulisalo takvim binarnim ili heksadecimalnim
podacima i da bi se olakao nain pisanja programa koristi se asemblerski jezik.
On predstavlja skup pravila za pisanje programa i omoguava koritenje simbola prilikom
pisanja programa, odnosno simboliko predstavljanje kodova instrukcija, adresa, podataka,
registara, itd. Tako napisani programi u asemblerskom jeziku nazivaju se izvorni ili asemblerski
jezici.
Da bi se mogli upisati u memoriju potrebno ih je prevesti u oblik binarnih podataka. Za
prevoenje iz izvornog u objektni program koristi se poseban program koji se naziva
ASEMBLER. Asembler vri prevoenje iz izvornog u objektni kod.

5.1. ASEMBLER ZA MIKROPROCESOR INTEL 8085


Asemblerski jezik ovog mikroprocesora sastoji se od osamdeset osnovnih mnemonika (po jedan
za svaku instrukciju procesora).
Asemblerski jezik predstavlja najnii nivo simbolikog pisanja programa i kod njega se za svaku
instrukciju napisanu u tom jeziku nakon prevoenja dobija jedna mainska instrukcija. Svaka
linija izvornog programa napisana u asemblerskom jeziku sastoji se od etiri polja koja su
meusobno odvojena znakovima za razdvajanje.
Svaka linija ima slijedei oblik:
LABELA: MNEMONIK_OPERAND; KOMENTAR
Labela predstavlja simboliku oznaku za adresu odgovarajue memorijske lokacije. Moe se
koristiti od jednog do est (a za mikroprocesor Intel 8085 najvie pet) znakova za labelu, od
kojih prvi znak mora biti slovo ili specijalni znak, a ne smije biti cifra.
Za labelu se ne smiju koristiti mnemonici, oznake za registre mikroprocesora i pseudo
instrukcije. Nakon poslednjeg znaka mora biti dvotaka (":").
Mnemonik je simbolika oznaka za operacioni kod instrukcije procesora. Iza mnemonika dolazi
jedno prazno mjesto.
Operand je simbolika oznaka za podatak koji je potreban u postupku njenog izvoenja.
Zavisno od tipa konkretne instrukcije ovo polje operanda moe da bude prazno, moe da sadri
jedan ili dva lana odvojena zarezom (",").
Operandi se mogu izraziti kao binarni, oktalni, heksadecimalni ili decimalni brojevi. U polju
operanda se moe nalaziti i labela ili simboliko ime definisano u programu.
Komentar je odvojen sa taka-zarezom (";") od polja operanda. Ovo je neobavezno polje i sve
to se nalazi u tom polju smatra se komentarom i ne postoje nikakva ogranienja u pogledu
koritenja znakova.

5.2. PSEUDO INSTRUKCIJE


Pored samih instrukcija procesora u asemblerskom programu se koriste i tzv. "pseudo-
instrukcije". One se koriste za definisanje podataka, upravljanje memorijom i upravljanje radom
asemblera.
Mogu se podijeliti u tri grupe :
pseudo instrukcije za definisanje podataka i upravljanje memorijom,
pseudo instrukcije za upravljanje prevoenjem (asembliranjem) i
pseudo instrukcije za definisanje simbolikih imena.
5. Asemblerski jezik 47

PSEUDO INSTRUKCIJE ZA DEFINISANJE PODATAKA I UPRAVLJANJE


MEMORIJOM
Tu spadaju sljedee pseudo instrukcije:
LABELA: DB IZRAZ1, IZRAZ2, ... , IZRAZn
Pomou ove pseudo instrukcije se dodjeljuje uzastopnim memorijskim lokacijama veliine
jednog bajta vrijednosti koje su date u polju operanda, definisani sa:
IZRAZ1, IZRAZ2, ... , IZRAZn
Ako postoji labela onda se u uzastopne lokacije od te labele smjetaju i unose podaci (veliine
jednog bajta), a ako ne postoji onda se od tekue instrukcije (DB) smjetaju ti podaci.
LABELA: DW IZRAZ1, IZRAZ2, ... , IZRAZn
Pomou ove pseudo instrukcije se u po dvije uzastopne lokacije upisuju podaci (veliine dva
bajta) definisani sa :
IZRAZ1, IZRAZ2, ... , IZRAZn
Za labelu vrijedi kao i za prethodnu.
LABELA: DS IZRAZ
Pomou nje se rezervie memorijski prostor odnosno preskakanje pri asembliranju odreenog
broja memorijskih lokacija veliine jednog bajta, za kasnije koritenje.
Koliko e se lokacija preskoiti definisano je izrazom u polju operanda.
PSEUDO INSTRUKCIJE ZA UPRAVLJANJE PREVOENJEM (ASEMBLIRANJEM)
Tu spadaju sljedee pseudo instrukcije:
ORG IZRAZ
Koristi da se odredi adresa na kojoj e biti smjeten prvi bajt sljedee instrukcije. Ona se
pojavljuje uvijek na poetku izvornog programa i definie adresu od koje poinje program.

Ako nema te pseudo instrukcije onda program poinje od adrese 0000h . Ona se moe u
programu pojaviti vie puta. Poetnu adresu odreuje vrijednost izraza koji se nalazi u polju
operanda.
NAME IZRAZ
Koristi se za definisanje imena programa, obavezno mora biti prva instrukcija izvornog
programa, a njegov naziv je definisan sa "IZRAZ".
END
Oznaava kraj izvornog programa. Mora biti posljednja instrukcija u programu.
PSEUDO INSTRUKCIJE ZA DEFINISANJE SIMBOLIKIH IMENA
Koriste se uglavnom dvije vrste i to EQU i SET.
EQU dodjeljuje vrijednost simbolu ili labeli, koja se pojavljuje u programu na vie
mjesta.
Ima oblik:
SIMBOL_EQU_IZRAZ
Simbolu bez obzira gdje se pojavljuje u programu, asembler dodjeljuje vrijednost IZRAZ,
odnosno kada se jednom ta vrijednost dodjeli uvijek se podrazumijeva i definie se samo jedan
puta u programu.
Na primjer:
AAA EQU 05
48 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Gdje god se pojavi "AAA", mijenja se sa "05".


SET je identina instrukcija sa EQU s tom razlikom to simbol koji se pojavljuje na
vie mjesta u istom programu moe biti vie puta definisan.
Ima oblik:
SIMBOL_SET_IZRAZ
Na primjer:
BBB SET 05
Mijenja "BBB" sa "05" sve dok ne naie na BBB SET 03.
6. SKUP INSTRUKCIJA MIKROPROCESORA INTEL 8085
50 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

On definie sve operacije koje mikroprocesor moe da obavi. Intel 8085 ima 80 osnovnih
instrukcija koje se dijele:
instrukcije prenosa podataka,
instrukcije koje manipuliu sadrajem akumulatora i registara,
instrukcije za upravljanje tokom izvravanja programa i
instrukcije koje upravljaju stekom, ulazom/izlazom i mikroprocesorom.

6.1. INSTRUKCIJE PRENOSA PODATAKA


To su instrukcije za prenos podataka izmeu registara i memorije. To su instrukcije iz grupe
MOVE, LOAD,STORE i ne utiu na bite stanja.
MOVE (PREBACITI, PREMJESTITI)
MOV r1,r2; sadraj registra r2 smjestiti u registar r1. r1 i r2 mogu
biti bilo koja dva registra ili registar i memorija.
Primjeri
MOV B,D; (D)(B)
MOV A,B; (B)(A)
MOV M,A; (A)M(H,L) sadraj akumulatora smjestiti u
memorijsku lokaciju ija je adresa odreena
sadrajem registarskog para (H,L).
MVI M,1Ch; 1ChM(H,L) vrijednost 1Ch smjestiti u memorijsku
lokaciju ija je adresa odreena sadrajem
registarskog para (H,L).
LOAD
Primjeri:
LXI B,10FFh; registarski par (B,C) napuniti neposredno sa 10FFh.
LDA 0100h; napuniti akumulator direktno sadrajem lokacije ija
je adresa 0100h.
LDAX B; napuniti akumulator indirektno, tj. sadrajem
lokacije ija je adresa smjetena u
registarskom paru (B,C).
LHLD 1345h; napuniti registarki par (H,L) direktno tako to
sadraj memorijske lokacije 1345h puni registar L, a
sadraj memorijske lokacije 1346h puni registar H.
STORE
Primjeri:
STA 0B00h; pohraniti sadraj akumulatora direktno na 0B00h.
STAX D; pohraniti sadraj akumulatora indirektno na lokaciju
ija je adresa pohranjena u registarskom paru (D,E).
SPHL; prenijeti sadraj registarkog para (H,L) u pokaziva
steka (SP).
XCHG; zamijeniti sadraj registarskih parova (D,E) i (H,L).
6. Skup instrukcija mikroprocesora INTEL 8085 51

6.2. INSTRUKCIJE KOJE MANIPULIU SADRAJEM


AKUMULATORA I REGISTARA
Aritmetike (sabiranje, oduzimanje, inkrementiranje i dekrementiranje),
logike ( I, ILI, EXILI ),
instrukcije za rotiranje akumulatora i
specijalne instrukcije.
ARITMETIKE OPERACIJE
SABIRANJE
ADD r; (A)+r(A), dodati registar akumulatoru.
ADC r; (A)+r+CY(A), dodati registar i bit prenosa
akumulatoru.
ADD M; (A)+M(H,L)(A), dodati sadraj memorijske
lokacije odreen registarskim parom (H,L)
akumulatoru.
ADC M; (A)+M(H,L)+CY(A), dodati i bit prenosa
akumulatoru.
ADI; dodati akumulatoru neposredno.
ADI 30h; (A)+30h(A).
ACI; zajedno sa bitom prenosa dodati akumulatoru
neposredno.
DAD B; (H,L)+(B,C)(H,L), dodati (B,C) u (H,L).
DAD D; (H,L)+(D,E)(H,L), dodati (D,E) u (H,L).
DAD SP; (H,L)+(SP)(H,L), dodati SP (pokaziva steka) u
(H,L).
ODUZIMANJE
SUB r; (A)r(A), oduzeti registar od akumulatora, npr.
SUB D; (A)(D)(A).
SBB r; (A)rCY(A), oduzeti registar i posudbu od
akumulatora.
SUB M; (A)M(H,L)(A), oduzeti memorijsku lokaciju od
akumulatora.
SBB M; (A)M(H,L)CY(A), oduzeti memorijsku lokaciju
i posudbu od akumulatora.
SUI oduzeti od akumulatora neposredno,
npr. SUI 34h; (A)34h(A).
SBI zajedno sa posudbom oduzeti od akumulatora
neposredno.
INKREMENTIRANJE I DEKREMENTIRANJE
INR r; r+1r, inkrementirati registar (uveati sadraj
registra za 1).
DCR r; r1r, dekrementirati registar (umanjiti sadraj
registra za 1).
INR M; M(H,L)+1M(H,L), inkrementirati memorijsku
lokaciju ija se adresa nalazi u registarskom
paru(H,L).
52 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

INX B; (B,C)+1(B,C), inkrementirati registarski par


(B,C).
INX H; (H,L)+1(H,L), inkrementirati registarski par
(H,L).
DCX B; (B,C)1(B,C), dekrementirati registarski par
(B,C).
DCX H; (H,L)1(H,L), dekrementirati registarski par
(H,L).
LOGIKE OPERACIJE
ANA r; logiko I akumulatora i registra, (A)""r(A).
XRA r; logiko EXILI akumulatora i registra, (A) r(A).
ORA r; logiko ILI akumulatora i registra ,(A)"+"r(A).
CMP r; poreenje sadraja akumulatora i sadraja registra.
Nakon ove instrukcije sadraj akumulatora ostaje
nepromijenjen.
(A)r. Ako je r>(A), pojavie se prenos.
ANA M; (A)""M(H,L)(A), logiko I.
XRA M; (A) M(H,L)(A), logiko EXILI.
ORA M; (A)"+"M(H,L)(A); logiko ILI.
CMP M; poreenje sadraja memorijske lokacije i sadraja
akumulatora,(A)M(H,L).
Ako je M (H,L)>(A) pojavie se prenos tj. CY=1.
ANI; logiko mnoenje akumulatora i bajta
neposredno,npr. ANI 7Fh; (A)""7Fh(A).
ORI; logiko ILI sa akumulatorom neposredno, npr.
ORI 5Ah; (A)"+"5Ah(A).
XRI; logiko EXILI sa akumulatorom neposredno, npr.
XRI 30h; (A)+30h(A).
CPI; poreenje sa akumulatorom neposredno. Poredi
sadraj akumulatora neposredno sa bajtom koji
slijedi ovu naredbu.
Primjeri:
MVI A, 01010101(2)
MVI B, 00011111(2)
ANA B
ORI C0h
XRI 0Fh
INSTRUKCIJE ZA ROTIRANJE AKUMULATORA
RLC; rotira akumulator ulijevo (mnoi sadraj
akumulatora sa dva).

RRC; rotira akumulator udesno (dijeli sadraj akumulatora


sa dva).
6. Skup instrukcija mikroprocesora INTEL 8085 53

RAL; rotira akumulator ulijevo preko bita prenosa CY


(osmi bit ide u CY, a CY ide u prvi bit).

RAR; rotira akumulator udesno preko bita prenosa CY


(prvi bit ide u CY, a CY ide u osmi bit).

Primjeri:

SPECIJALNE INSTRUKCIJE
CMA; komplementirati akumulator
STC; postaviti bit prenosa CY = 1
CMC; komplementirati bit prenosa
DAA; decimalno podeavanje akumulatora (slijedi nakon
aritmetike operacije)

6.3. INSTRUKCIJE ZA UPRAVLJANJE TOKOM IZVRAVANJA


PROGRAMA
Ove instrukcije utiu na tok izvravanja programa. Mogu biti uslovne i bezuslovne. To su
instrukcije: JUMP, CALL, RETURN i RESTART.
INSTRUKCIJE SKOKA
JMP (b2)(b3); bezuslovni skok, 2-bajtni operand neposredno slijedi
iza instrukcije (smjeta se u PC).
JC (b2)(b3); skok ako postoji prenos CY=1.
JNC (b2)(b3); skok ako je CY=0.
JZ (b2)(b3); skok ako je Z=1 (rezultat nula).
JNZ (b2)(b3); skok ako je Z=0 (rezultat nije nula).
JP(b2)(b3); skok ako je rezultat pozitivan.
JM(b2)(b3); skok ako je rezultat negativan.
JPE(b2)(b3); skok ako postoji parnost.
54 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

JPO(b2)(b3); skok ako ne postoji parnost.


PCHL; skok na adresu koja se nalazi u registarskom paru
(H,L), (H,L)PC.
INSTRUKCIJE ZA POZIV POTPROGRAMA
CALL(b2)(b3); bezuslovni poziv potprograma.
POZIV POTPROGRAMA AKO JE ISPUNJEN USLOV
CC(b2)(b3); poziv potprograma ako postoji prenos.
CNC(b2)(b3); poziv potprograma ako ne postoji prenos.
CZ(b2)(b3); poziv potprograma ako je rezultat nula.
CNZ(b2)(b3); poziv potprograma ako rezultat nije nula.
CP(b2)(b3); poziv potprograma ako je rezulrat pozitivan.
CM(b2)(b3); poziv potprograma ako je rezultat negativan.
CPE(b2)(b3); poziv potprograma ako postoji parnost.
CPO(b2)(b3); poziv potprograma ako ne postoji parnost.
INSTRUKCIJE ZA POVRATAK IZ POTPROGRAMA
RET; povratak iz PP (bezuslovni).
RC;
RNC;
RZ;
RNZ; Povratak, ako je ispunjen uslov.
RP;
RM;
RPE;
RPO;
RESTART
RST; restart.

6.4. INSTRUKCIJE ZA UPRAVLJANJE STEKOM, ULAZOM/IZLAZOM


I MIKROPROCESOROM
INSTRUKCIJE ZA UPRAVLJANJE STEKOM
Stek ili magacin je ureeni skup podataka u kome se podaci mogu jedino unositi ili uklanjati sa
vrha steka.
Stek je poznat kao lista tipa poslednji doao-prvi opsluen, ili LIFO lista (Last Un, First Out).
Stek se koristi da bi se omoguilo koritenje PP-a i prekida, jer pri koritenju PP-a i prekida se
mijenja redoslijed izvravanja instrukcija tako to procesor prelazi na izvravanje PP-a i
programa za obradu prekida. Da bi se po zavretku tih programa moglo nastaviti dalje
izvravanje prethodnog programa u steku se memorie povratna adresa i oni meurezultati koji
mogu biti promjenjeni pri izvravanju potprograma ili programa za obradu prekida. Po zavretku
tih programa iz steka se vraaju memorisani sadraji i procesor nastavlja izvravanje prethodnog
programa po normalom redoslijedu.
Stek se najee realizuje kao blok memorijskih lokacija. Kod procesora Intel 8085 je
programski realizovan stek u operativnoj memoriji. SP (stek pointer) uvijek pokazuje lokaciju
steka koja je zadnja zauzeta. Kod mikroprocesora Intel 8085 pri upisivanju u stek se automatski
umanji sadraj pokazivaa steka (SP) za 1 pa se onda upie podatak. Pri oitavanju iz steka se
oita podatak pa se uvea sadraj pokazivaa steka za 1. Stek podrava dvije osnovne operacije
a to su PUSH i POP.
6. Skup instrukcija mikroprocesora INTEL 8085 55

Operacijom PUSH se najprije pokaziva steka umanji za jedan, a zatim vri unos podataka na
vrh steka.
PUSH rp; smjestiti sadraj registarskog para (rp) na stek, pri
tom se prvo smjesti vii bajt pa onda nii bajt.
Sadraj pokazivaa steka se umanjuje za dva,
(SP)2.
Operacijom POP uzima se podatak sa vrha steka, a zatim vrijednost pokazivaa uveava za
jedan.
POP rp; smjesititi podatke sa steka u registarski par (rp), pri
tome se prvo uzima i smjeta nii bajt pa onda vii
bajt. Sadraj pokazivaa steka se uvea za dva,
(SP)+2.
XTHL; zamijeniti sadraj registara (H) i (L) i posljednje
vrijednosti u steku adresirane sa (SP), (SP) ostaje
nepromijenjen odnosno zamijeniti (H,L) i vrh steka.
SPHL; premjestiti sadraj registara (H) i (L) u registar (SP)
(pokaziva steka).
LXI SP, (b2)(b3); napuniti neposredno (SP), pri emu se bajt (b2)
prenosi u osam niih bita (SP), a bajt (b3) u osam
viih bita (SP).
INX SP; (SP)+1SP, inkrementirati registar.
DCX SP; (SP)-1SP, dekrementirati registar.
INSTRUKCIJE ZA UPRAVLJANJE ULAZOM/IZLAZOM
IN adr; u akumulator se upisuje podatak sa ulaznog porta
ija je adresa adr.
OUT adr; sadraj akumulatora se upisuje u izlazni port ija je
adresa adr.
INSTRUKCIJE ZA UPRAVLJANJE MIKROPROCESOROM/KONTROLNE
INSTRUKCIJE
EI; postavlja se bit omoguenja prekida (IE) na jedan,
pri emu se omoguuje prekid.
DI; brie se bit omoguenja prekida (IE=0), pri emu se
prekid onemoguava.
NOP; ne obavlja se nikakva operacija nego se samo sadraj
PC-a poveava za 1, (PC)+1PC.
HLT; zaustavlja se mikroprocesor i iz tog stanja procesor
moe izai samo ako se pojavi zahtjev za prekid ili
DMA prenos.
56 Praktikum za auditorne vjebe iz mikroprocesorskih sistema
7. ZADACI
58 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

1. Zadatak
Napisati program prema dijagramu toka na slici, program treba da se nalazi u memoriji poev od
adrese 0800h.

Rjeenje:
NAME ZAD1
ORG 0800h
LDA Q; (Q)(A)
STA P; (A)(P)
HLT
Q: DB 4
P: DS 1
KOMENTAR ZADATKA:
LDA Q; napuniti akumulator direktno sadrajem odreenim
labelom Q.
STA P; sadraj akumulatora pohraniti (smjestiti) na lokaciju
odreenu labelom P.
DB 4; pseudo instrukcija, dodjeljuje vrijednost
memorijskoj lokaciji oznaenoj labelom Q.
DS 1; Pseudo instrukcija, rezervie memorijsku lokaciju za
upis rezultata.

2. Zadatak
Napisati program koji izraunava izraz:
Q = (Y + Z) W, za Y = 2, Z = 3, W = 1.
Poetna adresa programa je 0900h.
Rjeenje:
NAME ZAD2
ORG 0900h
LDA Y
LXI H,Z
ADD M; (A)+M(H,L)(A)
LXI H,W
7. Zadaci 59

SUB M; (A)M(H,L)(A)
STA Q
HLT
Y: DB 2
Z: DB 3
W: DB 1
Q: DS 1
END
KOMENTAR ZADATKA
LDA Y; napuniti akumulator direktno sadrajem odreenim
labelom Y.
LXI H,Z; registarski par (H,L) puni adresom odreenom
labelom Z.
ADD M; sabire vrijednost u akumulatoru i podatak koji se
nalazi na memorijskoj lokaciji odreen registarskim
parom (H,L), tj. (Y+Z).
LXI H,W; registarski par (H,L) puni adresom odreenom
labelom W.
SUB M; oduzima vrijednost na memorijskoj lokaciji
odreenoj registarskim parom (H,L) od vrijednosti u
akumulatoru tj. (Y+Z)W.
STA Q; pohranjuje sadraj akumulatora direktno na adresu
Q.
Y:DB 2; pseudo instrukcija koja dodjeljuje vrijednost
memorijskoj lokaciji oznaenoj labelom Y.
Z:DB 3; pseudo instrukcija koja dodjeljuje vrijednost
memorijskoj lokaciji oznaenoj labelom Z.
W:DB 1; pseudo instrukcija koja dodjeljuje vrijednost
memorijskoj lokaciji oznaenoj labelom W.
Q:DS 1; pseudo instrukcija koja rezervie memorijsku
lokaciju za upis rezultata.

3. Zadatak
Napisati asemblerski program koji vri sabiranje dva 16-bitna broja prema algoritmu datom na
slici. Poetna adresa programa je 0A00h.
60 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Rjeenje:
NAME ZAD3
ORG 0A00h
LHLD P; (PH,PL)(H,L)
XCHG; (H,L)(D,E)
LHLD Q; (QH,QL)(H,L)
DAD D; (H,L)+(D,E)(H,L)
SHLD R; (H,L)R
HLT
P: DW 0400h
Q: DW 02F1h
R: DS 2
END
KOMENTAR ZADATKA
LHLD P; puni registarski par (H,L) direktno sa
esnaestobitnim brojem 0400h smjetenog na
adresama P i P+1. Prvo puni nii bajt (L=00h), a
zatim vii bajt (H=04h).
XCHG; mijenja sadraj registarskim parovima (H,L) i (D,E).
LHLD Q; puni (H,L) direktno esnaestobitnim brojem na
adresama Q i Q+1. Prvo puni nii bajt (L=F1h) a
zatim vii bajt (H=02h).
DAD D; sabire sadraj registarskih parova (H,L) i (D,E) i
rezultat smjeta u registarski par (H,L).
SHLD R; pohranjuje sadraj registarskog para (H,L) direktno
na lokacije R i R+1 (dvije uzastopne lokacije).
P: DW 0400h dvije uzastopne lokacije P i P+1 za upis
esnaestobitnog broja 0400h
R: DS 2; rezervie dvije lokacije u koje se smjeta rezultat.

4. Zadatak
Prebaciti polje od pet podataka iz uzastopnih memorijskih lokacija u drugi dio memorije u novih
pet lokacija. Zahtijeva se da program poinje od adrese 0B00h.

Registarski par (H, L) je pokaziva adrese za niz P.


Registarski par (D, E) je pokaziva adrese za niz Q.
Registar B je broja podataka u nizu.
7. Zadaci 61

Rjeenje:
NAME ZAD4
ORG 0B00h
LXI D,Q
LXI H,P
MVI B,05h; 05h(B)
L1: MOV A,M; M(H,L)(A)
INX H; (H,L)+1(H,L)
STAX D
INX D; (D,E)+1(D,E)
DCR B; (B)1(B)
JNZ L1; (B)0(Z=0)
HLT
P: DB 5,4,3,2,1
Q: DS 5
END
KOMENTAR ZADATKA
LXI D, Q; registarski par (D,E) punimo neposredno sa
poetnom adresom niza Q.
LXI H, P; registarski par (H,L) punimo neposredno sa
poetnom adresom niza P.
MVI B, 05h; punimo ragistar B neposredno sa 05h.
MOV A, M; punimo akumulator elementima niza P iz
memorijske lokacije M (H,L).
INX H; uveavamo pokaziva adrese niza P za jedan, tj.
prelazimo na sljedeu adresu niza P.
STAX D; vrijednost iz akumulatora stavljamo na memorijsku
lokaciju odreenu parmo (D,E).
INX D; uveavamo pokaziva adrese niza Q za jedan, tj.
prelazimo na sljedeu adresu niza Q.
DCR B; umanjujemo broja podataka za jedan.
JNZ L1; uslovni skok na memorijsku lokaciju oznaenu
labelom L1, ako vrijednost brojaa podataka nije
jednaka nuli.
P: DB 5,4,3,2,1 pseudo instrukcije.
Q: DS 5
62 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

5. Zadatak
Nalaenje zbira niza podataka (uz uslov da se ne deava prekoraenje opsega). Na adresi 0A00h
nalazi se podatak koji govori koliki je broj podataka u nizu. Podaci su smjeteni u memoriji
poev od adrese 0800h. Program poinje od adrese 0B00h.

Rjeenje:
NAME ZAD5
ORG 0B00h
LDA 0A00h
MOV B,A; (A)(B)
LXI H,0800h; 0800h(H,L)
SUB A; (A)(A)(A)
L1: ADD M; (A) + M(H,L)(A)
INX H; (H,L)+1(H,L)
DCR B; (B)1(B)
JNZ L1; (B)0(Z=0)
HLT
END
KOMENTAR ZADATKA
LDA 0A00h; punimo akumulator direktno podatkom koji
pokazuje broj podataka u nizu, a nalazi se na adresi
0A00h.
MOV B,A; punimo registar B (broja) podatkom iz akumulatora
u kome se nalazi podatak koji govori koliki je broj
podataka u nizu.
LXI H,0800h; registarski par (H,L) punimo neposredno sa 0800h,
to predstavlja poetnu adresu niza podataka.
SUB A; ienje akumulatora.
ADD M; akumulatoru dodajemo podatak na memorijskoj
lokaciji odreenoj registarskim parom (H,L) i
rezultat sabiranja smjetamo u akumulator.
INX M; registarski par (H,L) uveavamo za jedan, tj.
postavljamo pokaziva adrese na sljedeu
memorijsku lokaciju iz koje uzimamo podatak za
obradu.
DCR B; umanjujemo broja podataka za jedan.
JNZ L1; uslovni skok na memorijsku lokaciju oznaenu
labelom L1, ako vrijednost brojaa podataka nije
jednaka nuli, tj. ako ima jo podataka za obradu.
7. Zadaci 63

6. Zadatak
Koristei podatke iz prethodnog zadatka, pronai najvei broj u nizu podataka predstavljenih
kao cjelobrojni bez znaka i smjestiti na adresu 0E00h. Program poinje od adrese 0B00h.
Rjeenje:
NAME ZAD6 Pronai najmanji broj:
ORG 0B00h imamo izmjenu u dole
LDA 0A00h prikazanim instrukcijama.
MOV B,A; (A)(B)
LXI H,0800h; 0800h(H,L)
NM: MOV A,M; M(H,L)(A) [NOV MIN: MOV A,M]
STA 0E00h
Adr1: DCR B; (B)(1)(B)
JZ Kraj; (B)=0(Z=1)
INX H; (H,L)+1(H,L)
CMP M; (A)M(H,L)
JC NM; CY=1 [JNC NOV MIN]
JMP Adr1
Kraj: HLT
END
KOMENTAR ZADATKA
STA 0E00h; stavljamo sadraj akumulatora u kome se nalazi
najvei broj u polju podataka direktno na
memorijsku lokaciju 0E00h.
DCR B; umanjujemo broja podataka za jedan.
JZ Kraj; uslovni skok na memorijsku lokaciju oznaenu
labelom Kraj, ako je vrijednost brojaa jednaka
nuli (Z=1).
INX H; prelazak na adresu sljedeeg elementa.
CMP M; poredi se podatak na memorijskoj lokaciji odreenoj
registarskim parom (H,L) sa sadrajem akumulatora
u kome je trenutno najvei broj. Ako je M(H,L)>A,
rezultat AM(H,L) je negativan, te je CY=1.
JC NM; uslovni skok na memorijsku lokaciju oznaenu
labelom NM (novi maksimum) ako je postavljan
bit prenosa (CY=1) to omoguava smjetanje novog
maksimuma u akumulator.
JMP Adr1; bezuslovni skok na memorijsku lokaciju oznaenu
labelom Adr1 to omoguava dalju obradu sve dok
sadraj registra B ne bude jednak nuli (Z=1).
NAPOMENA
Logika operacija CMP M izvrava operaciju (A)M(H,L) i ne mijenja se sadraj akumulatora,
ali mijenja bite registra stanja. Ako je tekui element polja M(H,L) vei od ranije naenog
maksimuma koji je u akumulatoru, onda ga on zamjenjuje u akumulatoru na taj nain to se bit
prenosa postavlja na jedan (CY=1), te se izvrava skok na labelu NM gdje se postavlja novi
maksimum.
64 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

7. Zadatak
Napisati program koji vri brisanje memorije mikroraunara od lokacije 1000h do lokacije 2000h.
Program poinje od adrese 0020h.
Rjeenje:
NAME ZAD7
ORG 0020h
LXI H,1000h; 1000h(H,L)
L1: MVI M,00h;(**) 00hM(H,L)
INX H; (H,L)+1(H,L)
MOV A,H; (H)(A)
CPI 20h; (A)20h
JNZ L1; (A)20hZ=0
HLT
**ovu instrukciju moemo drugaije napisati:
L1: SUB A; (A)(A)(A)
MOV M,A; (A)M(H,L)
KOMENTAR ZADATKA
LXI H,1000h; registarski par (H,L) punimo neposredno sa 1000h,
to predstavlja poetnu adresu od koje se vri
brisanje memorije.
MVI M,00h; punimo memorijsku lokaciju odreenu registarskim
parom (H,L) neposredno sa 00h, tj. briemo je.
INX H; registarski par (H,L) uveavamo za jedan, tj.
postavljamo pokaziva adrese na sljedeu lokaciju.
MOV A,H; punimo akumulator iz registra (H) jer je:
1000 1001
+ 1 1
10 ( H ) , 01 ( L ) ; 10 ( H ) , 02 ( L ) ;
1001 1002

1FFE 1FFF
+ 1 1
1F ( H ) , FF ( L ) ; 20 ( H ) , 00 ( L ) .
1FFF 2000

CPI 20h; poredimo sa akumulatorom neposredno 20h ((A)


20h), tj. provjeravamo da li smo stigli do posljednje
memorijske lokacije koju treba obrisati 2000h.
Poredimo sa 20h, jer registar (H) kada bude 20h tada
registar (L) ima sadraj 00h.
JNZ L1; uslovni skok na memorijsku lokaciju oznaenu
labelom L1 ako vrijednost u akumulatoru nije
jednaka 20h, tj. (A)20hZ=0.
SUB A; ienje akumulatora, (A)=00h.
MOV M,A; sadraj memorijske lokacije odreene registarskim
parom (H,L) punimo sadrajem akumulatora
[(A)=00hM(H,L)=00h].
7. Zadaci 65

8. Zadatak
Napisati program koji upisuje jedinice u sve bite svih memorijskih lokacija od adrese 2000h do
3000h. Program poinje od 0020h.
Rjeenje:
NAME ZAD8
ORG 0020h
LXI H,2000h; 2000h(H,L)
L1: MVI M,FFh; FFhM(H,L)
INX H; (H,L)+1(H,L)
MOV A,H; (H)(A)
CPI 30h; (A)30h
JNZ L1; (A)30h
HLT
KOMENTAR ZADATKA
LXI H,2000h; Registarski par (H,L) punimo neposredno sa 2000h
to predstavlja poetnu adresu od koje se upisuju
jedinice u sve bite memorije.
MVI M,FFh; Punimo memorijsku lokaciju odreenu registarskim
parom (H,L) neposredno sa FFh, tj. postavljamo
jedinice u sve bite M (H,L).
INX H; Postavljamo pokaziva adrese na sljedeu
memorijsku lokaciju u koju treba da postavimo
jedinice u sve bite;
MOV A,H; Punimo akumulator iz registra (H) jer je:
2000 2001
+ 1 1
20 ( H ) ,01 ( L ) ; 20 ( H ) , 02 ( L ) ;
2001 2002

2FFE 2FFF
+ 1 1
2F ( H ) , FF ( L ) ; 30 ( H ) , 00 ( L ) .
2FFF 3000
CPI 30h; Poredimo sa akumulatorom neposredno 30h (A30h),
tj. provjeravamo da li smo stigli do posljednje
memorijske lokacije u koju treba postaviti jedinice u
sve bite. Poredimo sa 30h jer registar H kada bude
30h, tada registar L ima sadraj 00h.
JNZ L1; Uslovni skok na memorijsku lokaciju oznaenu
labelom L1 ako vrijednost u akumulatoru nije
jednaka 30h tj. A30hZ=0.

9. Zadatak
Napisati program koji puni registarski par BC sa 0108 i 0018 respektivno, a zatim ga upii u
memoriju na dvije uzastopne lokacije poev od adrese 0080h. Program poinje od adrese 0020h.
66 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

Rjeenje:
NAME ZAD9
ORG 0020h
LXI B,0801h; 0801h(B,C)
LXI H,0080h; 0080h(H,L)
MOV M,B; (B)M(H,L)
INX H; (H,L)+1(H,L)
MOV M,C; (C)M(H,L)
HLT
KOMENTAR ZADATKA
LXI B,0801h; registarski par (B,C) punimo neposredno sa 0801h,
odnosno 08h=0108(B), 01h=0018(C).
0108=000 001 0002=08hB
0018=000 000 0012=01hC
LXI H,0080h; registarski par (H,L) punimo neposredno sa 0080h
to predstavlja memorijsku lokaciju na koju emo
upisati sadraj registra (B)=08h.
MOV M,B; punimo memorijsku lokaciju 0800h sadrajem
registra (B)=08h.
INX H; postavljamo pokaziva adrese na sljedeu
memorijsku lokaciju 0081h.
MOV M,C; punimo memorijsku lokaciju 0081h sadrajem
registra (C)=01h.

10. Zadatak
Primjer uzimanja podataka sa steka, inkrementiranje i dekrementiranje podataka i ponovno
vraanje podataka na stek. Program poinje od adrese 0000h.
Rjeenje:
NAME ZAD10
ORG 0000h
LXI SP,0080h; 0800h(SP)
POP B; M((SP)+1)(B), M((SP)+2)(C)
INR B; (B)+1(B)
DCR C; (C)1(C)
PUSH B; (B)M((SP)1), (C)M((SP)2)
HLT
KOMENTAR ZADATKA
LXI SP,0080h; punimo neposredno pokaziva steka sa 0080h.
POP B; sadraj registarskog para (B,C) punimo neposredno
sa steka. Prvo se uzima i smjeta podatak u nii bajt
registarskog para (B,C) a zatim u vii bajt
respektivno: (0080h)(C), (0081h)(B), a sadraj
pokazivaa steka uveamo za dva ((SP)+2(SP)).
INR B; inkrementiramo podatak koji smo uzeli sa steka i
smjestili u vii bajt registarskog para (B,C), tj. u
registar (B).
7. Zadaci 67

DCR C; Dekrementiramo podatak koji smo uzeli sa steka i


smjestili u nii bajt registarskog para (B,C), tj. u
registar (C).
PUSH B; Sadraj registarskog para (B,C) smjetamo na stek.
Prvo se smjeta podatak sa steka u vii bajt
registarskog para (B,C) a zatim u nii bajt
respektivno: (B)(0081h), (C)(0080h), a sadraj
pokazivaa steka umanjimo za dva ((SP)2(SP)).

11. Zadatak
U narednom primjeru data je standardna procedura skupljanja i formiranja u RAM-u
mikroprocesorskog sistema, polja podataka od jednog izvora. Ulazni podaci se uzimaju sa
ulaznog porta (registra). Poetna adresa polja podataka u RAM-u je 0800h. Adresa ulaznog porta
je A0h. Program poinje od adrese 0B00h. Uzimanje podatka sa ulaznog porta:
Prekida kada se pojavi FFh, ne unosi taj podatakide na kraj.
Rjeenje:
NAME ZAD11a
ORG 0B00h
MVI C,00h; 00h(C)
LXI H,0800h; 0800h(H,L)
L1: IN A0h
SUI FFh; (A)FFh(A)
JZ Kraj
MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
INR C; (C)+1(C)
JMP L1
Kraj: HLT

NAPOMENA
U ovom zadatku potrebno je prekinuti uzimanje podataka sa ulaznog porta kada je taj podatak
FFh, zbog ega moramo po preuzimanju podataka sa porta u akumulator provjeriti zadani uslov.
KOMENTAR ZADATKA
MVI C,00h; punimo registar (C) neposredno sa 00h, tj.
postavljamo broja podataka (registar (C)) na
vrijednost 00h.
LXI H,0800h; registarski par (H,L) punimo neposredno sa 0800h,
to predstavlja poetnu adresu polja podataka.
IN A0h; podaci sa ulaznog porta upisuju se u akumulator.
SUI FFh; oduzimamo od akumulatora neposredno FFh i
rezultat smjetamo u akumulator, tj. ako je u
akumulatoru podatak koji smo preuzeli sa ulaznog
porta FFh, poslije naznaene operacije oduzimanja u
68 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

akumulatoru je 00h. Na ovaj nain provjeravamo da


li je uneeni podatak FFh.
JZ Kraj; uslovni skok na memorijsku lokaciju oznaenu
labelom Kraj, ako je uneeni podatak sa ulaznog
porta FFh jer tako imamo u akumulatoru 00h (nije
jednak FFh) te je Z=1.
MOV M,A; smjetamo podatak (nije jednak FFh) iz akumulatora
na memorijsku lokaciju odreenu registarskim
parom (H,L), tj. formiramo polje podataka.
INX H; postavljamo pokaziva adrese na sljedeu
memorijsku lokaciju u koju treba unijeti podatak ako
zadovolji zadani uslov.
INR C; broja podataka (registar (C)) u polju podataka
uveavamo za jedan, poslije smjetanja podataka u
RAM memoriju.
JMP L1; bezuslovni skok na memorijsku lokaciju oznaenu
labelom L1 to omoguava dalju obradu, odnosno
preuzimanje podataka sa ulaznog porta.
Prekida ako je zadnji uneeni podatak FFhzavrava se uzimanje podataka.
Rjeenje:
NAME ZAD11b
ORG 0B00h
LXI H,0800h; 0800h(H,L)
MVI C,00h; 00h(C)
L1: IN A0h
MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
INR C; (C)+1(C)
SUI FFh; (A)FFh(A)
JNZ L1; (A)00hZ=0
HLT
END
NAPOMENA
Prekidamo ako je zadnji uneeni podatak FFh, to znai da ga stavljamo u RAM, ali poslije toga
se prekida uzimanje podataka sa ulaznog porta.
KOMENTAR ZADATKA
SUI FFh; provjeravamo da li je zadnji uneeni podatak u
RAM-u jednak FFh tako to oduzimamo od
akumulatora neposredno FFh i rezultat smjetamo u
akumulator.
JNZ L1; ako podatak u akumulatoru nije 00h izvrava se skok
na L1, suprotno prekida se dalje uzimanje podataka
sa ulaznog porta.
7. Zadaci 69

Ako je broj podataka poznat i nalazi se na lokaciji sa adresom 0900h


Rjeenje:
NAME ZAD11c
ORG 0B00h
LXI H,0800h; 0800h(H,L)
LDA 0900h
MOV C,A; (A)(C)
L1: IN A0h
MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
DCR C; (C)1(C)
JNZ L1; (C)00hZ=0
HLT
END
KOMENTAR ZADATKA
LXI H,0800h; registarski par (H,L) punimo neposredno sa 0800h,
to predstavlja poetnu adresu polja podataka.
LDA 0900h; vrijednost brojaa tj. broj podataka direktno sa 0900h
stavlja u akumulator.
MOV C,A; podatak iz akumulatora (broj podataka) prenosi u
registar (C) koji ima ulogu brojaa.
MOV M,A; prenosi vrijednosti iz akumulatora na memorijske
lokacije M(H,L), formirajui polje podataka.
INX H; postavljamo pokaziva adrese na sljedeu
memorijsku lokaciju u koju treba unijeti podatak.
DCR C; broja podataka (registar (C)) u polju podataka
umanjujemo za jedan.
JNZ L1; uslovni skok na memorijsku lokaciju oznaenu
labelom L1 ako je broja podataka (C)00hZ=0.

12. Zadatak
U memoriji mikroraunara nalazi se niz od 400 (190h) binarnih podataka poev od adrese 0900h.
Napisati program koji vri logiko mnoenje i logiko sabiranje ovih podataka sa 55h i rezultate
smjestiti poev od adrese 0900h i 0000h respektivno. Program poinje od adrese 0B00h.
Rjeenje:
NAME ZAD12
ORG 0B00h
LXI B,0190h ; 0190h(B,C)
LXI H,0900h; 0900h(H,L)
LXI D,0000h; 0000h(D,E)
L1: MOV A,M; M(H,L)(A)
ORI 55h; (A)+55h(A)
STAX D
MOV A,M; M(H,L)(A)
ANI 55h; (A)55h(A)
MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
INX D; (D,E)+1(D,E)
70 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

DCX B; (B,C)1(B,C)
MOV A,B; B(A)
ORA C; (A)+(C)(A)
JNZ L1
HLT
KOMENTAR ZADATKA
LXI B,0190h; registarski par (B,C) punimo neposredno sa 0190h,
to predstavlja broja podataka niza.
LXI H,0900h; registarski par (H,L) punimo neposredno sa 0900h,
to predstavlja poetnu adresu niza podataka. Istu
ovu lokaciju koristiemo kasnije kao poetnu adresu
od koje smjetamo rezultate logikog mnoenja.
LXI D,0000h; registarski par (D,E) punimo neposredno sa 0000h,
to predstavlja poetnu adresu od koje smjetamo
rezultate logikog sabiranja.
L1: MOV A,M; uzimamo podatak iz niza koji se nalazi na
memorijskoj lokaciji ija je adresa u registarskom
paru (H,L) i stavljamo u akumulator.
STAX D; pohranjujemo sadraj akumulatora (indirektno
adresa u registarskom paru) na lokaciju ija je adresa
u registarskom paru (D,E).
MOV A,M; uzimamo isti podatak iz niza, kako bi izvrili logiko
mnoenje sa 55h.
MOV M,A; rezultat mnoenja iz akumulatora smjetamo na
memorijske lokacije poev od adrese 0900h.

13. Zadatak
U memoriji mikroraunara je niz od 400 (190h) binarnih podataka poev od adrese 0800h.
Napisati program koji podatke iz niza vee od 100 prebacuje na uzastopne lokacije poev od
adrese 0C00h. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD13
ORG 0020h
LXI B,0190h; 0190h(B,C)
LXI H,0800h; 0800h(H,L)
LXI D,0C00h; 0C00h(D,E)
L1: MOV A,M; M(H,L)(A)
CPI 65h;
JC L2
STAX D
INX D
L2: INX H
DCX B
MOV A,B
ORA C
JNZ L1
HLT
7. Zadaci 71

KOMENTAR ZADATKA
LXI B,0190h; registarski par (B,C) punimo neposredno sa 0190h,
to predstavlja broja podataka niza.
LXI H,0800h; registarski par (H,L) punimo neposredno sa 0800h,
to predstavlja poetnu adresu niza podataka.
LXI D,0C00h; registarski par (D,E) punimo neposredno sa 0C00h,
to predstavlja poetnu adresu za smjetanje
podataka iz niza veih od 10010.
L1: MOV A,M; uzimamo podatak iz niza koji se nalazi na
memorijskoj lokaciji ija je adresa u registarskom
paru (H,L) i stavljamo u akumulator.
CPI 65h; uporeuje 10110=65h sa akumulatorom, na sljedei
nain:
A<101 CY=1
A10110
A>101 CY=0
JC L2; uslovni skok na L2, ako je CY=1, tj. 101>A.
STAX D; na memorijsku lokaciju (registarski par (D,E))
smjetamo podatke iz akumulatora vee od 100, za
koje je CY=0.
L2: INX H; inkrementiramo registarski par (H,L) kako bi
pokaziva stavili na sljedeu memorijsku lokaciju sa
koje uzimamo podatak za obradu.

14. Zadatak
U memoriji mikroraunara nalazi se niz od 300=120h podataka poev od adrese 0906h.. Izvriti
sabiranje podataka koji imaju neparan broj jedinica i odrediti broj takvih podataka. Rezultat
smjestiti na dvije lokacije poev od adrese 0000h. Podaci su takvi da je njihova suma manja od
255. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD14
ORG 0020h
LXI B,012Ch; 012Ch(B,C)
LXI H,0906h; 0906h(H,L)
MVI D,00h; 00h(D)
MVI E,00h; 00h(E)
L1: MOV A,M; M(H,L)(A)
JPE L2
INR D; (D)+1(D)
ADD E; (A)+(E)(A)
MOV E,A; (A)(E)
L2: INX H; (H,L)+1(H,L)
DCX B; (B,C)1(B,C)
MOV A,B; (B)(A)
ORA C; (A)+(C) (A)
JNZ L1
MOV A,E; (E)(A)
STA 0000h
MOV A,D; (D)(A)
STA 0001h
HLT
72 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

KOMENTAR ZADATKA
LXI B,012Ch; registarski par (B,C) punimo neposredno sa 012Ch,
to predstavlja broja podataka niza, jer je niz vei
od 25510.
LXI H,0906h; registarski par (H,L) punimo neposredno sa 0906h,
to predstavlja poetnu adresu niza podataka.
MVI D,00h; registar (D) koristimo kao broja podataka sa
neparnim brojem jedinica.
MVI E,00h; registar (E) koristimo za trenutno smjetanje sume
podataka sa neparnim brojem jedinica.
L1: MOV A,M; uzimamo podatak na memorijskoj lokaciji ija je
adresa u registarskom paru (H,L) i stavljamo u
akumulator.
JPE L2; skok na L2 ako je u akumulatoru podatak sa parnim
brojem jedinica (P=1) gdje uzimamo sljedei
podatak iz datog niza u memoriji, ako ne postoji
parnost tj. neparan broj jedinica izvravaju se
instrukcije koje slijede poslije opisane.
INR D inkrementiramo registar (D) koji je broja podataka
sa neparnim brojem jedinica.
ADD E zbrajamo podatke sa neparnim brojem jedinica.
MOV E,A sumu podataka sa neparnim brojem jedinica iz
akumulatora prenosimo u registar (E).
L2: INX H; uzimamo sljedei podatak za obradu iz niza.
DCX B; dekrementiramo (umanjujemo) broja podataka u
nizu za jedan.
MOV A,B provjeravamo dali je broja na nuli, tj. ima li jo
ORA C podataka u datom nizu za obradu.
JNZ L1
MOV A,E; prenosimo podatak iz registra (E), tj. ukupnu sumu
podataka sa neparnim brojem jedinica, u akumulator.
STA 0000h; podatak iz akumulatora, tj. ukupnu sumu podataka sa
neparnim brojem jedinica smjetamo na memorijsku
lokaciju 0000h.
MOV A,D; prenosimo podatak iz registra (D), tj. ukupan broj
podataka sa neparnim brojem jedinica, u akumulator.
STA 0001h; podatak iz akumulatora, tj. ukupan broj podataka sa
neparnim brojem jedinica smjetamo na memorijsku
lokaciju 0001h.

15. Zadatak
U memorij mikroraunara nalazi se niz od 120h podataka, poev od adrese 0A00h. Napisati
program koji vri mnoenje svakog od podataka sa 10 i smjestiti rezultat na iste lokacije.
Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD15
ORG 0020h
LXI B,0120h; 0120h(B,C)
LXI H,0A00h; 0A00h(H,L)
L1: MOV A,M; M(H,L)(A)
MOV D,A; (A)(D)
7. Zadaci 73

RLC; (A)2(A), ((A)2)


RLC; (A)2(A), ((A)4)
ADD D; (A)+(D)(A), ((A)5)
RLC; (A)2(A), ((A)10)
MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
DCX B; (B,C)1(B,C)
MOV A,B; (B)(A)
ORA C; (A)+(C)(A)
JNZ L1
HLT
KOMENTAR ZADATKA
LXI B,0120h; registarski par (B,C) punimo neposredno sa 0120h,
to predstavlja broja podataka niza.
LXI H,0A00h; registarski par (H,L) punimo neposredno sa 0A00h,
to predstavlja poetnu adresu niza od 120h
podataka.
L1: MOV A,M; prenosimo podatke sa memorijskih lokacija ije su
adrese u registarskom paru (H,L) i stavljamo u
akumulator.
MOV D,A; podatak iz niza podataka koji je u akumulatoru
prenosimo u registar (D).
RLC; rotiramo bite akumulatora za jednu poziciju ulijevo,
to odgovara mnoenju akumulatora sa dva.
MOV M,A; smjeta rezultat mnoenja na istu lokaciju u
memoriji na kojoj je bio podatak prije mnoenja
akumulatora sa dva.
Ako se u memoriji mikroraunara nalazi niz manji od 256 podataka za broja uzimamo registar
B (MOV B,broj podataka), broja B ispitujemo da li je na nuli sljedeom procedurom:
L1: ...
DCR B
JNZ L1
HLT

16. Zadatak
Napisati program koji e generisati prvih 10 lanova niza prirodnih brojeva gdje je svaki sljedei
lan niza jednak zbiru prethodnih lanova. Poetna adresa je 0A00h za niz. Poetna adresa
programa je 0900h.
Rjeenje:
NAME ZAD16
ORG 0900h
LXI H,0A00h; 0A00h(H,L)
MVI A,01h; 01h(A)
MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
MOV M,A; (A)M(H,L)
MVI B,07h; 07h(B)
L1: RLC; (A)2(A), ((A)2)
INX H; (H,L)+1(H,L)
74 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

MOV M,A; (A)M(H,L)


DCR B; (B)1(B)
JNZ L1
MVI A,O1h; 01h smjetamo na adresu 0A09h.
STA 0A09h
MVI A,00h; 00h smjetamo na adresu 0A0Ah.
STA 0A0Ah
HLT
KOMENTAR ZADATKA
Prvih 10 lanova niza prirodnih brojeva gdje je svaki sljedei lan niza jednak zbiru prethodnih
lanova su: 1, 1, 2, 4, 8, 16, 32, 64, 128, 256. lanovi niza koji su podvueni, dobijamo ih
pomou petlje gdje svaki lan mnoimo sa dva upotrebom instrukcije RLC. Zadnji lan niza 256
unosimo direktno, van petlje, jer su potrebna dva bajta.
LXI H,0A00h; registarski par (H,L) punimo neposredno sa 0A00h,
to predstavlja poetnu adresu niza od 10 lanova.
MVI A,00h; akumulator neposredno punimo sa 01h.
MOV M,A; prenosimo vrijednost iz akumulatora u M(H,L), tj.
unosimo prvi lan niza u memoriju na adresu 0A00h.
INX H; inkrementiranjem registarskog para (H,L) prelazimo
na sljedeu memorijsku lokaciju 0A01h.
MOV M,A; unosimo drugi lan niza na navedenu adresu.
MVI B,07h; u registar (B) postavljamo broja niza podataka.
L1: RLC;
INX H; petlja pomou koje dobijamo sljedee lanove niza:
MOV M,A;
DCR B; 2, 4, 8, 16, 32, 64, 128.
JNZ L1;

17. Zadatak
U memoriji mikroprocesora 8085 na lokacijama sa adresama 0900h i 0905h nalaze se dva
binarna podatka. Pomnoi ih i rezultat smjesti na lokaciju sa adresom 0920h (to je za nii bajt
proizvoda) i 0921h (to je za vii bajt proizvoda). Poetna adresa programa je 0800h.
Rjeenje:
NAME ZAD17
ORG 0800h Moe i ovako:
LXI H,0900h; 0900h(H,L) LDA 0900h
MOV E,M; M(H,L)(E) MOV E,A
LXI H,0905h; 0905h(H,L) LDA 0905h
MOV B,M; M(H,L)(B) MOV B,A
MVI D,00h; 00h(D)
LXI H,0000h; 0000h(H,L)
L1: DAD D; (D,E)+(H,L)(H,L)
DCR B; (B)1(B)
JNZ L1
MOV A,L; (L)(A)
STA 0920h
MOV A,H; (H)(A)
STA 0921h
HLT
7. Zadaci 75

KOMENTAR ZADATKA
LXI H,0900h; registarski par (H,L) punimo neposredno sa 0900h,
to predstavlja poetnu adresu prvog podatka.
MOV E,M; uzimamo podatak na M(H,L), tj. prvi podatak i
prenosimo u registar (E).
LXI H,0905h; u registarski par (H,L) smjetamo adresu drugog
podatka.
MOV B,M; uzimamo podatak na M(H,L), tj. drugi podatak i
prenosimo u registar (B).
MVI D,00h; u registar (D) prenosimo 00h, jer emo mnoenje
raditi
LXI H,0000h; pomou instrukcije DAD D.
L1: DAD D; ovom instrukcijom prvi broj u registarskom paru
(D,E) zbrajamo sa samom sobom onoliko puta u
zavisnosti od drugog broja koji se nalazi u registru
(B).
MOV A,L; ova instrukcija se izvrava kada je registar (B)=0, te
se nii bajt rezultata iz registra (L) smjeta u
akumulator.
STA 0920h; direktno smjeta podatak iz akumulatora na adresu
0920h.
MOV A,H; vii bajt rezultata mnoenja koji je u registru (H)
prenosimo u akumulator.
STA 0921h; direktno smjetamo podatak iz akumulatora na
adresu 0920h.

18. Zadatak
U memoriji mikroraunara nalazi se niz od 300 podataka poev od adrese 0800h. Podatke iz niza
koji zadovoljavaju uslov da je b2=b5=b7=0 prebaciti na nove lokacije poev od adrese 0B00h.
Odrediti broj takvih podataka. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD18
ORG 0020h
LXI B,30010; 30010(B,C)
LXI H,0800h; 0800h(H,L)
LXI D,0B00h; 0B00h(D,E)
L1: MOV A,M; M(H,L)(A)
CPI 5Bh; (A)5Bh
JNZ L2
STAX D
INX D; (D,E)+1(D,E)
L2: INX H; (H,L)+1(H,L)
DCX B (B,C)1(B,C)
MOV A,B (B)(A)
ORA C; (A)+(C)(A)
JNZ L1
L3: DCX D; (D,E)1(D,E)
MOV A,D; (D)(A)
CPI 0Bh; (A)0Bh
JC L4
76 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

INX B; (B,C)+1(B,C)
JMP L3
L4: HLT
KOMENTAR ZADATKA
LXI B,30010; u registarski par (B,C) smjetamo broj podataka niza
koji koristimo kao broja.
LXI H,0800h; u registarski par (H,L) smjetamo poetnu adresu
niza podataka za obradu.
LXI D,0B00h; u registarski par (D,E) smjetamo poetnu adresu
niza podataka koji zadovoljavaju uslov zadatka.
L1: MOV A,M; uzimamo podatak iz memorije adresiran u
registarskom paru (H,L) i prenosimo u akumulator
zbog dalje obrade.
CPI 5Bh; poredimo podatak iz memorije koji je u akumulatoru
neposredno sa 5Bh, tj. 01011011 to odgovara uslovu
zadatka.
JNZ L2; ako je rezultat prethodne instrukcije (poreenje)
(A)5Bh=0, tada podatak iz niza zadovoljava uslov
zadatka i ne izvrava se skok na L2, ve prelazi na
izvravanje sljedee instrukcije.
STAX D; ako je uslov zadovoljen, podatak iz akumulatora
stavljamo na novu lokaciju ija je adresa u
registarskom paru (D,E).
INX D; po smjetanju podataka u memoriju,
inkrementiranjem registarskog para (D,E)
postavljamo adresu za sljedei podatak iz niza koji
e zadovoljiti uslov zadatka.
L2: INX H; inkrementiranjem registarskog para (H,L)
postavljamo adresu sljedeeg podatka iz niza koji
emo obraivati.
DCX B; dekrementiranjem registarskog para (B,C), tj.
umanjujemo broja podataka u nizu poto smo iz
memorije uzeli podatak i obradili.
L3: DCX; prije ulaska u ovu petlju imali smo INX D, tako da u
registarskom paru (D,E) imamo jednu memorijsku
lokaciju vie i ovom instrukcijom tu lokaciju
briemo.
MOV A,D; podatak iz registra (D) prenosimo u akumulator. Na
poetku programa u registarski par (D,E) smjetamo
0B00h, zatim svaki podatak koji zadovolji uslov od
njih 30010=12Ch smjetamo na novu sljedeu adresu.
Maksimalan podatak u (D,E) moe biti
0B00h+012Ch=0C2Ch, te u registru (D) imamo 0Ch
koji prenosimo u akumulator.
CPI 0Bh; poredimo podatak iz akumulatora, tj. registra (D) sa
0Bh, tako da imamo petlju u kojoj brojimo podatke
koji su zadovoljili uslov smjetajui ih u registar (B).
Onog momenta kada ispunimo uslov za JC, tj. da je
C=1, jer je podatak u akumulatoru 0Ah, dalje
izvravanje programa se zaustavlja.
7. Zadaci 77

19. Zadatak
Niz od 500 ASCII podataka je zadat u memoriji mikroraunara poev od adrese 0500h, iz niza
izdvojiti cifre i poslati ih na izlazni port na adresu 20h. Prestati kada se pojavi znak prazno.
ASCII kodovi za cifre su od 30h do 39h, a znak prazno 20h. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD19
ORG 0020h
LXI H,0500h; 0500h(H,L)
LXI B,01F4h; 01F4h(B,C)
L1: MOV A,M; M(H,L)(A)
INX H; (H,L)+1(H,L)
CPI 30h; (A)30h
JC Pr
CPI 40h; (A)40h
JNC L2
OUT 20h
JMP L2
Pr: CPI 20h; (A)20h
JZ Kraj
L2: DCX B; (B,C)1(B,C)
MOV A,B; (B)(A)
ORA C; (A)+(C)(A)
JNZ L1
Kraj: HLT
KOMENTAR ZADATKA
LXI H,0500h; u registarski par (H,L) smjetamo poetnu adresu
niza.
LXI B,01F4h; u registarski par (B,C) smjetamo ukupan broj
podataka zadatog niza.
L1: MOV A,M; u akumulator prenosimo podatak iz memorije
adresiran registarskim parom (H,L).
INX H; nakon prenosa podatka iz memorije u akumulator,
inkrementiranjem registarskog para (H,L)
postavljamo u njemu adresu sljedeeg podatka za
obradu.
CPI 30h; poreenjem akumulatora i 30h saznajemo da li je
preneeni podatak iz memorije u akumulatoru cifra.
Ako je vei ili jednak 30h provjeravamo da ne bude
vei ili jednak 40h i ako zadovolji to je cifra i
aljemo je na izlazni port, zatim provjeravamo da li
ima jo podataka u nizu i ako ima uzimamo sljedei
podatak. Ako je podatak manji od 30h postavlja se
bit prenosa i provjeravamo da li je jednak 20h, i ako
jeste program se zaustavlja, u suprotnom uzimamo
novi podatak.
78 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

20. Zadatak
Na ulazni port sa adresom A0h dolazi niz od 150 jednobajtnih podataka, napisati program koji od
tog niza formira niz u memoriji poev od adrese A000h, zatim iz tog niza izdvojiti parne brojeve
i od njih formirati novi niz od adrese B000h, a neparne slati na izlazni port sa adresom B0h.
Program treba da pone od adrese 0000h.
Rjeenje:
NAME ZAD20
ORG 0000h
MVI B,96h; 96h(B)
LXI H,A000h; A000h(H,L)
Ulaz: IN A0h
MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
DCR B; (B)1(B)
JNZ Ulaz
LXI H,A000h; A000h(H,L)
LXI D,B000h; B000h(D,E)
MVI B,97h; 97h(B)
NN: MOV A,M; M(H,L)(A)
INX H; (H,L)+1(H,L)
DCR B; (B)1(B)
JZ Kraj
RAR
JNC Parni
RAL
OUT B0h
JMP NN
Parni: RAL
STAX D
INX D
JMP NN
Kraj: HLT
KOMENTAR ZADATKA
LXI H,A000h; u registarski par (H,L) smjetamo poetnu adresu
niza.
MVI B,96h; u registar (B) unosimo broj podataka koji dolaze sa
ulaznog porta.
In A0h; ulazna instrukcija, podaci se smjetaju sa ulaznog
porta u akumulator.
MOV M,A; podatak koji dolazi sa ulaznog porta smjeta se u
akumulator, ovom instrukcijom isti podatak iz
akumulatora prenosimo u memoriju na lokaciju ija
je adresa u registarskom paru (H,L).
LXI H,A000h; nakon to smo instrukcijama koje prethode formirali
niz podataka u memoriji, ovom instrukcijom u
registarski par (H,L) smjetamo 16-bitni podatak
A000h to predstavlja poetnu adresu formiranog
niza u memoriji.
LXI D,B000h; u registarski par (D,E) smjetamo poetnu adresu
novog niza sa parnim brojevima.
7. Zadaci 79

MVI B,97h; registar (B) koristimo kao broja podataka niza.


NN: MOV A,M; uzimamo podatak iz niza u memoriji poev od
lokacije ija je adresa u (H,L) tj. A000h.
RAR; ova instrukcija izvrava se sve dok ne uzmemo i
posljednji podatak u nizu, rotira podatak udesno
preko bita prenosa tj. bit najnie pozicije postavlja u
bit prenosa, a bit prenosa na mjesto bita najvie
pozicije.
JNC; ako je bit prenosa postavljen, podatak je neparan.
RAL; poslije provjere, podatak je neparan i zarotirane bite
u akumulatoru ovom instrukcijom (rotacija ulijevo
preko bita prenosa) vraamo u izvorni oblik.
OUT B0h; zadatkom se zahtjeva da sve neparne podatke
poaljemo na izlazni port B0h.
JMP NN; vraamo se na labelu NN, tj. uzimamo sljedei
podatak iz niza za obradu.
Parni: RAL; podatak je parni i ovom instrukcijom rotacija ulevo
daje izvorni oblik podatka.
STAX D; sve parne podatke iz niza smjeta u memoriji na
nove lokacije ija je adresa u registarskom paru
(D,E).

21. Zadatak
U memoriji mikroraunara nalazi se niz od 300 podataka na adresi 1800h. Prenijeti ove podatke
na nove lokacije poev od adrese 2800h, ali sa obrnutim redoslijedom. Odrediti takoe
maksimalni lan niza i staviti ga na adresu 3200h. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD21
ORG 0020h
LXI B,012Ch; 012Ch(B,C)
LXI H,1800h 1800h(H,L)
LXI D,292Ch; (poetna adresa niza + 30010)(D,E)
L1: MOV A,M; M(H,L)(A)
STAX D
INX H; (H,L)+1(H,L)
DCX D; (D,E)1(D,E)
DCX B; (B,C)1(B,C)
MOV A,B; (B)(A)
ORA C; (A)+(C)(A)
JNZ L1
LXI B,012Ch; 012Ch(B,C)
LXI D,292Ch; 292Ch(D,E)
L2: LDAX D
MOV H,A; (A)(H)
L3: DCX D; (D,E)1(D,E)
DCX B; (B,C)1(B,C)
MOV A,B; (B)(A)
ORA C; (A)+(C)(A)
JZ L4
MOV A,H; (H)(A)
XCHG; (D,E)(H,L)
80 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

CMP M; (A)M(H,L)
JC L2
JMP L3
L4: STA 3200h
HLT
KOMENTAR ZADATKA
LXI B,012Ch; postavljamo broja podataka u registar (B).
LXI H,1800h; poetnu adresu niza u memoriji smjetamo u
registarski par (H,L).
LXI D,292Ch; poetnu adresu novog niza smjetamo u registarski
par (D,E).
L1: MOV A,M; uzimamo podatke iz memorije, sa lokacija ije su
adrese u registarskom paru (H,L) i prenosimo u
akumulator.
STAX D; podatak iz akumulatora smjetamo na novu lokaciju
u memoriju ija je adresa u registarskom paru (D,E).
LXI B,012Ch; nakon to smo cjeli niz koji se nalazi u memoriji na
lokacijama poev od adrese 1800h premjestili na
nove lokacije, ovom instrukcijom ponovo u
registarski par (B,C) unosimo podatak koji
predstavlja ukupan broj podataka niza.
LXI D,292Ch; u registarski par (D,E) smjetamo adresu na kojoj e
biti posljednji podatak novoformiranog niza.
L2: LDAX D; u akumulator stavljamo podatak iz memorije ija je
adresa u registarskom paru (D,E).
MOV H,A; podatak koji smo prethodno iz novog niza stavili u
akumulator prenosimo u registar H.
L3: DCX D; kako smo u registarski par (D,E) stavili adresu
posljednjeg podatka, sljedeu lokaciju u (DE)
dobijamo tako to umanjimo za jedan, registarski par
(D,E).
MOV A,H; podatak iz novog niza nalazi se u registru (H) i ovom
instrukcijom isti podatak prenosimo u akumulator.
XCHG; mjenjamo sadraj registarskih parova (D,E) i (H,L)
zbog instrukcije kojom poredimo podatak iz
akumulatora (trenutni koji obraujemo) i podatak
koji se u memoriji nalazi jednu lokaciju prije.
CMP M; poredimo podatak u akumulatoru sa podatkom na
memorijskoj lokaciji ija se adresa nalazi u
registarskom paru (H,L). Ako je (A)<M (H,L)
pojavie se prenos tj. CY=1.
JC L2; ako je CY=1, podatak koji poredimo u akumulatoru
je manji od podatka na memorijskoj lokaciji ija je
adresa u registarskom paru (H,L). Uzimamo novi
podatak iz memorije i stavljamo u akumulator i
poredimo sa trenutno najveim.
JMP L3; na ovu instrukciju idemo ako je CY=0, tj. imamo
trenutno najvei podatak koji je u akumulatoru.
Skokom na L3 iz memorije uzimamo sljedei
podatak za poreenje.
L4: STA 3200h; ovom instrukcijom najvei podatak koji smo
postavili u akumulator, stavljamo na adresu 3200h.
7. Zadaci 81

22. Zadatak
U memoriji mikroraunara nalazi se niz od 300h jednobajtnih podataka, poev od adrese 5500h.
Napisati program koji vri mnoenje svakog podatka sa 12h i rezultate smjeta na iste lokacije.
Rezultati mnoenja su manji od FFh. Poetna adresa programa je 0500h.
Rjeenje:
NAME ZAD22
ORG 0500h
LXI B,0300h; 0300h(B,C)
LXI H,5500h; 5500h(H,L)
L1: MOV A,M; M(H,L)(A)
MOV D,A; (A)(D)
RLC; (2)
RLC; (4)
RLC; (8)
ADD D; (A)+(D)(A), (9)
RLC; (18)
MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
DCX B; (B,C)1(B,C)
MOV A,B; (B)(A)
ORA C; (A)+(C)(A)
JNZ L1
HLT
KOMENTAR ZADATKA
LXI B,0300h; u registarski par (B,C) smjetamo broja
jednobajtnih podataka.
LXI H,5500h; u registarski par (H,L) smjetamo poetnu adresu
niza.
L1: MOV A,M; sa memorijske lokacije odreenom adresom u
registarskom paru (H,L) prenosimo podatak iz
zadatog niza u akumulator zbog dalje obrade.
MOV D,A; prenosimo podatak koji smo iz memorije smjestili u
akumulator, sada u registar (D), kako bismo u obradi
koja slijedi imali izvornu vrijednost tog podatka.
RLC; rotira podatak u akumulatoru bit poziciju u lijevo, tj.
mnoi isti podatak sa dva. Tri ovakve uzastopne
instrukcije odgovaraju mnoenju podatka u
akumulatoru sa osam.
ADD D; ovom instrukcijom podatak u akumulatoru, koji
odgovara izvornom podatku preneenom iz
memorije pomnoen sa osam, sabiremo sa izvornim
podatkom koji je u registru (D). Ovom instrukcijom
izvorni podatak je pomnoen sa devet.
MOV M,A; pomnoeni podatak sa 18 iz akumulatora prenosimo
u memoriju na istu lokaciju gdje se nalazio prije
obrade.
82 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

23. Zadatak
Napisati program koji broji jedinice jednobajtnog podatka na memorijskoj lokaciji 0900h.
Ukupan broj jedinica poslati na izlazni port sa adresom B0h. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD23
ORG 0020h
LXI H,0900h; 0900h(H,L)
MVI B,00h; 00h(B)
MVI D,08h; 08h(D)
MOV A,M; M(H,L)(A)
L1: RAL
JNC L2
INR B; (B)+1(B)
L2: DCR D; (D)1(D)
JNZ L1
MOV A,B; (B)(A)
OUT B0h
HLT
KOMENTAR ZADATKA
LXI H,0900h; u registarski par (H,L) smjetamo adresu memorijske
lokacije na kojoj se nalazi podatak za obradu.
MVI B,00h; registar (B) koristimo kao broja jedinica u podatku
za obradu.
MVI D,08h; registar (D) koristimo kao kontrolni, pomou koga
znamo koji bit podatka ispitujemo.
MOV A,M; u akumulator prenosimo podatak sa memorijske
lokacije ija je adresa u registarskom paru (H,L).
L1: RAL; rotira podatak u akumulatoru ulijevo preko bita
prenosa, tako da sljedeom instrukcijom uslovnog
skoka provjeravamo da li je bit postavljen. Ako je
CY=1, uveavamo registar (B) za jedan, koji
predstavlja broja jedinica u podatku. Ako je CY=0
izvrava se skok na labelu L2.
L2: DCR D; skokom na labelu L2 umanjujemo registar (D) koji u
ovom programu ima zadatak da broji bite u podatku,
umanjujui ga za jedan poslije svakog obraenog
bita podatka kojeg smo zarotirali u bit prenosa.
JNZ L1; ovom instrukcijom provjeravamo da li je sadraj
registra (D) jednak nuli, tj. da li su obraeni svi biti u
zadanom podatku. Ako rezultat nije nula izvrava se
skok na L1

24. Zadatak
U memoriji mikroraunara nalazi se na adresama 0900h i 0905h dva podatka koji predstavljaju
sedmine zarade radnika. Napisati program koji rauna njihovu sumu i rezultat smjeta na
memorijsku lokaciju 1100h, ako dobijena suma ne zadovoljava uslov: b0 = 0; b1 = b2 = b3 = b4 =
b5 = b6 = b7 = X (X = 0 ili 1). Ako zadovoljava izraunati aritmetiku sredinu sedminih zarada
radnika i rezultat poslati na izlazni port sa adresom B0h. Ukupna suma sedminih zarada je
manja od 255 KM. Poetna adresa programa je 0020h.
7. Zadaci 83

Rjeenje:
NAME ZAD24
ORG 0020h
LXI H, 0900h; 0900h(H,L)
LDA 0905h
ADD M; (A)+M(H,L)(A)
RAR
JNC L1; Uslovni skok, b0=0
RAL
STA 1100h; - nije ispunjen uslov
JMP L2
L1: RAL; - ispunjen uslov
RRC; (/2)
OUT B0h
L2: HLT
KOMENTAR ZADATKA
LXI H,0900h; u registarski par (H,L) smjetamo adresu prvog
podatka.
LDA 0905h; u akumulator pohranjujemo drugi podatak sa
memorijske lokacije 0905h.
ADD M; prvi podatak koji se nalazi memorijskoj lokaciji ija
je adresa u registarskom paru (H,L) dodajemo
drugom podatku u akumulatoru. Ukupna suma nalazi
se u akumulatoru.
RAR; ovom instrukcijom bit najnie pozicije u
akumulatoru prenosimo u bit prenosa.
JNC L1; pomou ove instrukcije uslovnog skoka
provjeravamo da li je zadovoljen postavljeni uslov u
ovom zadatku.
RAL; rotiramo sadraj akumulatora ulijevo, dobija se
prvobitno stanje sadraja (stanje prije izvravanja
instrukcije RAR).
STA 1100h; podatak iz akumulatora direktno smjetamo na
adresu 1100h u memoriji.
L1: RAL; ova instrukcija izvrava se ako nije uslov zadatka
zadovoljen i prelazi se na raunanje aritmetike
sredine i rezultat se alje na izlazni port B0h.

25. Zadatak
Neka A predstavlja vektor koga ini 300 elemenata, od kojih je svaki obima 8-bita, a G=1500h i
H=1900h su adrese memorijskih lokacija u kojima se uvaju promjenljive g i h. Napisati
program koji izraunava izraz:
g=h+(A[8]+A[9])6
Poetna adresa vektora A=A[0]=2600h. Rezultat smjestiti na lokaciju G. Zbir A[8]+A[9] kao i
vrijednost g ne premauju 8-bitnu vrijednost. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD25
ORG 0020h
LXI H,2608h; 2608h(H,L)
84 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

LDA 2609h
ADD M; (A)+M(H,L)(A)
MOV B,A; (A)(B)
RLC
ADD B; (A)+(B)(A)
RLC
LXI H,1900h; 1900h(H,L)
ADD M; (A)+M(H,L)(A)
STA 1500h
HLT
KOMENTAR ZADATKA
LXI H,2608h; u registarski par (H,L) smjetamo adresu vektora
A(8).
LDA 0905h; akumulator direktno punimo vektorom A(9) koji se
nalazi na adresi 2609h.
ADD M; ovom instrukcijom sabiremo vektore A(8) na
M(H,L) i A(9) u akumulatoru.
MOV B,A; rezultat prethodnog zbira iz akumulatora prenosimo
u registar (B), te instrukcijama koje slijede
realizujemo mnoenje tog podatka sa est.
LXI H,1900h; u registarski par (H,L) smjetamo adresu na kojoj se
nalazi promjenjiva h kako bi je dodali akumulatoru.
Instrukcije koje slijede realizuju sabiranje i
smjetanje rezultata na lokaciju G.

26. Zadatak
Napisati program koji vri sabiranje dva viebajtna podatka proizvoljne duine od 1 do 255
bajta. Adrese najniih bajtova ova dva podatka su 0800h i 0B00h, respektivno. Broj koji
pokazuje duinu podataka koji se sabiru nalazi se na lokaciji 07FFh (podaci su iste duine).
Rezultat smjestiti u memoriju poevi od lokacije 0800h (najnii bajt). Ako je rezultat vei od
rezervisanog memorijskog prostora pozvati program ERROR. U suprotnom zaustaviti
izvravanje programa. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD26
ORG 0020h
LXI H, 07FFh; 07FFh(H,L)
MOV B,M; M(H,L)(B)
LXI D,0B00h; 0B00h(D,E)
INX H; (H,L)+1(H,L)
SUB A; (A)=0
STC; CY=1
CMC; CY=0
L1: LDAX D
ADC M; (A)+M(H,L)+CY(A)
MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
INX D; (D,E)+1(D,E)
DCR B; (B)1(B)
JNZ L1
7. Zadaci 85

CZ ERROR; Skok ako je rezultat nula (ne moe stati u rezervisani


prostor).
HLT
KOMENTAR ZADATKA
LXI H,07FFh; u registarski par (H,L) smjetamo adresu na kojoj se
nalazi broj koji pokazuje duinu podatka koji se
sabiru.
MOV B,M; u registar (B) smjetamo podatak koji se nalazi na
M(H,L), tj. broj koji pokazuje duinu podatka.
LXI D,0B00h; u registarski par (D,E) postavljamo adresu najnieg
bajta drugog podatka.
INX H; inkrementiranjem registarskog para (H,L)
postavljamo u njemu adresu najnieg bajta prvog
podatka.
L1: LDAX D; ovom instrukcijom punimo akumulator indirektno
podatkom (bajt drugog podatka) ija je adresa u
registaskom paru (D,E).
ADC M; dodaje podatak sa memorijske lokacije M(H,L) i bit
prenosa akumulatoru.
MOV M,A; rezultat sabiranja koji je u akumulatoru prenosimo u
memoriju poevi od lokacije ija je adresa u
registarskom paru (H,L).

27. Zadatak
Dva dvocifrena BCD podatka su u memoriji na lokacijama 0B00h i 0B01h. Napii program koji
vri njihovo oduzimanje i razliku smjeta na adresu 0B02h. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD27
ORG 0020h
LXI H,0B00h; 0B00h(H,L)
MOV A,M; M(H,L)(A)
INX H; (H,L)+1(H,L)
MOV B,M; M(H,L)(B)
SUB B; (A)(B)(A)
DAA
STA 0B02h
HLT
KOMENTAR ZADATKA
LXI H,0B00h; u registarski par (H,L) smjetamo adresu prvog BCD
podatka.
MOV A,M; prenosimo prvi BCD podatak u akumulator.
INX H; Sadraj registarskog para (H,L) uveavamo za jedan,
tj. smjetamo adresu drugog BCD podatka.
MOV B,M; prenosimo drugi BCD podatak u registar (B).
SUB B; ovom instrukcijom realizujemo oduzimanje podatka
u registru (B) od podatka u akumulatoru.
DAA; sadraj akumulatora podeavamo u BCD obliku, tj.
rezultat oduzimanja.
86 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

STA 0B02h; dobijeni rezultat je podatak BCD pakovanog tipa


koga iz akumulatora smjetamo direktno na
navedenu adresu u memoriji.

28. Zadatak
U memoriji mikroraunara je niz podataka poev od adrese 0400h, podatak o broju podataka
nalazi se na adresi 0A00h. Meu datim podacima pronai najvei i smjestiti ga na lokaciju
0C00h. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD28
ORG 0020h
LXI D,0400h; 0400h(D,E)
LXI H,0A00h; 0A00h(H,L)
MOV B,M; M(H,L)(B)
XCHG; (D,E)(H,L)
L1: MOV A,M; M(H,L)(A)
STA 0C00h
L2: DCR B; (B)1(B)
JZ L3
INX H; (H,L)+1(H,L)
CMP M; (A)M(H,L)
JC L1
JMP L2
L3: HLT
KOMENTAR ZADATKA
LXI D,0B00h; u registarski par (D,E) smjetamo poetnu adresu
niza podataka.
LXI H,0A00h; u registarski par (H,L) smjetamo adresu na kojoj se
nalazi podatak, tj. broj elemenata niza.
MOV B,M; u registar (B) prenosimo informaciju o broju
podataka za obradu.
XCHG; sadraj registarskih parova (H,L) i (D,E) mjenjaju se
meusobno, jer nam treba podatak u registarskom
paru (D,E) koji odreuje poetnu adresu niza
podataka u memoriji. Ovom instrukcijom poetna
adresa je u registarskom paru (H,L) i koristimo
M(H,L).
L1: MOV A,M; ovom instrukcijom u akumulator prenosimo podatke
iz niza ije su adrese u registarskom paru (H,L).
STA 0C00h; pohranjujemo tj. smjetamo najvei podatak u
pretraenom nizu direktno na adresu 0C00h.
L2: DCR B; broja elemenata niza umanjujemo nakon svakog
obraenog podatka, tj. provjeravamo da li je broja
na nuli. Ako nije uzimamo sljedei podatak iz niza i
poredimo ga sa trenutno najveim podatkom i ako je
CY=1 vei je od podatka u akumulatoru i imamo
skok na L1, suprotno uzimamo novi podatak iz niza
odlazei na L2.
7. Zadaci 87

29. Zadatak
Napisati program koji vri brisanje 50 uzastopnih memorijskih lokacija poev od lokacije
0A00h, potom sa ulaznog porta uitati niz od 50 jednobajtnih podataka. Adresa ulaznog potra je
A0h. Svaki podatak logiki pomnoi sa 35 a od dobijenih rezultata formirati niz poev od
memorijske lokacije 0A00h. Poetna adresa programa je 0020h.
Rjeenje:
NAME ZAD29
ORG 0020h
LXI H,0A00h; 0A00h(H,L)
LXI D,0A00h; 0A00h(D,E)
MVI B,32h; 32h(B)
SUB A (A)=0
L1: MOV M,A; (A)M(H,L)
INX H; (H,L)+1(H,L)
DCR B; (B)1(B)
JNZ L1
MVI B,32h; 32h(B)
L2: IN A0h
ANI 23h; (A)23h(A)
STAX D
INX D; (D,E)+1(D,E)
DCR B; (B)1(B)
JNZ L2
HLT
KOMENTAR ZADATKA
LXI H,0A00h; u registarski par (H,L) smjetamo poetnu adresu
memorijske lokacije od koje vrimo brisanje.
LXI D,0A00h; u registarski par (D,E) smjetamo adresu od koje
formiramo novi od 50 jednobajtnih podataka.
MVI B,32h; u registar (B) prenosimo 32h=5010.
L1: MOV M,A; ovom instrukcijom briemo memorijske lokacije ije
su adrese u registarskom paru (H,L), jer na te
lokacije prenosimo sadraj akumulatora koji je
prethodnom instrukcijom ist.
JNZ L1; imamo skok na L1 sve dok ne obriemo svih 50
lokacija.
L2: IN A0h; uitavamo podatke sa ulaznog porta u akumulator.
ANI 23h; uitani podatak koji se nalazi u akumulatoru logiki
mnoimo sa 23h=3510.
STAX D; rezultat mnoenja smjetamo na lokaciju ija je
adresa u registarskom paru (D,E). Instrukcijama koje
slijede poslije ove, postavljamo sljedeu lokaciju i
provjeravamo da li su obraeni svi podaci, ako nisu
odlazimo na labelu L2.
88 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

30. Zadatak
U memoriji mikroprocesora Intel 8085 na lokacijama sa adresama 0900h i 0905h nalaze se dva
binarna podatka. Pomnoi ih i rezultat smjesti na lokaciju sa adresama 0902h (nii bajt
proizvoda). Poetna adresa programa je 0080h.
Rjeenje:
NAME ZAD30
ORG 0080h
LXI H,0900h; 0900h(H,L)
MOV B,M; M(H,L)(B)
LXI H,0905h; 0905h(H,L)
MOV A,M; M(H,L)(A)
MOV C,A; (A)(C)
MVI E,00h; 00h(E)
STC; CY=1
CMC; CY=0
L1: MOV A,E; (E)(A)
ADC C; (A)+(C)+CY(A)
MOV E,A; (A)(E)
JC L3
L2: DCR B; (B)1(B)
JNZ L1
XCHG; (D,E)(H,L)
SHLD 0902h
END
L3: INR D; (D)+1(D)
JMP L2
NAPOMENA
Drugi broj sabiramo sa samim sobom onoliko puta, u zavisnosti od prvog broja. Rezultat
mnoenja smjetamo u registarski par (D,E), tako da u registar (E) stavljamo rezultat, a u
registar (D) bit prenosa.
KOMENTAR ZADATKA
LXI H,0900h; u registarski par (H,L) postavljamo adresu prvog
podatka.
MOV B,M; u registar (B) prenosimo podatak sa memorijske
lokacije M(H,L), tj. prvi broj. Kao to smo rekli u
napomeni prvi broj u registru (B) koristiemo kao
broja jer drugi broj sabiremo sa samim sobom
onoliko puta kolika je vrijednost ovog broja.
LXI H,0905h; u registarski par (H,L) postavljamo adresu drugog
podatka.
MOV A,M; u akumulator prenosimo podatak sa memorijske
lokacije M(H,L), tj. drugi broj.
MOV C,A; drugi broj prenosimo u registar (C).
MVI E,00h; registar (E) punimo sa 00h i on e nam sluiti za
smjetanje rezultata.
L1: MOV A,E; prenosimo u akumulator trenutni rezultat iz registra
(E).
7. Zadaci 89

ADC C; dodajemo registar (C) i bit prenosa akumulatoru, tj.


sabiremo drugi broj koji je u registru (C) i bit
prenosa sa prethodnim rezultatom koji se nalazi u
akumulatoru.
MOV E,A; rezultat prethodnog sabiranja prenosimo u registar
(E).
JC L3; ovom instrukcijom uslovnog skoka provjeravamo da
li je u prethodnom rezultatu postavljen bit prenosa,
tj. ako je CY=1 tada odlazimo na labelu L3 i
inkrementiramo registar (D) koji predstavlja vii bajt
rezultata mnoenja.
L2: DCR B; umanjujemo registar (B) za jedan poslije svakog
sabiranja sa samim sobom to nam omoguava da
provjerimo da li smo zavrili operaciju mnoenja. U
registru (B) nalazi se prvi broj.
JNZ L1; odlazimo na labelu L1 sve dok sadraj registra (B)
ne bude 00h, suprotno zavrili smo sa sabiranjem, tj.
mnoenjem i smjetamo dobijeni rezultat.
XCHG; rezultat mnoenja nalazi se u registarskom paru
(D,E), a da bi taj rezultat smjestili na odreenu
memorijsku lokaciju moramo ga prebaciti u
registarski par (H,L).
SHLD 0902h; pohranjujemo sadraj registarskog para (H,L)
direktno na memorijsku lokaciju 0902h.

31. Zadatak
Napisati program koji vri preuzimanje podataka sa ulaznog porta ija je adresa A0h, i formira
niz u memoriji od preuzetih podataka. Poetna adresa niza podataka u memoriji treba biti 0800h.
Sa preuzimanjem podataka sa ulaznog porta treba prestati kada se pojavi podatak FFh. Program
treba da poinje od adrese 0B00h. Podatak o broju elemenata niza smjestiti na adresu1000h u
memoriji.
Rjeenje:
NAME ZAD31
ORG 0B00H
LXI H, 0800H; 0800H(H,L)
MVI C,00H; 00H(C)
L1: IN A0H;
MOV M, A; M(H,L) A
INX H; (H,L)+1(H,L)
INR C; (C) +1(C)
CPI FFH; (A)-FFH(A)
JNZ L1;
HLT;
END;
KOMENTAR ZADATKA
LXI H, 0800H; registarski par (H,L) punimo neposredno sa 0800h,
to predstavlja poetnu adresu prvog podatka.
MVI C, 00H; registar (C) koristimo kao broja podataka koji
dolaze na port A0H
90 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

IN A0H; ulazna instrukcija, podaci se smjetaju sa ulaznog


porta u akumulator
MOV M;A; podatak koji dolazi sa ulaznog porta smjeta se u
akumulator, ovom instrukcijom isti podatak iz
akumulatora prenosimo u memoriju na lokaciju ija
je adresa u registarskom paru (H,L).
INX H; sadraj registarskog para (H,L) uveavamo za
jedan,tj prelazimo na sledeu adresu
INR C; uveavamo broja podataka za jedan
CPI FFH; poredimo sa akumulatorom neposredno FFh ((A)
FFh), tj. provjeravamo da li se pojavio podatak FFh
kada treba prestati sa itanjem podataka sa porta
JNZ L1; uslovni skok na memorijsku lokaciju oznaenu
labelom L1, ako vrijednost dobijena poreenjem iz
prethodne instrukcije nije jednaka nuli tj. ako se nije
pojavio podatak FFH.

32. Zadatak
Data su dva pakovana etvorocifrena NBCD broja X i Y. Ova dva broja se nalaze na
memorijskim lokacijama ije su adrese 0800h i 0810h (nii bajt podatka), respektivno. Napisati
program koji sabira ova dva broja, a rezultat smjeta na mjesto podatka X.
Rjeenje:
NAME ZAD32
ORG 0000H
LXI H, 0800H; 0800H(H,L)
LXI D, 0810H; 0810H(D,E)
LDAX D;
ADD M; A+M(H,L)A
DAA;
MOV M, A; AM(H,L)
INX H; (H,L)+1(H,L)
INX D; (D,E)+1(D,E)
LDAX D;
ADC M;
DAA;
MOV M,A; AM(H,L)
HLT;
END;
KOMENTAR ZADATKA
LXI H, 0800H; registarski par (H,L) punimo neposredno sa 0800h,
to predstavlja adresu nieg bajta podatka za broj X
LXI D, 0810H; registarski par (D,E) punimo neposredno sa 0810h,
to predstavlja adresu nieg bajta podatka za broj Y
LDAX D; uitavamo nii bajt Y koji je odreen registarskim
parom (D,E) u Akumulator
ADD M; dodajemo sadraju Akumulatora nii bajt X koji je
odreen registarskim parom (H,L)
DAA; vrimo decimalno podeavanje sadraja
Akumulatora
MOV M, A; smjetamo rezultat na mjesto podatka X
7. Zadaci 91

INX H; prelazimo na vii bajt podatka X


INX D; prelazimo na vii bajt podatka Y
LDAX D; uitavamo vii bajt Y u Akumulator
ADC M; dodajemo sadraju Akulumator vii bajt X sa
prenosom
MOV M,A; smjetamo dobijeni rezultat na mjesto podatka X

33. Zadatak
Nai najvei broj u nizu podataka koji je smjeten poevi od adrese 0800h. Podaci su
predstavljeni kao cjelobrojni, neoznaeni brojevi duine jednog bajta. Podatak o broju elemenata
ovog niza nalazi se na memorijskoj lokaciji ija je adresa 0A00h. Program treba da poinje od
adrese 0B00h.
Rjeenje:
NAME ZAD33
ORG 0B00H
LXI H, 0800H; 0800H(H,L)
LDA 0A00H; 0A00H(A)
MOV C, A; (A) (C)
L1: MOV A, M; M(H,L) (A)
L2: DCR C; (C)-1(C)
JZ L3;
INX H; (H,L)+1(H,L)
CMP M; (A)-M(H,L)
JC L1;
JMP L2;
L3: NOP;
HLT;
END;
KOMENTAR ZADATKA
LXI H, 0800H; registarski par (H,L) punimo neposredno sa 0800h,
to predstavlja poetnu adresa od koje su smjeteni
elementi niza
LDA 0A00H; smjetamo u Akulumator podatak o broju elemenata
niza,
MOV C, A; zatim taj podatak kopiramo u registar (C) koji nam
slui kao broja
MOV A, M; akumulator nam slui za uvanje maksimalnog
elementa niza
DCR C; umanjujemo broja
JZ L3; ukoliko je nula zavravamo program
INX H; ukoliko broja nije nula prelazimo na sljedei
element niza
CMP M; poredi se podatak na memorijskoj lokaciji odreenoj
registarskim parom (H,L) sa sadrajem akumulatora
u kome je trenutno najvei broj.
JC L1; ukoliko je podatak na adresi M(H,L) vei od (A)
pojavie se prenos i taj podataka postavljamo ka
maksimalni elemenat
JMP L2; ako podatak nije veci prelazimo na sledeci elemenat
niza.
92 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

34. Zadatak
Niz od 300 ASCII podataka smjeten je u memoriji poevi od adrese 0200h. Napisati program
koji iz ovog niza izdvaja cifre, a zatim ih konvertuje u binarni oblik i alje na izlazni port sa
adresom 20h. Kodovi za cifre u ASCII kodu su u opsegu 30h 39h. Program treba da poinje od
adrese 1000h.
Rjeenje:
NAME ZAD34
ORG 1000H
LXI H, 0200H; 0200H(H,L)
LXI B, 012CH; 012CH(B,C)
L0: MOV A, M; M(H,L) (A)
CPI 30H; (A)30H(A)
JC L1;
CPI 40H; (A)40H(A)
JNC L1;
SUI 30H; (A)-30H(A)
OUT 20H; (A) 20H
L1: INX H; (H,L)+1(H,L)
DCX B; (B,C) (B,C)
MOV A,C; (C) (A)
ORA B; (A)+(B) (A)
JNZ L0;
HLT;
END;
KOMENTAR ZADATKA
LXI H, 0200H; registarski par (H,L) punimo neposredno sa 0200h,
to predstavlja poetnu adresa od koje su smjeteni
elementi niza
LXI B, 012CH; registarski par (B,C) punimo neposredno sa 012Ch,
inicijalizujemo broja tj registarski par (B,C)
koristiemo kaok broja
MOV A, M; prebacujemo elemenat niza ija je adrsa u memoriji
odreena registarskim parom (H,L) u Akumulator
CPI 30H; ispitujemo da li je element manji od 30H
JC L1; ukoliko je elemenat manji preskacemo taj elemenat
CPI 40H; ispistujemo da li je elemenat veci od je vei od 39H
JNC L1; ako je vei od 39H preskaemo ga jer nije cifra
SUI 30H; ukoliko element jeste cifra pretvaramo ga u binarni
oblik
OUT 20H; aljemo elemenat niza na izlazni port sa adresom 20H
INX H; poveavamo registarski par (H,L) za 1 i prelazimo
na sljedei element niza u memoriji
DCX B; registarski par (B,C) smanjujemo za 1, tj broja
smanjujemo za jedan
JNZ L0; ispitujemo da li je zadnji elemenat niza ako jeste
zavravamo program ako nije prelazimo na sledei
elemnat
7. Zadaci 93

35. Zadatak
U memoriji mikroraunara, poevi od lokacije 1000h, nalazi se niz od 100 dvobajtnih podataka.
Napisati program koji u zadanom nizu pronalazi elemente koji imaju osobinu da im je vii bajt
dva puta vei od nieg bajta. Takve elemente smjestiti u memoriju poevi od lokacije2000h, a
podatak o veliini novog niza upisati na lokaciju 3000h. Pretpostaviti da se na nioj adresi nalazi
vii bajt podatka.
Rjeenje:
NAME ZAD35
ORG 0000H
LXI H, 1000H; 1000H(H,L)
LXI D, 2000H; 2000H(D,E)
MVI C, 64H; 64H(C)
MVI B, 00H; 00H(B)
L1: MOV A, M; M(H,L) (A)
STC; CY=1
CMC; CY=0
RAR;
INX H; (H,L)+1 (H,L)
CMP M; (A)-M(H,L)
JNZ L0;
DCX H; (H,L)-1 (H,L)
MOV A, M; M(H,L) (A)
STAX D;
INX H; (H,L)+1 (H,L)
INX D; (D,E)+1 (D,E)
MOV A, M; M(H,L) (A)
STAX D;
INR B; (B)+1(B)
INX D; (D,E)+1 (D,E)
L0: INX H; (H,L)+1 (H,L)
DCR C; (C)-1(C)
JNZ L1;
MOV A, B; (B)(A)
STA 3000H;
HLT;
END;
KOMENTAR ZADATKA
LXI H, 1000H; registarski par (H,L) punimo neposredno sa 1000h,
to predstavlja poetnu adresa od koje su smjeteni
elementi niza
LXI D, 2000H; registarski par (D,E) punimo neposredno sa 2000h,
to predstavlja poetnu adresa niza koji treba da
formiramo
MVI C, 64H; registar (C) punimo sa 64h(100) to predstavlja broj
elemenata, pa registar (C) koristimo kao broja
MVI B, 00H; registar (B) punio sa 00h inicijalizacija brojaa
elemenata novoformiranog niza
MOV A, M; kopiramo vii bajt podatka u akumulator
94 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

STC; resetujemo bit prenosa da bi mogli izvriti operaciju


CMC; iftovanja pomou instrukcije rotiranja (RAR) preko
RAR; bita prenosa da bi izvrili dijeljenje sa 2
INX H; kada smo vii bajt podijelili sa dva vrimo poreenje
CMP M; sa niim bajtom podatka
JNZ L0; ukoliko nisu jednaki prelazimo na sljedei element
niza
DCX H; ukoliko su jednaki vraamo se na vii bajt
MOV A, M; kopiramo vii bajt u Akumulator
STAX D; zatim pohranjujemo na lokaciju novog niza odreenu
sa (D, E)
INX H; prelazimo na nii bajt sledeeg elementa (sljedea
INX D; adresa) i kopiramo ga na odgovarajuu lokaciju u
MOV A, M; novom nizu
STAX D;
INR B; inkrementiramo broja elemenata novog niza
INX D; prelazimo na sljedei element novog niza
INX H; prelazimo na vii bajt sljedeeg elementa
DCR C; umanjujemo broja elemenata zadanog niza
JNZ L1; ukoliko nije nula ispitujemo sljedei element
MOV A, B; ukoliko je nula onda pohranjujemo sadrajbrojaa B
STA 3000H; (broj elemenata novog niza) na lokaciju 3000 H
HLT; i zaustavljamo izvravanje programa

36. Zadatak
Zadan je niz od 100 elemenata koji se nalaze u memoriji poevi od adrese 0900h. Podaci su
predstavljeni kao cijeli brojevi bez znaka. Napisati program koji izraunava vrijednost izraza
MAX/2, gdje je MAX najvei broj u nizu. Rezultat treba poslati na izlazni port sa adresom 23h.
Program treba da poinje od adrese 0B00h.
Rjeenje:
NAME ZAD36
ORG 0B00H
LXI H, 0900H; 0900H(H,L)
MVI C, 64H; 64H(C)
L0: MOV A, M; M(H,L) (A)
L1: DCR C; (C)-1(C)
JZ L3;
INX H; (H,L)+1(H,L)
CMP M; (A)-M(H,L)
JC L0;
JMP L1;
L3: STC; CY=1
CMC; CY=0
RAR;
OUT 23H; (A) 20H
HLT;
END;
KOMENTAR ZADATKA
LXI H, 0900H; registarski par (H,L) punimo neposredno sa
0900h,to predstavlja poetna adresa niza
7. Zadaci 95

MVI C, 64H; registar (C) punimo sa 64h(100) to predstavlja broj


elemenata, pa registar (C) koristimo kao broja
MOV A, M; u akumulatoru uvamo trenutno najvei element niza
DCR C; umanjujemo broja
JZ L3; ukoliko je nula zavravamo program
INX H; ukoliko nije nula prelazimo na sljedei element niza
CMP M; poredimo ga sa sadrajem akumulatora
JC L0; ukoliko je vei auriramo sadraj akumulatora
JMP L1; ukoliko nije prelazimo na sljedei element niza
STC; kada proemo sve elemente niza ;izvrimo dijeljenje
CMC; maksimalnog elementa sa 2 tako to ga
RAR; pomereimo za jednu poziciju udesno
OUT 23H; rezultat smjetamo na izlazni port ija je adresa 23H

37. Zadatak
U registarskom paru (B, C) mikroprocesora 8085 smjeteni su elementi x1 i y1, a u paru (D, E)
elementi x2 i y2. Pri tome, (x1, y1) predstavlja koordinatu donje lijeve, a (x2, y2) koordinatugornje
desne take jednog pravougaonika. Napisati program koji izraunava povrinu (P)
pravougaonika, smatrajui da su stranice pravougaonika paralelne sa koordinatnim
sama.Povrina pravougaonika je jednaka proizvodu duina stranica tog pravougaonika, tj.
P=ab. Duine stranica su odreene koordinatama pravougaonika, a=x2 x1 i b=y2 y1. Ovo je
prikazano na slici.1.
Rjeenje:
NAME ZAD37
ORG 0000H
MOV A, D; (D) (A)
SUB B; (A)-(B) (A)
MOV B, A; (A) (B)
MOV A, E; (E) (A)
SUB C; (A)-(C) (A)
MOV D, A; (A) (D)
MVI C, 00H; 00H(C)
MVI A, 00H; 00H(A)
STC; CY=1
CMC; CY=0
L0: ADD D; (A)+(D) (A)
JNC L1;
INR C; (C)+1(C)
L1: DCR B; (B)-1(B)
JNZ L0;
MOV B, A; (A) (B)
HLT;
END;
KOMENTAR ZADATKA
MOV A, D;
SUB B; izraunavamo duinu stranice a
MOV B, A; i rezultat smjetamo u registar B

MOV A, E;
SUB C; izraunavamo duinu stranice b
96 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

MOV D, A; i rezultat smjetamo u registar D

MVI C, 00H; resetujemo registar C


MVI A, 00H; resetujemo Akumulator

STC; resetujemo i bit prenosa da ne bi sluajno ostao


CMC; setovan

ADD D;
JNC L1; formiramo petlju koja obavlja mnoenje dva 8-bitna
INR C; broja pri emu uzimamo u obzir eventualni prenos
DCR B;
JNZ L0;

MOV B, A; na kraju 16-bitni rezultat smjetamo u par (B, C)


HLT; zavravamo izvrenje programa

38. Zadatak
Dat je niz od 100 cjelobrojnih neoznaenih brojeva koji se nalaze u memoriji poevi od adrese
0800h. Napisati program koji iz tog niza izdvaja parne brojeve i smjeta ih u novi niz u memoriji
poevi od adrese 0B00h. Podatak o veliini novog niza treba poslati na izlazni port sa adresom
33h. Program treba da poinje od adrese 0100h. Kod parnih brojeva bit na najnioj poziciji je
jednak 0, dok je kod neparnih jednak 1. Ispitivanjem najnieg bita elemenata niza moemo da
utvrdimo da li se radi o parnom ili neparnom broju.Ispitivanje vrijednosti ovog bita moemo da
vrimo rotacijom preko bita prenosa (RAR),
Rjeenje:
NAME ZAD38
ORG 0100H
LXI H, 0800H; 0800H(H,L)
LXI D, 0B00H; 0B00H(D,E)
MVI C, 64H; 64H(C)
MVI B, 00H; 00H(C)
L0: MOV A, M; M(H,L) (A)
STC; CY=1
CMC; CY=0
RAR;
JC L1;
RAL;
STAX D;
INR B; (B)+1(B)
INX D; (D,E)+1(D,E)
L1: INX H; (H,L)+1(H,L)
DCR C; (C)-1(C)
JNZ L0;
MOV A, B; (B) (A)
OUT 33H;
HLT;
END;
7. Zadaci 97

KOMENTAR ZADATKA
LXI H, 0800H; registarski par (H,L) punimo neposredno sa
0800h,to predstavlja poetnu adresa niza
LXI D, 0B00H; registarski par (D,E) punimo neposredno sa
0B00h,to predstavlja poetna adresa niza kojeg
trabamo da formiramo
MVI C, 64H; inicijalizacija brojaa elemenata zadanog niza tj
registar (C) koristimo kao broja
MVI B, 00H; inicijalizacija brojaa elemenata novog niza tj
registar (B) koristimo kao broja elemenata novog
niza
MOV A, M; kopiramo elemenat niza u Akumulator
STC; resetujemo bit prenosa
CMC;
RAR; izvrimo rotiranje preko bita prenosa tj ispitujemo da
li je broj paran ili neparan
JC L1; ako je broj neparan prelazimo na sledei elemenat
niza
RAL; ako je paran vraamo mu stvarnu vrijednost
STAX D; smjetamo podatak u novi niz ija je adresa odreena
registarskim parom (D,E)
INR B; inkrementiramo broja elemenata novog niza
INX D; prelazimo na novu lokaciju novog niza
INX H; prelazimo na sljedei element zadanog niza
DCR C; umanjujemo broja elemenata zadanog niza
JNZ L0; ukoliko broja nije nula ispitujemo sljedei element
MOV A, B; u Akumulator prebacujemo broj elemenata novog
niza
OUT 33H; i taj podatak aljemo na port sa adresom 33H
HLT; zavravamo program

39. Zadatak
U memoriji mikroraunara nalazi se niz od 400 binarnih podataka poev od adrese 0200h.
Napisati program koji modifikuje podatke po principu B0-B7, B1-B6, B2-B5, B3-B4, a zatim ih
smjeta na nove lokacije poev od adrese 0500h.
Rjeenje:
NAME ZAD39
ORG 0020h
LXI D, 0190h; 0190h(D,E)
LXI H, 0200h; 0200h(H,L)
L1: MOV B,M; M(H,L) (B)
MOV A,M; M(H,L) (A)
ANI AAh; (A)AAh
RRC;
MOV C,A; (A)(C)
MOV A,B; (B)(A)
ANI 55h; (A)55h
RLC;
ADD C; (A)+(C) (A)
MOV B,A; (A) (B)
98 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

ANI CCh; (A)CCh


RLC;
RLC;
MOV C,A; (A) (C)
MOV A,B; (B) (A)
ANI 33h; (A)33h
RLC;
RLC;
ADD C; (A)+(C) (A)
MOV B,A; (A) (B)
ANI F0h; (A)33h
RRC;
RRC;
RRC;
RRC;
MOV C,A; (A) (C)
MOV A,B; (B) (A)
ANI 0Fh; (A)0Fh
RLC;
RLC;
RLC;
RLC;
ADD C; (A)+(C) (A)
MOV M,A; A M(H,L)
INX H; (H,L)+1(H,L)
DCX D; (D,E)-1(D,E)
MOV A,D; (D) (A)
ORA E; (A)+E
JNZ L1;
LXI B,0500h; 0500h(B,C)
L2: MOV A,M; M(H,L)(A)
STAX B;
INX B; (B,C)+1(B,C)
DCX H; (H,L)-1(H,L)
MOV A,M; M(H,L)(A)
CPI 02h; A-02H(A)
JNZ L2;
HLT;
8. PREDISPITNI TEST
100 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

8.1. Izvriti operacije sabiranja i oduzimanja decimalnih brojeva u binarnom brojnom sistemu:
a) x+y x=52 y=23
b) x-y x=83 y=35
Rezultate provjeriti u decimalnom brojnom sistemu.

8.2. Izvriti operacije sabiranja i oduzimanja u oktalnom brojnom sistemu:


a) x+y x=23456 y=34567
b) x-y x=34567 y=23456
Rezultate provjeriti u decimalnom brojnom sistemu.
8. Predispitni test 101

8.3. Izvriti operacije sabiranja i oduzimanja u heksadecimalnom brojnom sistemu:


a) x+y x=56789 y=ABCDE
b) x-y x=ABCDE y=56789
Rezultate provjeriti u decimalnom brojnom sistemu.

8.4. Koji su decimalni brojevi predstavljeni datim brojevima u binarnom brojnom sistemu:
a) 111010011
b) 111.01101
c) 10.0011
102 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

8.5. Koji su decimalni brojevi predstavljeni datim brojevima u oktalnom brojnom sistemu:
a) 12345
b) 0.246
c) 24.135

8.6. Koji su decimalni brojevi predstavljeni datim brojevima u oktalnom brojnom sistemu:
a) ABCDE
b) 0.BD8
c) 2A4.C8
8. Predispitni test 103

8.7. Izraziti zadate decimalne brojeve u binarnom brojnom sistemu:


a) 345
b) 105.6875
c) 0.13 (tanost 2-9)
104 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

8.8. Izraziti zadate decimalne brojeve u oktalnom brojnom sistemu:


a) 345
b) 155.4375
c) 0.45 (Napomena: crta iznad oznaava periodino ponavljanje)
8. Predispitni test 105

8.9. Izraziti zadate decimalne brojeve u heksadecimalnom brojnom sistemu:


a) 369
b) 13355.125
c)0.3 (Napomena: crta iznad oznaava periodino ponavljanje)
106 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

8.10. Prevesti zadate brojeve iz brojnog sistema sa osnovom x u brojni sistem sa osnovom y:
a) 10110110011.11011 x=2 y=8
b) 10001100111.101011 x=2 y=16
c) 643.742 x=8 y=2
d) AB3.CD2 x=16 y=2
e) 4DA.62 x=16 y=82
8. Predispitni test 107

8.11. Predstaviti -3310 kao 8-bitni binarni broj koristei:


a) bit znaka i apsolutnu vrijednost
b) prvi komplement (nepotpuni komplement)
c) drugi komplement (potpuni komplement)

8.12. Izraziti brojne vrijednosti 135 i -10 kao 8-bitne binarne brojeve u obliku drugog
(potpunog) komplementa. Koristei dobijene rezultate prikazati razliku 135-10 u obliku 8-bitnog
zapisa.
108 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

8.13. Predstaviti decimalni broj 23.167 u sledeim BCD kodovima:


a) 8421 (NBCD)
b) 2421 (Ajkenov)
c) vie 3 (XS3)
d) Grej

8.14. Dati su BCD brojevi:


a) 100011101.1000111 u kodu 8421
b) 111011101.0101001 u kodu vie 3
Napisati ove brojeve u decimalnom brojnom sistemu.
8. Predispitni test 109

8.15. Pretvoriti binarni broj 0111001010101 u Grejov broj.

8.16. Pretvoriti Grejov broj 0111001010101 u ekvivalentni binarni broj.


110 Praktikum za auditorne vjebe iz mikroprocesorskih sistema
A. PRILOG
112 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

A.1. INSTRUKCIJSKI SET ZA MIKROPROCESOR INTEL 8085


MOVE, LOAD, STORE INSTRUKCIJE UPISIVANJA I ITANJA
MOV r1,r2 napuniti registar iz registra
MOV M,r napuniti memoriju iz registra
MOV r,M napuniti registar iz memorije
MVI r napuniti registar neposredno
MVI M napuniti memoriju neposredno
LXI B registarski par (B,C) napuniti neposredno
LXI D registarski par (D,E) napuniti neposredno
LXI B registarski par (H,L) napuniti neposredno
STAX B pohraniti sadraj akumulatora indirektno
STAX D pohraniti sadraj akumulatora indirektno
LDAX B napuniti akumulator indirektno
LDAX D napuniti akumulator indirektno
STA pohraniti sadraj akumulatora direktno
LDA napunti sadraj akumulatora direktno
SHLD pohraniti sadraj (H,L) direktno
LHLD napuniti (H,L) direktno
XCHG zamijeniti sadraj (D,E) i (H,L)
STACK INSTRUKCIJE ZA MANIPULACIJU STEKOM
PUSH B registarski par (B,C) pohraniti na stek
PUSH D registarski par (D,E) pohraniti na stek
PUSH H registarski par (H,L) pohraniti na stek
PUSH PSW pohraniti akumulator i bite stanja na stek
POP B napuniti registarski par (B,C) sa steka
POP D napuniti registarski par (D,E) sa steka
POP H napuniti registarski par (H,L) sa steka
POP PSW napuniti akumulator i bite stanja na stek
XTHL zamijeniti (H,L) i vrh steka
SPHL prenijeti sadraj (H,L) u SP
LXI SP napuniti neposredno SP
INX SP inkrementirati SP
DCX SP dekrementirati SP
JUMP INSTRUKCIJE UPRAVLJANJA TOKOM IZVRAVANJA PROGRAMA
JMP bezuslovni skok
JC skok ako postoji prenos
JNC skok ako ne postoji prenos
JZ skok ako je rezultat nula
JNZ skok ako rezultat nije nula
JP skok ako je rezultat pozitivan
JM skok ako je rezultat negativan
JPE skok ako postoji parnost
JPO skok ako ne postoji parnost
PCHL (H,L) u programski broja
CALL INSTRUKCIJE ZA POZIV POTPROGRAMA
CALL bezuslovni poziv
CC poziv ako postoji prenos
CNC poziv ako ne postoji prenos

112
A. Prilog 113

CZ poziv ako je rezultat nula


CNZ poziv ako rezultat nije nula
CP poziv ako je rezultat pozitivan
CM poziv ako je rezultat negativan
CPE poziv ako postoji parnost
CPO poziv ako ne postoji parnost
RETURN INSTRUKCIJE ZA POVRATAK IZ POTPROGRAMA
RET povratak
RC povratak ako postoji prenos
RNC povratak ako ne postoji prenos
RZ povratak ako je rezultat nula
RNZ povratak ako rezultat nije nula
RP povratak ako je rezultat pozitivan
RM povratak ako je rezultat negativan
RPE povratak ako postoji parnost
RPO povratak ako ne postoji parnost
RESTART
RST restart
INCREMENT, DECREMENT ARITMETIKE OPERACIJE
INR r inkrementirati registar
DCR r dekrementirati registar
INR M inkrementirati memorijsku lokaciju
DCR M dekrementirati memorijsku lokaciju
INX B inkrementirati registarski par (B,C)
INX D inkrementirati registarski par (D,E)
INX H inkrementirati registarski par (H,L)
DCX B dekrementirati registarski par (B,C)
DCX D dekrementirati registarski par (D,E)
DCX H dekrementirati registarski par (H,L)
ADD SABIRANJE
ADD r dodati registar akumulatoru
ADC r dodati registar i bit prenosa akumulatoru
ADD M dodati memorijsku lokaciju akumulatoru
ADC M dodati memorijsku lokaciju i bit prenosa
akumulatoru
ADI dodati akumulatoru neposredno
ACI zajedno s bitom prenosa dodati akumulatoru
neposredno
DAD B dodati (B,C) u (H,L)
DAD D dodati (D,E) u (H,L)
DAD H dodati (H,L) u (H,L)
DAD SP dodati SP u (H,L)
SUBSTRACT ODUZIMANJE
SUB r oduzeti registar od akumulatora
SBB r oduzeti registar i posudbu od akumulatora
SUB M oduzeti memorijsku lokaciju od akumulatora

113
114 Praktikum za auditorne vjebe iz mikroprocesorskih sistema

SBB M oduzeti memorijsku lokaciju i posudbu od


akumulatora
SUI oduzeti od akumulatora neposredno
SBI zajedno s posudbom oduzeti od akumulatora
neposredno
LOGICAL LOGIKE OPERACIJE
ANA r logiko I akumulatora i registra
XRA r EXILI akumulatora i registra
ORA r logiko ILI akumulatora i registra
CMP r poreenje registra s akumulatorom
ANA M logiko I memorijske lokacije i akumulatora
XRA M EXILI memorijske lokacije i akumulatora
ORA M logiko ILI memorijske lokacije i akumulatora
CMP M poreenje memorijske lokacije s akumulatorom
ANI logiko I s akumulatora neposredno
XRI EXILI s akumulatora neposredno
ORI logiko ILI s akumulatora neposredno
CPI poreenje s akumulatora neposredno
ROTATE INSTRUKCIJE ZA ROTIRANJE AKUMULATORA
RLC rotiraj akumulator ulijevo
RRC rotiraj akumulator udesno
RAL rotiraj akumulator ulijevo preko bita prenosa
RAR rotiraj akumulator udesno preko bita prenosa
SPECIALS SPECIJALNE INSTRUKCIJE
CMA komplementirati akumulator
STC postaviti bit prenosa
CMC komplementirati bit prenosa
DAA decimalno podeavanje akumulatora
INPUT, OUTPUT ULAZNO IZLAZNE INSTRUKCIJE
IN ulaz
OUT izlaz
CONTROL KONTROLNE INSTRUKCIJE
EI omoguiti prekid
DI onemoguiti prekid
NOP nema operacije
HLT zaustavljanje
NEW 8085 INSTRUCTIONS NOVE 8085 INSTRUKCIJE
RIM oitavanje maske prekida
SIM postavljanje maske prekida

114
LITERATURA
[1] M. Stojev, RISC, CISC i DSP procesori, Elektronski fakultet Ni, 1997.
[2] M. Stojev, Savremeni 16-bitni mikroprocesori II, Nauna knjiga, Beograd,
august 1999.
[3] M. Stojev, Arhitekture i programiranje mikroraunarskih sistema zasnovanih
na familiji procesora 80x86, Elektronski fakultet Ni, 1999.
[4] M. Stoji, Digitalni sistemi upravljanja, ETF Beograd, novembar 2001.
[5] V. Malbaa, Mikroprocesorska elektronika, predavanja, FTN Novi Sad,
novembar 2001.
[6] Z. Bundalo, Arhitektura raunara, predavanja, VT Doboj, februar 2000.
[7] V. Manojlovi, Osnovi raunarske tehnike, Akademska misao, Beograd, 2003.
[8] Z. Bundalo, Mikroraunarski sistemi, predavanja, VT Doboj, februar 2000.
[9] http://www.elfak.ni.ac.rs/phptest/new/index.php
[10] http://www.microe.com/pdf/easy pic5_manual.pdf

115

You might also like