You are on page 1of 31

PANEVROPSKI UNIVERZITET APEIRON

FAKULTET POSLOVNE INFORMATIKE


Redovne studije
Smer Poslovna informatika

Predmet
PRINCIPI PROGRAMIRANJA

UPRAVLJANJE TOKOM PROGRAMA


(seminarski rad)

Predmetni nastavnik
Prof. dr Zoran . Avramovi, dipl.in.elek.

Student

Vedran Vidi, student


Index br. 27-10/RPI

Banja Luka, juli 2011.

SADRAJ:

Uvod....................................................................................................... 3
1. OSNOVE PROGRAMIRANJA...................................................... 5
2. KOMPAJLERI..................................................................................7
3. ALGORITMI ................................................................................... 8
3.1. Osobine algoritama........................................................................ 10
3.2. Predstavljanje algoritama ............................................................ 11
3.3. Dijagrami toka algoritma..............................................................11
3.4. Primjer algoritma ......................................................................... 13
4. UPRAVLJANJE TOKOM PROGRAMA...................................... 13
4.1. Linearni redosljed instrukcija...................................................... 13
4.2. Nelinearni redosljed izvrenja...................................................... 16
4.3. Arhitekturna podrka kod uslovnih operacija............................ 21
4.4. Koritenje uslova........................................................................... 22
4.5. Iteracija........................................................................................... 27
Literatura .............................................................................................31

UVOD
__________________________________________________________________________

Poznata je injenica da su elektronski raunari zahvaljujui svojoj moi izvanredno


brzog izvravanja aritmetikih i logikih operacija u mogunosti trajnog uvanja informacija u
svojoj memoriji, kao i automatskom izvravanju programa nezamjenjivi u rjeavanju
komplikovanog problema.
Raunar nikako ne moemo posmatrati ili porediti sa ivim biem. Zbog toga, kada
govorimo o komuniciranju ovjeka sa raunarom, rije komuniciranje koristimo sa dosta
ogranienja. Naime, u ovom sluaju komuniciranjem se smatra mogunost zadavanja niza
instrukcija raunaru da bi rjeio odreeni problem, koji je za ovjeka dugaak i sloen, ali ne i
za raunar.
Komunikacija izmeu ovjeka i raunara nije ni priblino tako jednostavna kao
komunikacija izmeu ljudi. Ljudi mogu da interpretiraju ono to im je neko drugi rekao, a ak
ni najvei raunari to ne mogu. Raunar moe da uradi samo i tano ono to mu je zadano, ni
manje ni vie. On nije sposoban da razmilja, da interpretira neije zahtjeve i shvata na svoj
nain. Raunar ne moe, u okviru nekog zadatka, da uradi odreenu akciju koja je neophodna,
ali su zaboravili da mu je narede. Moe se rei da je on pouzdan onoliko koliko i ljudi koji mu
zadaju problem u obliku niza instrukcija. Takoe, raunar razumije problem onoliko koliko mu
je ovjek objasnio, i to ne samo problem nego i nain njegovog rjeavanja.
Voditi rauna o svim detaljima, biti precizan u definisanju svakog koraka i rjeavanju
problema nije tako jednostavno. Zato se pisanje programa, koji se sastoji iz niza instrukcija, ne
odvija u jednom koraku. Programiranje, kako se jo naziva ovaj proces, je samo konana faza u
rjeavanju problema pomou raunara, a ne i jedina. Jedan problem, im je sloeniji, teko je
direktno prevesti u program. Uostalom, to nam je poznato i iz drugih oblasti. Nijedan arhitekta
nee graditi kuu odmah, bez razmiljanja i bez plana. Nijedan elektroinenjer nee pokuati da
konstruie jedan televizor bez prethodne realizacije detaljnih ema spajanja. Previe je tu malih
ali vanih zadataka o kojima treba voditi rauna i koji mogu izazvati greke u konanom
rjeenju.
Upravljanje tokom programa
Pod terminom upravljanje tokom programa podrazumjevamo mehanizme koji odreuju
kojim tokom e se nastaviti izvravanje programa. Dvije bitne konstrukcije iz jezika C za
upravljanje tokom programa su if else i switch-case konstrukcije.
If-else konstrukcija
if else je standardna konstrukcija za upravljanje tokom programa u jeziku C. Svodi se
na odluivanje izbora izmeu dva mogua toka programa. Sintaksa ove konstrukcije glasi: ako
je navedeni uslov zadovoljen izvri blok koda koji je iza IF, a ako uslov nije zadovoljen izvrie
se blok koda koji je iza ELSE. Ako je vrijednost promjenljive result vea od ili jednaka
posmatranom broju ispisae se tekst PASS, a ako nije ispisae se tekst FAIL.

If konstrukcija
__________________________________________________________________________

IF moe da se koristi i samo, odnosno bez kljune rei ELSE. Takoe, uz if - else
konstrukciju moe da se koristi i vie linija koda koje se zatvaraju velikim zagradama.
Viestruki if-else
Viestruka IF ELSE konstrukcija predstavlja mogunost odluivanja izbora za vie od
dva mogua toka grananja.
Switch-case konstrukcija
Jedan druga, mnogo elegantnija konstrukcija za izbor jedne od vie mogunosti
predstavlja svi kejs konstrukcija. Ona nam nudi mogunost odreivanja jednog od vie
moguih tokova izvravanja programa. Svodi se na testiranje jedne promjenljive koja mora biti
tipa int, short, char, long. Vai pravilo da jedna vrijednost odreuje jedno grananje, to jest jedan
tok izvravanja. Vano je zapamtiti, da za pravilno izvravanje programa, moramo predvidjeti i
tok izvravanja za sluaj nepoeljnih vrijednosti, u prevodu, vrijednosti koje nisu obuhvaene
skupom navedenim unutar svi konstrukcije.

1. OSNOVE PROGRAMIRANJA
__________________________________________________________________________

Za ovjeka bi bilo najpogodnije kada bi nain komuniciranja sa raunarom bio slian


prirodnoj komunikaciji meu ljudima. Drugim rijeima, meu programske jezike bismo onda
mogli da ubrojimo i prirodne jezike. Na alost, to nije tako. Poznato nam je da konstrukcija
modernih raunara omoguava smiljeno reagovanje raunara samo na odreeni tip impulsa, to
su binarni elektrini signali koje nazivamo mainski jezik. Taj jezik je vrlo razliit od naih
prirodnih jezika. Da bi se ove razlike premostile, postoje dvije krajnje mogunosti. Prva je da
ovjek razumije mainski jezik, a druga da raunar razumije ovjekov prirodni jezik. Zbog
tekoa koje se javljaju u sporazumijevanju, u praksi biramo srednji put. Uvodimo programske
jezike koji su ovjeku blii od mainskog jezika, jer ih lake razumije, a istovremeno su blii
mainskom jeziku od prirodnih jezika.
Raunar ne moe da funkcionie bez programa-softvera, ali i ovjek ne moe bez
pomoi raunara pri rjeavanju sloenijih problema. Pod pojmom program, definie se niz
naredbi pisanih u odreenom programskom jeziku, koji posjeduje tano definisan redoslijed
izvravanja u raunaru. Proces pisanja programa u nekom od programskih jezika u cilju
rjeavanja odreenog problema nazivamo programiranje, a programeri su osobe koje vre
programiranje.
Kod rjeavanja problema prolazi se kroz sljedea tri koraka:

analiza problema,

razrada algoritma i njegovo pretvaranje u eljeni programski jezik,

prenoenje programa u raunar i putanje u rad.

Analiza je prvi i jedan od najkritinijih koraka u rjeavanju problema. Cilj analize je da


prui preciznu definiciju i opis problema, specifikaciju ulaznih podataka, kakvi se rezultati
oekuju, kao i postupak da se do takvih rezultata doe. Za izvjesne probleme ovaj korak je
prilino jednostavan, dok za druge on moe da predstavlja veoma teak zadatak. Moe se
generalno zakljuiti, da problemi koji se mogu jednostavno izraziti matematikim jezikom
mogu i precizno definisati i opisati u smislu njihovog rjeavanja na raunaru, dok to nije tano
za klasu nematematikih problema. Mada za korak analize problema nepostoji nikakav standard
i formalizovan postupak pogodan za iroku klasu problema, ipak se on u najirem smislu moe
realizovati postupcima takozvane sistem-analize problema ili takozvanim sistemskim
postupkom koji ukljuuje:

uoavanje problema,

formulisanje ciljeva rjeavanja,

definisanje sistema,

analizu,

projektovanje novog sistema.

Suvino je naglaavati znaaj koraka analize problema za njegovo uspjeno rjeavanje. I


najbriljantniji algoritam za rjeavanje problema e dati loe rezultate ukoliko je problem
pogreno definisan, odnosno njegova analiza loe uraena.
U analizi problema pri rjeavanju problema primjenom raunara veoma je bitno
definisati ulazne podatke problema kao i izlaze koji se figuriu u problemu, bitno je definisati
__________________________________________________________________________

njihovu logiku strukturu koja odreuje relacije koje postoje u datom skupu podataka. Ove
relacije mogu da postoje shodno vrsti i prirodi problema, a mogu se pogodno i uvoditi.
Strukture podataka mogu biti razliite, poev od pojedinanih podataka, jedno i
viedimenzionalnih sekvencijalnih struktura, takozvanih povezanih lista podataka, hijerarhijske
strukture tipa stabala, odnosno orijentisanog grafa. Logika struktura podataka definie i
njihovu fiziku strukturu, odnosno nain smjetanja u memoriju raunara. Na taj nain
definisanja struktura ulaznih, a i izlaznih podataka, odreuje u izvjesnom stepenu i algoritam
obrade podataka.
Algoritam predstavlja niz uputstava koje tano odreuju redoslijed operacija koje e
dovesti do rjeenja za ma koji problem datog tipa.
Sljedeih nekoliko osobina su karakteristine za algoritme:

Broj operacija koje se moraju izvriti za rjeenje konkretnog problema nije poznat
unaprijed.

Procedura koja je odreena algoritmom je deterministiki proces koji se moe ponavljati


bilo kad i od strane bilo kog, ona mora biti data u obliku konanog broja instrukcija koje
definiu tano odreene operacije koje se izvravaju u svakoj fazi procedure.

Instrukcije koje ine algoritam definiu proceduru koja se moe izvriti na


odgovarajuem skupu podataka i koja u svakom sluaju dovodi do konkretnog rezultata.

Drugim rijeima, algoritam definie postupak rjeavanja ne samo jednog konkretnog


problema, ve itave klase problema datog tipa.
Kritinu fazu u realizaciji algoritma na raunaru je proces otkrivanja formalnih greaka i
testiranje programa. Testiranje programa obuhvata provjeru ispravnosti programa, a i algoritma
koristei standardne podatke da bi se ustanovilo da li se dobijeni rezultati slau sa rezultatima
dobivenim nekim drugim postupkom ili da li su u saglasnosti sa teorijskim i drugim analizama
problema. Programi se obino testiraju za vie raznih skupova standardnih ulaznih podataka
koji se mogu smatrati karakteristinim za dati problem.
U programima se u sutini pojavljuju tri vrste greaka. Prvo, razlikujemo greke koje
potiu iz prvog koraka rjeevanja problema. Naime, problem moe biti loe definisan ili
analiziran u kom sluaju je potrebno ponoviti ovaj, a samim tim i sljedea dva koraka
rjeavanja problema. Drugo, razvijeni algoritam za rjeavanje problema moe da sadri logike
greke koje se prenose u program. Tree, u samom postupku programiranja mogu se pojaviti
greke usljed loeg prevoenja na programski jezik ili zbog povrede sintaksnih pravila pisanja u
datom programskom jeziku. Moe se zakljuiti da bez obzira koji od navedena tri izvora
greaka je u pitanju, postupak rjeavanja problema je interaktivan u smislu da se jedan ili vie
koraka rjeavanja problema ponavlja sve dok se ne doe do zadovoljavajueg rezultata.
Prva programiranja su vrena u mainskom jeziku koji je razumljiv raunaru i bez
prevoenja, dok se danas takvim programiranjima bave samo inenjeri-projektanti raunara.
Kasnije je binarni kod zamijenjen simbolima, a ta grupa niih programskih jezika se nazivaju
simboliki jezici ili asembleri. Jedan od nedostataka niih programskih jezika je nemogunost
njihovog izvravanja na razliitim raunarima.
Programski jezik je sredstvo pomou kojeg programer kreira softver, sistemski ili
aplikativni. Programski jezici omuavaju programerima, a i iskusnijim korisnicima, da kau
raunaru ta da uradii. Svi programski jezici, kao to su npr. BASIC,COBOL, FORTRAN,
PASCAL, C, C++, itd. zasnivaju se na skupu pravila koji definiu sintaksu i semantiku
__________________________________________________________________________

konkretnog jezika. Rangiraju se na programske jezike niskog nivoa i programske jezike visokog
nivoa.
U mainskom jeziku raunari predstavljaju i obrauju podatke i instrukcije u formi
binarnih cifara nula i jedinica. Programski jezik koji koristi ove kodove najnieg nivoa zove
se mainski jezik i predstavlja prvu generaciju programskih jezika. Zbog svog niskog nivoa,
mainski jezik je izuzetno teak za razumijevanje i koritenje. Upravo zato, razvijeni su novi,
korisniki orijentisani programski jezici, koji su mnogo jednostavniji za koritenje, ali da bi
raunar izvrio takve programe, oni se moraju prethodno prevesti na mainski jezik. U tu svrhu
se koriste specijalni programi prevodioci koji program napisan u viem programskom jeziku
prevode u mainski jezik, koji je jedini razumljiv raunaru.
Asemblerski jezik predstavlja simboliko predstavljanje mainskog jezika, on je takoe
jezik niskog nivoa, ali ipak malo vie korisniki orijentisan. Programer mora pisati instrukcije
koje se odnose na specifine hardverske elemente kao to su: procesor, registri, RAM lokacije
itd.. Asemblerski jezici se inae oznaavaju drugom generacijom raunarskih jezika. Danas se
asemblersko programiranje koristi samo u sluajevima kada je neophodna striktna i direktna
kontrola nad operacijama procesora, npr., u kreiranju komponenata sistemskog softvera kao to
su operativni sistemi, kompajleri, drajveri itd.

2. KOMPAJLERI
Kompajleri, kopilatori ili programski prevodioci su programski sistemi koji obezbjeuju
provoenje sa izvornog, mainski nezavisnog jezika na mainski jezik bez istovremenog
izvravanja mainskih instrukcija.
U procesu kompilacije rjeavaju se sljedei problemi:
1. prepoznavanje strukture programa na ulaznom jeziku i po potrebi formiranja
programa na meujeziku,
2. analiza strukture izvornog programa,
3. obradu simbolikih naziva,
4. raspodjelu operativne memorije izmeu programa i podataka,
5. auriranje (editovanje) programa i generisanje potrebne dokumentacije o programu
za potrebe korisnika.
Kompajleri se dijele na jednoprolazne i vieprolazne. U optem sluaju jednoprolazni
kompajleri obuhvataju blok leksike analize, blok analize strukture podataka i blok generisanja
objektivnog programa.
Kod vieprolaznih kompajlera primjenjuje se uzastopan niz jednostavnijih
transformacija na izvorni program u cjelini. Vieprolazni sistem se moe posmatrati kao skup
kompajlera koji provode sa jednog jezika na drugi. Kod vieprolaznih sistema prikuplja se
znatno vie informacija o izvornom jeziku nego kod jednoprolaznih sistema. Ove informacije se
koriste za dobijanje efikasnijih mainskih programa za isti izvorni program. Savremeni
kompajleri posjeduju i dodatni prolaz u cilju optimizacije objektnog programa. Optimizacija
predstavlja proces primjene razliitih postupaka u cilju dobijanja boljeg objektnog programa.
Pod ovim pojmom bolji najee se podrazumijeva dobijanje takvih objektnih programa koji
se bre izvravaju ili pak zahtijevaju manji memorijski prostor. esto se uvodi i pojam mjere
__________________________________________________________________________ 7

optimalnosti koji predstavlja odnos broja mainskih instrukcija koje generie kompajler i
minimalno potrebnog broja mainskih instrukcija da bi se program izvrio.
Svi kompajleri datog raunarskog sistema podreeni su operativnom sistemu
raunarskog sistema i moraju zadovoljiti odreene uslove u smislu da se specifinosti izvornog
programa poslije provoenja na objektne programe gube.
Dobijeni objektni programi po pravilu nisu izvrni programi. Objektni program moe da
se sastoji od vie modula od kojih je svaki pisan na razliitom izvornom jeziku. Objedinjavanje
objektnih modula u cjelinu pomou programa za povezivanje vri se nezavisno od toga na kom
izvornom jeziku je modul pisan. Tek poslije povezivanja objektnih modula u jedinstven
objektni program moe se pristupiti punjenju objektnog programa u operativnu memoriju. Ovu
funkciju vri program za punjenje. Tipini kompajlerski jezici su FORTRAN, ALGOL,
COBOL, PASKAL, itd.

3. ALGORITMI
Algoritam je opis za rjeavanje nekog problema. Rije se koristi jo od srednjeg vijeka i
tada je oznaavala neto sasvim drugo. Izvorno, algoritam je izraz koji opisuje nain raunanja
decimalnim brojevima uvedenim oko 1600. godine u Evropi. Algoritmiari su se ranije zvali
oni matematiari koji ne operiu simbolima mnoina predstavljenim na abakusu, nego jednim
(indijskim ili arapskim) sistemom znakova za brojeve.
U novije vrijeme, algoritam je pojam koji se gotovo iskljuivo vezuje za informatiku i,
mada ne postoji jedinstvena opte prihvaena definicija, podrazumijeva se da je u pitanju
nekako opisana procedura za obavljanje posla. U tu svrhu se definiu algoritamski jezici. To su
formalizovani jezici kojima se relativno lako opisuju postupci rjeavanja problema
predstavljenih algoritmom, takvi su naprimjer programski jezici Algol, Fortran i Kobol.
Algoritam je u matematiku uveo arapski matematiar Muhamed Al Horezmi. Napisao je
knjigu Al Horezmi o indijskoj vjetini raunanja gdje u arapsku matematiku uvodi indijske cifre
i decimalni brojni sistem. Ova knjiga biva kasnije prevedena na latinski kao Algoritmi de
numero indorum. Od loeg latinskog prevoda njegovog prezimena i potie rije algoritam, i
dugo je oznaavala postupak za raun sa decimalnim brojnim sistemom.
Algoritam je konana i precizno definisana procedura, niz dobro definisanih pravila,
kojom se ulazne vrijednosti transformiu u izlazne, ili se opisuje izvravanje nekog postupka.
Algoritam je kljuni pojam u raunarskoj obradi podataka jer je raunarski program
izvjestan algoritam koji raunaru objanjava koje korake i kojim redoslijedom treba da obavlja.
Kada se uz algoritam vezuje pojam obrade podataka, podrazumijeva se da se podatak prvo uita
preko ulazne jedinice a ispisuje se na izlaznu jedinicu ili uva za kasniju upotrebu. Sauvani
podaci se smatraju dijelom unutranjeg stanja sistema. Za svaki raunarski posao algoritam
mora biti jasno definisan, naveden na nain koji podrazumijeva sve mogue situacije koje se
mogu pojaviti. Znai, svaki uslovni korak se mora sistematino obraditi, sluaj po sluaj, uslov
za svaki sluaj mora biti jasan i izraunljiv.
Poto je algoritam jasan niz preciznih koraka, redoslijed izraunavanja je uvijek kritian
za funkcionisanje algoritma. Pretpostavlja se da su instrukcije navedene jasno, da poinju od
vrha i da teku do dna. Ova ideja se formalno opisuje kontrolom toka. Kod ovakve formalizacije
se unaprijed uzimaju pretpostavke o imperativnom programiranju. Ovo je najuobiajeniji
koncept u programiranju i opisuje postupke na mehaniki nain. Jedinstveno za ovaj koncept je
__________________________________________________________________________

operacija dodjeljivanja, to je davanje vrijednosti promjenljivoj. Ovo proizilazi iz intuitivnog


poimanja memorije kao privremenog skladitenja, odnosno pamenja.
Algoritmi se realizuju u obliku raunarskih programa, ali mogu i na drugi nain. Sem
elektrinih kola i sprava koje obavljaju neke radnje isto tako postoje i bioloke neuralne mree
kakva je, na primjer, mozak ovjeka koji je nauio matematike operacije ili insekta koji
premjeta hranu. Analiza i prouavanje algoritama je jedna oblast raunarstva i esto se obavlja
apstraktno bez upotrebe konkretnog programskog jezika. Nalik slinim matematikim
disciplinama ovdje se izuavaju zakonitosti i principi algoritama a ne konkretne
implementacije. Neki autori ograniavaju definiciju algoritma na procedure koje se konano
zavravaju. Drugi ukljuuju i procedure koje se izvavaju zauvijek bez zaustavljanja,
obrazlaui to potrebom da se neke vrste poslova obavljaju u kontinuitetu. Postoji vie naina
za razvrstavanje algoritama. Jedan nain razvrstavanja je po metodologiji projektovanja ili
primjenjenom obrascu. Postoji nekoliko razliitih obrazaca kako se pristupa realizaciji
algoritma. Neki uobiajeno koriteni obrasci su:

Podjeli pa vladaj algoritmi smanjuju stepen sloenosti problema podjelom na dva ili
vie manjih problema od iste vrste, dok od problema ne ostane toliko mali dio da se
moe jednostavno rjeiti.

Dinamiko programiranje kada problem pokazuje optimalnu podstrukturu, u smislu da


se optimalno rjeenje problema moe konstruisati iz optimalnog rjeenja podproblema, i
preklapanjem podproblema, to znai da se isti podproblem koristi za rjeavanje vie
razliitih primjera problema, moemo rjeiti brzo koristei dinamiko programiranje,
pristup koji izbjegava ponovo izraunavanje rjeenja koja su ve izraunata.

Pohlepni algoritam algoritam lakomosti je slian dinamikom programiranju, ali je


razlika u tome to rjeenja podproblema ne moraju biti poznata u svakom trenutku.
Stoga, pri traenju rjeenja je mogue napraviti izbor onoga to izgleda najbolje u tom
trenutku.

Linearno programiranje problem se rjeava koritenjem linearnog programiranja kada


postoji vie linearnih nejednaina a zadatak je nai maksimum po nekom kriterijumu.

Pretraga i numeracija mnogi problemi mogu biti modelovani kao problemi grafa.
Algoritam pretraivanja grafa daje pravila kretanja kroz graf i koristan je ba za ovakve
probleme. Ova kategorija obuhvata i algoritme pretraivanja i povratka kroz stablo
odluivanja.

Heuristiki algoritmi i algoritmi sluajnosti ne odgovaraju u potpunosti strogoj definiciji


algoritma:
1. Algoritmi sluajnosti prave u nekim situacijama sluajan izbor, za neke probleme
se stvarno moe dokazati da se do najbreg rjeenja moe doi samo uvoenjem
izvjesnog stepena sluajnosti.
2. Genetiki algoritam pokuava da nae rjeenje problema imitirajui bioloku
evoluciju, koji u nizu sluajnih mutacija daje uzastopne generacije rjeenja. Tako
raunar simulira razmnoavanje i preivljavanje najprilagoenijih. U genetikom
programiranju je ovaj pristup proiren na algoritme, smatrajui i algoritme
rjeenjem problema.
3. Heuristiki algoritmi su takvi algoritmi ija je osnovna namjena nalaenja
optimalnog rjeenja, u stvari priblinog rjeenja, jer vrijeme ili memorijski prostor
za izvravanje algoritma za nalaenje tanog najboljeg rjeenja nije praktino
mogue. Primjer algoritama koji su ovakvog tipa su za lokalno pretraivanje, tabu
pretraivanje ili algoritam simuliranog otputanja. Naziv simulacija otputanja

__________________________________________________________________________

aludira na metalurki proces suprotan kaljenju kada se metal grije pa sporo hladi
radi otklanjanja defekta u materijalu. Namjera sluajnog variranja je traenje to
blieg rjeenja optem optimalnom rjeenju, a ne jednostavno lokalno rjeenje.
Ideja je da se amplituda sluajne veliine smanjuje kako se pribliavamo rjeenju.
Drugi nain razvrstavanja je po implementaciji. Rekurzivni algoritam koji poziva sam
sebe uzastopno dok se neki uslov ne ispuni, to je metoda primjenjena kod funkcionalnog
programiranja. Algoritmi se obino razmatraju uz pretpostavku da u jednom trenutku izvravaju
jednu instrukciju jednog algoritma. Takvi raunari se ponekad zovu serijski raunari. Algoritam
osmiljen za takvo okruenje se zove serijski algoritam, nasuprot paralelnim algoritmima, koji
koriste prednosti raunarske arhitekture kod koje vie procesora u istom trenu rjeava isti
problem. Razni heuristiki algoritmi bi spali u ovakvu kategoriju, dok bi njihov naziv u stvari
opisivao nain implementacije.
Algoritam koji ispituje da li u beskonanom nizu sluajnih binarnih cifara ima vie
jedinica ili nula mora raditi zauvijek da bi posao obavio do kraja. Ako je implementiran
ispravno algoritam ipak daje korisne rezultate: dok god ispituje niz cifara daje pozitivan odziv
dok je vie nula nego jedinica, a negativan odziv u drugom sluaju. Uspjeh ovih algoritma bi
konano bio definisan kao davanje pozitivnog odziva ako je broj nula vei u nizu, a u drugim
situacijama negativnog odziva.

3.1. Osobine algoritma


Neke vane osobine algoritma su:

Konanost - Algoritam se mora okonati poslije konanog broja koraka. Postupak koji
ima sve karakteristike algoritma izuzev konanosti naziva se raunarski metod.

Definisanost Svaki korak algoritma mora biti precizno definisan: operacije koje treba
da se izvedu, moraju biti rigorozno specificirane i bez ikakvih dvosmislenosti.

Ulaz Za izvoenje proizvoljnog algoritma moe biti potrebno vie ali isto tako ni
jedan ulazni podatak. Ulazni podaci su veliine iz datog skupa i predstavljaju poetne
vrijednosti za poetak izvoenja algoritma.

Izlaz - Algoritam posjeduje jednu ili vie izlaznih veliina, tj. veliine koje se dobiju po
zavretku algoritma i stoje u odreenoj vezi definisanoj samim algoritmom sa ulaznim
podacima.

Efikasnost jedan kriterijum efikasnosti je potrebno vrijeme, da se algoritam okona.


Ostali kriterijumi su prilagoenost algoritma za realizaciju na raunaru, njegova
jednostavnost, elegancija i dr.

Rezultativnost Za svaki mogui skup ulaznih veliina u algoritmu mora biti definisano
to treba smatrati rezultatom, odnosno izlaznom veliinom algoritma.

Determinisanost Skup izlaznih veliina izraunatih u ma kom algoritamskom koraku,


jednoznano je odreen na osnovu ulaznih veliina u dotinom algoritamskom koraku.

Elementarnost zakon dobijanja izlaznih veliina, na osnovu ulaznih veliina


algoritamskog koraka mora biti prost i jasan.

__________________________________________________________________________ 10

3.2. Predstavljanje algoritama


Algoritam se moe predstaviti govorom, tabelarno i dijagramom toka. Zbog
nepostojanja jednog jezika razumljivog za sve narode, predstavljanje algoritma govorom je
nepodesan nain, dok tabelarno predstavljanje algoritma pomou tablica odluka ne omoguava
preglednost.
Tehnike predstavljanja algoritma mogu se podijeliti na:

prirodne jezike,

blok dijagrame algoritma,

meta jezike,

programske jezike.

Upotreba prirodnih jezika za opis algoritama koristi se prvenstveno za runu realizaciju


algoritma tj. bez upotrebe raunara.
Dijagram toka je jedan od standardnih grafikih naina zapisivanja algoritma. Dijagram
toka se sastoji od simbola koji su povezani usmjerenim linijama, ime se istie preglednost i
nedvosmislenost redoslijeda izvravanja pojedinih algoritamskih koraka.
Meta jezici su negdje na sredini izmeu prirodnih jezika i programskih jezika.
Predstavljanje algoritama na programskim jezicima ustvari predstavlja programiranje
raunarskih sistema, to predstavlja posebnu disciplinu u raunarstvu.

3.3. Dijagrami toka algoritma


Dijagrami toka su grafika predstava algoritama koji ima za cilj njihovu specifikaciju
pomou skupa grafikih simbola koji oznaavaju pojedine operacije u algoritmu i skupa pravila
za povezivanje grafikih simbola, u cjelini koja predstavlja algoritam.
Koritenje blok dijagrama u cjelini predstavljanja algoritma ima sljedee prednosti:

Olakano praenje logikog toka odvijanja algoritma.

Sloene algoritme je mogue dekomponovati na module koji se povezuju i ine


hijerarhijsku strukturu algoritma.

Zbog grafike prirode simbola koji ine dijagram olakana je komunikacija sa


korisnicima algoritma.

Blok dijagrami omoguavaju predstavu algoritma koja je nezavisna u odnosu na raunar


ili programski jezik koji e se koristiti za rjeavanje algoritama.

Koritenje blok dijagrama za predstavu algoritama omoguava da vei broj lica


istovremeno radi na razvoju dijelova jednog sloenog algoritma, odnosno da vei broj
programera programira nezavisno pojedine dijelove algoritma.

U praksi koritenja blok dijagrama za predstavljanje algoritama u upotrebi je vei broj


razliitih grafikih simbola za specifikaciju pojedinih algoritamskih koraka. Oni svojim
oblikom ukazuju na prirodu pojedinih algoritamskih koraka. Jezik grafikih simbola za
predstavljanje algoritama u svijetu nije unificiran, ve postoje nacionalni standardi.

__________________________________________________________________________ 11

Simboli dijagrama toka


Poetak / kraj
Ovaj simbol se koristi za poetak i kraj
algoritma.
Ulaz / izlaz
Ovaj simbol predstavlja funkciju ulaza ili
izlaza, npr.: stavljanje na raspolaganje
informacije za obradu (ulaz), ili registrovanje
obraene informacije (izlaz).

Obrada
Ovaj simbol predstavlja sve vrste funkcija
obrade u algoritmu

Odluka
Ovaj simbol predstavlja operaciju odluke ili
operaciju ukljuivanja ili iskljuivanja koja
odreuje put koji treba slijediti izmeu vie
moguih puteva. Specijalni sluaj odluke je
programirani prekida.
Mjesto prelaza
Ovaj simbol predstavlja izlaz ili ulaz u jedan
drugi dio dijagrama. Prelaz moe biti sa vie
mjesta, ali moe uslijediti samo ka jednom
mjestu. Pripadajua prelazna mjesta moraju
nositi istu oznaku.
Potprogram
Ovaj simbol predstavlja obradu, sastavljenu iz
jedne ili vie operacija ili programskih
stepenica, koja je definisana kao program.
Moe postojati vie ulaza i izlaza.
Linije toka
Ovaj simbol predstavlja funkciju koja se
sastoji u meusobnom povezivanju simbola.
Radi bolje jasnoe toka programa na svaki
sljedei simbol usmjerava se vrh strelice,
naroito pri odstupanjima od prvenstvenih
smjerova.
__________________________________________________________________________ 12

3.4. Primjer algoritama i njegovo predstavljanje u programskom jeziku


QBASIC
Linijska struktura algoritma i QBASIC program rjeavanja izraza: A=x2 +y i B=x-2*y.
ALGORITAM
Poetak

Unijeti
,

= 2+
=- 2*

REM IZRAZI
CLS
INPUT UNESI VRIJEDNOSTI X,Y; X,Y
A=X^2+Y
B=X-2*Y
PRINT X^2+Y=; A
PRINT X-2*Y=; B
END

tampaj
,

Kraj

4. UPRAVLJANJE TOKOM PROGRAMA


4.1. Linearni redosljed instrukcija
Program se sastoji od iskaza, koji se standardno izvravaju u linearnom redosljedu.
Svaki iskaz se obino prevodi u jednu ili vei broj sukcesivnih mainskih instrukcija, to
ukazuje da postoji direktni odnos izmeu lokacije pojedine instrukcije i one koja slijedi poslje
nje.
Po analogiji sa HLL iskazima programskog jezika visokog nivoa (engl. high-level
programming language), i raunarske instrukcije su u optem sluaju funkcionalno nezavisne.
To znai da se svaka instrukcija moe posmatrati kao izdvojena sintaktika i semantika cjelina,
razliita od one koja joj prethodi, i one koja slijedi.
Na slici 4.1 je prikazan pregled arhitektura u odnosu na funkcionalnu i lokacionu
zavisnost instrukcija.

__________________________________________________________________________ 13

Sl. 4.1. Funkcionalna i lokaciona zavisnost instrukcija

4.1.1. Funkcionalna nezavisnost


U optem sluaju svaka instrukcija kod raunara je nezavisna sintaktika i semantika
cjelina. Pri ovome dvije osobine pojednostavljaju implementaciju. Naime, imajui u vidu da
postoji N razliitih instrukcija (za datu arhitekturu) ukupno razlikujemo N*(N-1) parova
instrukcija, N*(N-1)*(N-2) tripleta instrukcija, itd. Ako se imaju u vidu ponavljanja, tada
dobijamo N2 i N3 kombinacija, respektivno. Kod nekih arhitektura postoje zavisne instrukcije,
ali je broj zavisnih instrukcija ogranien - na primjer, na parove ili triplete. Da bi ukazali na ove
tipove instrukcija, analiziraemo dvije instrukcije koje posjeduju funkcionalnu zavisnost od
strane drugih instrukcija: to su instrukcije REPEAT (ponovi) i EXECUTION (izvrenje).

Funkcija REPEAT instrukcije je da ukae da jedan ili vei broj uzastopnih instrukcija
mora da se ponovi specificirani broj puta. Instrukcija REPEAT specificira broj
ponavljanja uzimajui u obzir i specijalni uslov zavretka.
EXECUTION instrukcija specificira izvrenje druge instrukcije koja je locirana na
adresi specificiranoj operandom instrukcije EXECUTION. Tipian primjer je instrukcija
CALLSUB.

Problem kod funkcionalne zavisnosti instrukcija je u tome to se svaka instrukcija ne


moe prihvatiti kao druga instrukcija para instrukcija. Na primjer, ponavljanje REPEAT
instrukcije se ne moe prihvatiti jer se sa brojem koji ukazuje na uslov zavretka mora
manipulisati kako sa REPEAT instrukcijom internom hardveru (neophodno je ugraditi dodatni
hardver) tako i sa statusom maine koji mora biti obiman (po sadraju).
Drugi razlog zato druga instrukcija u paru nije prihvatljiva ogleda se u tome to; koja
e biti naredna instrukcija esto puta nema smisla rezonovati. Na primjer, razmatrajmo
ponavljanje instrukcija JUMP (skoi) ili HALT (direktiva da se zaustavi izvrenje zadatka).
Drugim rijeima, potrebna je ugradnja hardvera koji e detektovati i signalizirati ovaj nevaei
par.
Ova objanjenja su osnovni razlog zato se REPEAT i EXECUTION instrukcije ne
sreu kod velikog broja arhitektura. Instrukcije REPEAT i EXECUTE obino formiraju
metainstrukcije.

4.1.2. Lokaciona zavisnost


__________________________________________________________________________ 14

Lokacija naredne instrukcije zavisi od tekue instrukcije na dva naina:


(1)
Ulanavanje - ovo znai da svaka instrukcija specificira lokaciju naredne. Ovaj nain je
bio koriten kod nekih starih raunara koji su koristili bubanj kao proirenje glavne memorije
veoma malog kapaciteta, sa ciljem da se dobije optimalno preklapanje izmeu izvrenja tekue
instrukcije i lokacije na bubnju koja je ukazivala na narednu instrukciju. Kod ovakvog sluaja,
naredna instrukcija se mogla itati u trenutku kada je tekua instrukcija zavrila sa izvrenjem.
Ulanavanje se takoe koristi kod mikroprogramiranja, posebno kod instrukcija i dekodiranja
operanada, jer se kodovi instrukcija i adresni naini rada koriste za aktiviranje razliitih
mikrorutina. Drugi, manje vaan, razlog koritenja ulanavanja je popunjenje praznina (gapova)
koje su uslovljene neiskorienim (rezervnim) opkodovima ili adresnim nainima rada. Ovi
"gapovi" mogu takoe biti uslovljeni odreenim kombinacijama koje se ne mogu javiti. Na
primjer, kod viestrukog grananja (rezultat je aritmetikog poreenja), od ukupno osam tipova
grananja koristi se samo est kombinacija (<, , =, , >, ). Kada je lokacija naredne instrukcije
specificirana u okviru mikroinstrukcije, lokacije kombinacija koje se ne koriste, gapovi, se
takoe mogu koristiti.
(2)
Sekvenciranje - Ovo znai da naredna instrukcija koja treba da se izvri ima implicitnu
adresu o narednoj memorijskoj lokaciji. Ovim se eliminie potreba za specifikacijom lokacije
naredne instrukcije. ta vie, vano je da se kod brze implementacije lokacija naredne
instrukcije moe unaprijed predvidjeti (bez znanja tekue instrukcije) tako da se naredna
instrukcija moe unaprijed pribaviti (engl. prefetch). Ali pri tome dolazi do promjene
programske sekvence koja se javlja kada se izvravaju instrukcije tipa BRANCH/JUMP ime se
naruava sekvencijalni redosljed izvrenja. Odreivanje lokacije na osnovu lananja se u
optem sluaju ne primjenjuje na konvencionalnom mainskom nivou, jer zahtjeva dodatni
operand. Sekvencijalni metod je stoga poeljniji, i pored toga to zahtjeva da se arhitektura
proiri sa BRANCH/JUMP instrukcijama. Primjer sekvencijalne lokacione zavisnosti je
instrukcija zakanjeno grananje (engl. delayed branch). To je (uslovna) BRANCH instrukcija
kod koje se grananje obavlja nakon izvrenja naredne sekvencijalne instrukcije. Razlog ovome
je da je, u optem sluaju, naredna instrukcija ve spremna za izvrenje, tako da je sa te take
gledita bolje da se ta instrukcija takoe zavri. Ovo rezultira poboljanju performansi jer se
inae diskontinuitet kod jedinice koja vri pribavljanje instrukcija naruava zbog instrukcije
grananja. Instrukcija "delayed BRANCH", uprkos svojoj pogodnosti, se ne koristi tako esto
zbog dodatne sloenosti kod izvoenja kompilatora (potrebna je dodatnu instrukciju alocirati i
pozicionirati poslije BRANCH). Najvei broj RISC (engl. Reduced Instruction Set Computer
ili tip procesora sa smanjenim skupom naredbi) arhitektura koristi ovu tehniku.

Sl. 4.2. Procesor HP PA-RISC 7300LC

4.2. Nelinearni redosljed izvrenja


__________________________________________________________________________ 15

Kod programiranja, redosljed instrukcija nije uvjek linearan. Kod najveeg broja
sluajeva, moraju se donjeti odluke na osnovu kojih se ukazuje koji e se put u programu, u
daljem toku, izvriti. Za izbor jednog od moguih puteva koriste se uslovne operacije.

4.2.1. Operacije
Donoenje odluka u programu se obino izvodi promjenom programskog toka koji se
zasniva na nekom prethodno generisanom rezultatu. Ovo ukazuje da postoji potreba za
instrukcijama pomou kojih se moe mijenjati linearni redosljed izvrenja instrukcija na uslovni
nain, a ponekad i na bezuslovni. Ovim instrukcijama se obezbjeuje eljena fleksibilnost i
generalnost programskih jezika i skupova naredbi. Neki primjeri iz HLL-a, kao to je Pascal,
su: if ... then ... else, case i goto iskazi. Ove konstrukcije programskog jezika zahtjevaju
podrku od strane arhitekture raunara. Ovu podrku ini vei broj testova i jedna ili vei broj
operacija (JUMP ili BRANCH) koje se zasnivaju na rezultatima ovih testova. U ovom sluaju,
test se moe smatrati evaluacijom (procjenom) podataka sa ciljem da se on preslika na skup
uzajamno iskljuivih kriterijuma odluivanja. Obino su to uslovni kodovi (markeri). Shodno
tome, test je preslikavanje ulaznog domena, koga ine sve mogue ulazne vrijednosti, na izlazni
domen koga ini vrijednost za svaku klasu ulaznih vrijednosti. Odluke se najee zasnivaju na
poreenju brojeva (vrijednosti). Najjednostavniji sluajevi su poreenja vrijednosti sa nulom ili
poreenje dvije vrijednosti. Izazovniji sluaj je onaj kada treba odrediti da li se vrijednost nalazi
unutar opsega vrijednosti.
Poreenje dvije vrijednosti
Veoma esto se obavlja poreenje dvije vrijednosti. U principu, poreenje ini
uporeenje dvije operandske vrijednosti koje se ne mijenjaju u toku procesa poreenja. Rezultat
je jedan od slijedea tri uslova: <, = ili >. esto, korisnik eli da raspolae i sa sloenijim a ne
samo sa prostim izborom, koji rezultira u istovremenom izboru sa slijedeim mogunostima:
A < B ili A B
A B ili A > B
A = B ili A B
Mogua implementacija je preko aritmetike instrukcije oduzimanja SUBTRACT. Na
alost, u ovom sluaju javlja se sporedni efekat jer se razlika smjeta na mijesto odredita, to
dovodi do neeljene destrukcije tog operanda. Iz ovog razloga kod najveeg broja arhitektura
postoji instrukcija poreenja COMPARE, kod koje se ne javlja takav sporedni efekat, jer se
razlika pravi samo sa ciljem da se generie izvedeni rezultat. Veoma esto je neophodno
uporediti operand sa nulom. Operand nula je, kod velikog broja arhitektura, implicitno
specificiran opkodom u sluaju kada se koristi instrukcija TEST. Rijee se podravaju HLL
funkcije max i min. One su specijalni sluaj poreenja dvije operandske vrijednosti,
kombinovane sa instrukcijom koja se direktno izvrava nakon toga.
Na primjer, funkcija A:=max(A,B) moe da se obavi od strane sekvence mainskih
instrukcija mikroprocesora MC68020 na slijedei nain:

Ova sekvenca se moe obaviti slijedeom novom instrukcijom MAX.L B,A.


Uvoenje novih instrukcija je korisno u slijedeim sluajevima:
__________________________________________________________________________ 16

Kada je frekvencija koritenja dovoljno velika ili kada ne postoji drugi metod za
implementaciju. Ovo je razlog to se primitivne operacije obavljaju pomou instrukcija
kao to su WAIT (ekaj), TRAP (zarobi) i RESET (poniti).
Kada je potrebno utedjeti memorijski prostor i vrijeme izvrenja u odnosu na
programsku implementaciju. Ovo vodi poboljanju vremena izvrenja instrukcije zbog
toga to se eliminie BRANCH instrukcija koja moe imati negativne posljedice na
protonu obradu.
Kada se ugradi u postojee arhitekture pa ne dolazi do znaajnih promjena u postojeim
formatima instrukcija.

Primjer 1:
Kod MC68020 postoje dvije instrukcije koje se koriste za poreenje vrijednosti: CMP
(poredi) i TST (testiraj). Instrukcijom CMP kompariraju se operandi opteg tipa sa registrom,
dok TST komparira opti operand sa nulom. Instrukcijom CMP A,B izraunava se B-A.
Rezultat CMP i TST instrukcija ima uticaja na markere uslovnog kodnog registra CCR (engl.
Condition Code Register). Dinamika korienja CMP i TST kod MC68020 je 7,86% i 3,09%,
respektivno (MacGregor 1985). Ukupni procenat od 10,95% pokazuje relativnu vanost ovih
instrukcija. Na slici 4.3 je prikazan format CMP i TST instrukcije kod MC68020.

Sl. 4.3. Format instrukcija CMP i TST mikroprocesora MC68020.


Poreenje opsega
Poreenje opsega predstavlja rangiranje elemenata (tj. podataka) u odnosu na dva
elementa. Moe se primjeniti i za N elemenata. Pomenuta operacija se sastoji u odreivanju
korektne pozicije elemenata (tj. podataka), usvajajui da se vri sortiranje N elemenata po
nekom kljuu. Najvei broj arhitektura posjeduje specijalne instrukcije za ovo poreenje.
Operacija se esto obavlja repetitivnim rangiranjem dva elementa. Kod ovog poreenja,
neophodno je klasifikovati objekat tako da postoji odreena relacija sa drugim objektima; na
primer:
'A' Char 'Z'
alfabetski znaci
'0' Char '9'
numeriki znaci
donja_granica indeks gornja_granica
indeks polje
Poreenje A X B moe da generie (u zavisnosti od rezultata):

dva mogua odgovora : A X B ; X<B ili X>B

tri mogua odgovora : A X B ; X<A; X>B

pet moguih odgovora: A<X<B; X=A;X=B;X<A;X>B


Poreenje opsega je vana funkcija kod adresiranja polja. U ovom sluaju vane su samo dvije
funkcije, u opsegu i van opsega, pa shodno tome rezultat ima uticaj na uslovne kodove
__________________________________________________________________________ 17

(markere), koji se u daljem programskom toku koriste (testiraju) od strane instrukcija koje
obavljaju uslovno grananje.

Primjer 2:
Na slici 4.4 je prikazan format instrukcija CHK i CHK2 procesora MC68020 pomou kojih se
obavlja poreenje opsega. Operand koji se poredi specificira se u registarskom polju; kod
instrukcije CHK on se uvjek nalazi u registru za podatke, a kod CHK2 D/A poljem se
specificira da li se on nalazi u registru za podatke ili u adresnom registru. Kod CHK instrukcije
implicitno se specificira donja granica na nulu, dok je gornja granica specificirana efektivnom
adresom. Efektivna adresa kod CHK2 specificira adresu nieg-vieg para granice. Instrukcija
postavlja uslovne markere, koji odraavaju rezultat poreenja (slika 4.3), i izazivaju trap
(sinhroni prekid programa u odnosu na njegovo izvrenje) kada je operand van opsega.

Sl. 4.4. Format instrukcija CHK i CHK2 mikroprocesora MC68020.

4.2.2. Uslovne operacije


Uslovne operacije se mogu koristiti za promjenu programskog toka. Njih ine tri dijela:
testiranje, izbor i koritenje uslova (slika 4.5).
__________________________________________________________________________ 18

Sl. 4.5. Dijelovi uslovnih operacija


Testiranje
Predstavlja generisanje izvedenog rezultata (koji formira test prostor - test space) od
operacija koje se obavljaju nad vrijednostima iz prostora vrijednosti (value space). Na primjer,
uslovni markeri N, Z, V i C zauzimaju test prostor od 16 elemenata. Test funkcija se ponekad
obavlja implicitno; naime, kada se uslovni markeri kao rezultat izvedenog rezultata postave ili
obriu od strane druge operacije - na primjer, instrukcijom ADD. U ostalim sluajevima se
mora izvesti eksplicitno, specijalnom test instrukcijom, kao to je CMP ili TST.
Kod procesora BS32000 izvedeni rezultat je podjeljen na dva dijela:
(1) Implicitna grupa koju ine sljedei izvedeni rezultati koji su posljedica operacije: bit
prenosa (C) i bit premaaja (F).
(2) Eksplicitna grupa koju ine izvedeni rezultati koji su posljedica rezultata operacije: Z bit
(rezultat jednak nuli), N bit (rezultat u oznaenoj prezentaciji brojeva je negativan) i L
(operand, posmatran kao neoznaen broj, je manji od drugog operanda).
Da bi se generisali eksplicitno izvedeni rezultati, potrebne su posebne compare i test
instrukcije, dok se implicitni uslovni markeri postavljaju ili briu iz oitih razloga.
Izbor
Kao to se vidi sa slike 4.5, operacijom selekcije (izbora) vri se preslikavanje test prostora u
prostor uslova (condition space). On provjerava da li test prostor sadri elemente specificirane
operandom za izbor, pa shodno tome izlaz moe biti "true" (istinit) ili "false" (nije istinit). Na
primjer, izbor operanda vei ili jednak GE (engl. Greater or Equal) kod instrukcije grananja
provjerava da li test prostor sadri elemenat GE. Obino, operand izbora, zbog ogranienog
prostora opkoda, ne moe da specificira svaki elemenat test prostora. Kod MC68020,
jedinstveni podskup, kao to je GE, mogue je izabrati od ukupnog test prostora koga ini 16
elemenata. Zbog velikog broja podskupova, na primjer podskup GE i "not C" - izbor
zahtjevanog podskupa (u ovom sluaju GE i "not C") se ne moe izvesti pomou jedne
instrukcije. Samo najee koriteni podskupovi iz ukupnog test prostora se mogu birati
jednom instrukcijom (Tab. 4.1). Ostali skupovi se mogu birati izvrenjem jedne ili veeg broja
instrukcija, naravno njihovom pogodnom kombinacijom. Na primjer, test "not equal to zero"
kod MC68020 se izvodi jednom instrukcijom (uslov NE), dok se test "greater or equal to zero" i
"not carry" mora se izvesti sekvencom od dvije instrukcije (uslov GE i CC).
__________________________________________________________________________ 19

Tab. 4.1. Uslovni testovi kod MC68020.

1 Aritmetika sa neoznaenim brojevima: Manje: rezultat operacije uporeenja "je manji od"
ako je bit prenosa postavljen (C=1). Vie ili isto: Ovo je inverzija od Manje (C=0). Manje ili
isto: Istiniti je ako je Manje istinito (C=1) ili ako je rezultat nula (Z=1). Vie: predstavlja
inverziju od Manje ili isto (~(C+Z)=~C~Z).
2 Aritmetika sa neoznaenim brojevima: Oznaeni rezultat (na primjer u dvojinom
komplementu) je 0 kod sljedea dva sluaja: (a) ako se bit znaka brie bez detekcije premaaja
(N=0 i V=0); (b) ako, da tako kaemo, sabiranje dva pozitivna broja generie rezultat koji
uslovljava da se bit znaka promjeni, tako da se bit premaaja postavi na (N=1 i V=1). Formula
za Vee ili jednako postaje N EOR ~V. Ostale formule mogu se izvesti na slian nain kao kod
aritmetike sa neoznaenim brojevima.
Koritenje uslova
Ovo je dio koji koristi Boolean rezultat prostora uslova. Obino, uslov prati dio (adresu
skoka) koji se obavlja operacijom grananja, u sluaju kada se eli ostvariti promjena toka
izvrenja programa. Kod HLL-ova, Boolean rezultat izbora (selekcije) moe se kao vrijednost
dodjeliti operandu, kao to je, na primer, B:=(XY).

4.3. Arhitekturna podrka kod uslovnih operacija


Uslovne operacije se mogu obaviti pomou jedne, dvije ili tri instrukcije, koje su na
odreeni nain meusobno povezane. Arhitekturna podrka uslovnim operacijama se pokriva u
zavisnosti od sva tri dijela sa slike 4.5. Specifikacija ovih dijelova (testiranje, izbor, koritenje
uslova) moe se izvesti, kao to je prikazano u Tabeli 4.2, na etiri naina, a da bi se to sprovelo
potrebne su jedna, dvije ili tri instrukcije.
__________________________________________________________________________ 20

Tab. 4.2. Podrka uslovnim operacijama.

Kada uslovnu operaciju ine vie od jedne instrukcije (sluajevi A, B i C), neophodno je
vriti prenos informacija izmeu instrukcija. Obino se za prenos informacija koriste uslovni
markeri (condition code). Kod alternative A (Tabela 4.2) zahtjevaju se tri posebne instrukcije
radi izvrenja uslovnih operacija (instrukcija 1 za testiranje, instrukcija 2 za izbor uslova, a
instrukcija 3 za koritenje uslova). U svijetlu estog koritenja uslovnih operacija, ovo je veoma
neefikasno i zbog toga se ova alternativa ne koristi kod komercijalno raspoloivih maina.
Alternativa B prikazuje klasino rjeenje registarski orijentisanih arhitektura. Uslovni
markeri se koriste za promjenu informacije izmeu dvije instrukcije. Prva instrukcija obavlja
test, dok druga instrukcija vri izbor i koristi generisani uslov. Kod mikroprocesora MC68020,
test se obavlja pomou instrukcija tipa ADD, MUL, CMP i TST, dok se dijelovi koji se odnose
na izbor i koritenje uslova obavljaju od strane instrukcija Bcc ili Scc. Glavni razlog ovakvog
izvoenja ogleda se u tome to se dio koji se odnosi na test esto izvodi implicitno (izvedeni
rezultati se generiu od strane ADD, MUL i drugih instrukcija), i to kod registarski
orijentisanih maina test instrukcije koriste instrukcioni format aritmetikih operacija (na
primjer CMP ima isti format kao ADD i SUB), a to ne ostavlja dovoljno prostora u formatu
instrukcije za dijelove koji se odnose na izbor i koritenje uslova. Alternativa C se koristi kod
magacinski orijentisanih maina i kod softverski orijentisanih arhitektura (Pascal P-kod). Kod
ovih arhitektura ne postoje uslovni markeri, ali postoje specijalne instrukcije pomou kojih se
realizuje dio testa i dio izbora. Ovo se izvodi jednom instrukcijom, poto ove instrukcije ne
specificiraju bilo kakve operande (operandi se implicitno specificiraju preko magacina).
Shodno tome postoji dovoljno prostora za specifikaciju dijela koji se odnosi na izbor u dijelu
koji propada testu. Lokacija rezultata dijela, koji pripada izboru, se takoe odreuje implicitno to je vrh magacina.

Primjer 3:
Instrukcija GRTR (dio testiranja i izbora) a pripada skupu naredbi maine B6700 se izvrava na
slijedei nain:
if (M[(SP)])>(M[(SP)-1]) then
(M[(SP)-1]:=True
else
(M[(SP)-1]:=False;
SP:=(SP)-1; (*dekrementira se pokaziva magacina*)
Instrukcije koje koriste dio koritenja uslova su:

__________________________________________________________________________ 21

Grupa BR kod B6700 u samoj instrukciji specificira adresu grananja (kao relativni
razmjetaj), dok DB grupa specificira implicitno adresu grananja na vrh magacina. Operacije
BRTR i DBFL imaju slijedee znaenje:

BRTR omoguava relativno grananje na odredite specificirano u Displ polju instrukcije


if (M[(SP)]) = True then PC:=(PC)+Displ;
SP:=(SP)-1;
DBFL obezbjeuje odredite kod izraunatog grananja. Odredite se odreuje, kao
apsolutna adresa, iz magacina:
if (M[(SP)]) = False then PC:=(M[(SP)-1]);
SP:=(SP)-2;

Kod alternative D, da bi se obavila uslovna operacija, potrebna je samo jedna


instrukcija. Koritenje uslovnih markera je redundantno kod ove arhitekture. Tipian primjer
registarsko orijentisane arhitekture koja kombinuje sva tri dijela u jednoj instrukciji je protoni
MIPS (engl. Microprocessor without Interlocked Pipeline Stages) procesor. Kod ovog procesora
nema uslovnih markera, a koristi se eksplicitna compare-and-branch instrukcija za etiri
operanda (uslov, dva izvorna operanda koji se porede, i razmjetaj za mjesto grananja), gdje se
uslov specificira kao dio instrukcije. Kada se javi prekid (interrupt) neophodno je zapamtiti
uslovne markere ili izabrani uslov, jer oni pripadaju statusu prekinutog procesa. Alternativa B,
shodno tome, zahtjeva prostor u statusnom registru (SR) za pamenje uslovnih markera (bitovi
0-4 SR registra procesora MC68020). Kod alternative C, rezultat selektovane operacije se pamti
u magacin, tako da se ne preduzimaju posebne mjere kada se javi prekid. Kod alternative D, ne
postoje uslovni markeri tako da nema potrebe da se bilo ta pamti.

4.4. Koritenje uslova


Uslov koga generie izborni (selekcioni) dio moe se koristiti na dva razliita naina: da
se pamti uslov, ili da se promjeni programski tok (slika 4.5).

__________________________________________________________________________ 22

Sl. 4.5. Koritenje uslova.

4.4.1. Pamenje uslova


Pamenje uslova selekcionog dijela je vano kod HLL gde se ovaj rezultat dodeljuje
Boolean promenljivoj. Analizirajmo, na primjer, iskaz B:=(XY). Scc instrukcijom u primjeru
koji slijedi na korektan nain se podravaju HLL iskazi.

Primjer 4:
Kod MC68020 na elegantan nain se podrava HLL iskaz B:=(XY) koristei Scc (Set
Acording to Condition) instrukciju (slika 4.6).

Sl. 4.6. Format Scc instrukcije mikroporcesora MC68020.


Ova instrukcija postavlja sve bitove odredinog bajta operanda na "1" ako je uslov
istinit, i na "0" ako je uslov pogrean. Uslovi mogu biti bilo koji od onih definisanih u Tabeli
4.1.

__________________________________________________________________________ 23

4.4.2. Promjena redosljeda instrukcija (programskog toka)


Koritenje uslova da se promjeni redosled instrukcija (tok programa) ukljuuje slijedea
tri aspekta (vidi sliku 4.5):
1.
specifikacija adrese
2.
faktor grananja - broj uslova koji se koriste (dvo-, tro- i N-struki skokovi pri emu se
dvostruki skok najee implementira).
3.
aktiviranje (implicitno ili eksplicitno) koristi dio uslova.
Specifikacija adrese
Specifikacija adrese se, shodno slici 4.5, moe izvesti u zavisnosti od apsolutne ili relativne
adrese koja se moe specifirati implicitno ili eksplicitno.
Apsolutna specifikacija adrese je jednostavna, i pored toga to zahtjeva punu adresu, a ne
obezbjeuje relokatibilni kod.
Apsolutna eksplicitna specifikacija adrese se javlja kada je apsolutna adresa specificirana kao
operand instrukcije, kao kod JUMP instrukcije. Ovo nije uobiajeni nain za implementaciju
BRANCH instrukcija, jer se ne obezbjeuje relokatibilnost koda (programa).
Apsolutna implicitna specifikacija adrese se javlja kada je apsolutna adresa specificirana prije
njenog koritenja. Zbog toga, u trenutku koritenja, nije potrebna adresna specifikacija jer se
koristi unaprijed specificirana apsolutna adresa. Trapovi i prekidi obino koriste apsolutne
implicitne adrese, koje omoguavaju automatske skokove na rutine koje su smjetene na
fiksnim lokacijama i poznate su kao rituine za obradu izuzetaka (exception handlers). Ovi
skokovi su u najveem broju sluajeva posljedica: premaaja, dijeljenja nulom, ili spoljnih
prekida i dr.
Relativna specifikacija adrese predstavlja oblik baznog adresiranja. Ipak, kako se programski
broja (PC) obino koristi za specifikaciju bazne adrese, adresiranje se ipak zove PC-relativno
adresiranje. Relativno adresiranje je obino poeljnije u odnosu na apsolutno adresiranje, jer
automatski generie relokatibilni kod, a za specifikaciju relativne adrese je obino potrebno
nekoliko bitova.
Relativna, eksplicitna specifikacija adrese je ona kod koje instrukcijom specificira relativna
adresa. Ova specifikacija se koristi od strane najveeg broja arhitektura u obliku BRANCH
instrukcije. Njihova prednost je u tome to su bit efikasne i obezbjeuju relokatibilni kod (slika
4.6).

Primjer 5:
Instrukcija Bcc (Branch According to Condition) kod MC68020 (slika 4.7) je
dvooperandska instrukcija: prvi operand specificira uslov koji se bira, a drugi operand
specificira relativni razmjetaj kao neposredni dio instrukcije.

__________________________________________________________________________ 24

Sl. 4.7. Format instrukcije Bcc mikroprocesora MC68020.


BRANCH instrukcije su veoma esto koritene upravljake instrukcije - ranije smo
ukazivali da one ine 23,4% svih instrukcija koje se izvravaju. Najvei broj arhitektura,
ukljuujui i MC68020, ima specijalni oblik ove instrukcije, kao to je relativni veliki
razmjetaj koji je dio instrukcije (prva rije instrukcije).
Relativna, implicitna specifikacija adrese znai da je relativni razmjetaj implicitno
specificiran. Ovo je obino fiksni razmetaj ija je vrijednost "1". Koristi se, na primjer, kada se
dijelovi za test, izbor i koritenje uslova moraju izvesti jednom instrukcijom (alternativa D iz
Tabele 4.1), jer se esto ne odreuje operand za eksplicitnu specifikaciju adrese koji pripada
dijelu za koritenje uslova. Ovakav princip je bio primjenjivan kod nekih starih arhitektura, kod
kojih su sve instrukcije iste duine, a relativna lokacija je bila jednu lokaciju dalje u odnosu na
narednu instrukciju (tj. PC se poveava za 1 ako je uslov istinit). Efekat ovoga je da instrukcija
u narednoj poziciji (koja mora biti duine jedne rijei) moe se preskoiti uslovno. Zbog toga se
ove instrukcije zovu SKIP.

Primjer 6:
Interesantni primjer relativne, implicitne specifikacije adrese sreemo kod IBM/704
CAS (Compare Accumulator with Storage) instrukcije (slika 4.8).

Sl. 4.8. Format CAS instrukcije procesora IBM/704.


Kod IBM/704 arhitekture koriste se instrukcije fiksnih duina od po 36 bitova, koje
omoguavaju da se CAS instrukcija izvri kao trostruki SKIP. Ovaj primjer je interesantan jer
na jasan nain pokazuje kako je ova arhitektura imala uticaja na definiciju programskog jezika
FORTRAN, i da je FORTRAN, kao jezik, vie mainski orijentisan nego to bi trebalo da bude.
CAS instrukcija se koristi kao polazna taka za definiciju FORTRAN iskaza IF (A-B) 10,20,30,
to znai if A<B then goto 10 else if A=B then goto 20 else goto 30, gde su 10, 20, 30 labele.

__________________________________________________________________________ 25

Faktor grananja
Veliki broj maina podrava instrukcije koje nude dva alternativna naina da se produi
sa programskim izvrenjem, bilo sekvencijalno ili pomou grananja (jumping). Drugim
rijeima, faktor grananja je dva. Prethodnim primjerom je opisana instrukcija grananja na tri
razliita mjesta. Faktor grananja N je vaan kod izvrenja iskaza case. Kod ovog tipa iskaza,
izraunata vrijednost (case selektor) odreuje koji put treba izabrati. Kako kod najveeg broja
maina ne postoji specijalna instrukcija za ovo, case izraz se obino izvrava koristei se
bezuslovnom instrukcijom "jump", sa adresom koja se izraunava (koristi se bazno adresiranje).

Primjer 7:
Kod VAX-11 postoji specijalna CASE instrukcija. Tip podatka (bajt, rije ili duga rije)
selektora, baza i granica operanda se odreuje od strane opkoda, dok je tip podatka operanda
koji ukazuje na razmjetaj uvjek rije.
CASE selector,base,limit,displ[0] ... displ[limit]
Tmp:=selector-base;
PC:=(PC)+if Tmplimit
then (disp[Tmp])
else (2+2*limit);
Privremena vrijednost Tmp se izraunava oduzimanjem baznog od selektorskog
operanda. Vrednost Tmp se zatim poredi sa operandom "limit": ako je on manji ili jednak sa
njim, dodaje se razmjetaj PC-u, koji se bira iz liste razmjetaja na osnovu Tmp vrijednosti; ako
je Tmp vei od operanda "limit", tada se obavlja skok preko liste razmjetaja. Na primjer,
FORTRAN iskaz goto (10,20,30),I se prevodi u

Aktiviranje i uslovne instrukcije


Aktiviranje dijela koritenja uslova se moe izvesti na dva naina:
(1)
Eksplicitno aktiviranje - specifine instrukcije (na primjer, instrukcije uslovnog
grananja) se koriste za odreivanje dijela koritenja uslova. Ovo se uobiajeno izvodi
standardno.
(2)
Implicitno aktiviranje - upotreba dijela koritenje_uslova se javlja kao sporedni
efekat drugih eksplicitno specificiranih instrukcija. Implicitno aktiviranje se koristi kada treba
da se obavi funkcija "nadgledanja" sa ciljem da se detektuju izuzetni uslovi (kao to su na
primjer, premaaj, podbaaj ili dijeljenje nulom). Implicitno aktiviranje se moe posmatrati kao
uslovna operacija koja je aktivna (dozvoljena) u sklopu analize velikog broja instrukcija (na
primjer, kod situacije djeljenje nulom analiza se odnosi na cio program).
Instrukcija se moe uiniti uslovnom ako se specificira da se provjerava odreeni uslov
prije nego to se instrukcija izvri. Ako uslov nije zadovoljen, instrukcija se ne izvrava. Ove
__________________________________________________________________________ 26

instrukcije se zovu uslovne instrukcije. Primjer arhitekture sa uslovnim instrukcijama je


procesor ARM (Acorn RISC Machine), kod koje svaka instrukcijaima 4-bitno polje koje
ukazuje na uslove (condition field). Ako je uslov istinit, instrukcija se izvrava, ako ne preskae
se. Drugi oblik uslovne instrukcije je "compare-and-test" instrukcija, kod koje rezultat
(rezultujui uslovni kod) zavisi od uslovnog koda tekue instrukcije. Ove instrukcije se zovu
instrukcije uslovnog testa, i veoma su vane kod aritmetike poveane prezicnosti. Rezultat test
instrukcije kada je operand obine preciznosti je <0, =0, ili >0; za operande poveane
preciznosti, uslovni kodovi treba da reflektuju vrijednost potpunih operanada u poveanoj
preciznosti. Druge instrukcije kod kojih postoje uslovni sporedni efekti su aritmetike
instrukcije, kao to su "add with carry" i "subtract with carry". Rezultujui sporedni efekti
moraju odraavati status tekuih metacifara. Ovo znai da se formula za Z bit proiruje
zahtjevom da rezultujui Z bit moe jedino biti postavljen u stanje "istinit", ako su tekua
metacifra i sve prethodne metacifre jednake nuli. Na ovaj nain marker Z se brie ako rezultat
nije nula. U tabeli 4.3 je prikazana implementacija HLL iskaza.
if (A>B) and (C<D) then S1;
B:=(XY);
za neke arhitekture i alternative B, C i D iz tabele 4.2.
Tab. 4.3.

4.5. Iteracija
Normalni mehanizam za realizaciju operacija nad elementima podataka koji pripadaju
strukturi (na primer, svim elementima vektora) zove se iteracija i ini ga ponavljanje veeg
broja instrukcija nad svakim elementom podataka. Najee korieni mehanizmi kod HLL-ova
su for, while i repeat iskazi.

4.5.1. For iskaz


Opti oblik iskaza je slijedei:
__________________________________________________________________________ 27

for <upravljaka promjenljiva>:=<poetna vrijednost> step <vrijednost koraka>


until <krajnja vrijednost>
do <iskaz>
Kod Pascala for iskaz je manje opti jer se upravljaka promjenljiva (control value)
moe mijenjati samo za +1 ili -1, umjesto za vrijednost koraka (step value) koja moe primiti
proizvoljnu vrijednost, kako pozitivnu, tako i negativnu.
Neki vani implementacioni aspekti for iskaza su:
1.
Provjera inicijalne vrijednosti: Provjera inicijalne vrijednosti zajedno sa vrijednou
koraka mora se izvoditi sa ciljem da se odredi kada je ak i prva iteracija petlje
dozvoljena. Na primer, kod iskaza for I:=5 step+1 until 3 petlja se nee izvriti.
2.
Stop kriterijum; petlja se moe zaustaviti na dva naina:

Kada upravljaka promenljiva primi vrijednost koja je van intervala odreenog


poetnom i krajnjom vrijednou (FORTRAN i ALGOL 60 koriste ovaj
kriterijum).

Kada je upravljaka promjenljiva jednaka krajnjoj vrijednosti (na primjer, kod


Pascala se zahtjeva ovo, jer se u ovom sluaju iteracije u podopsegu prekidaju sa
vrijednou upravljake promjenljive koja je unutar opsega i zbog toga moe biti
istog podopsenog tipa).
Kao i kod prethodnih alternativa, kada se HLL-ovi analiziraju, nije mogue raspolagati
jedinstvenom mainskom instrukcijom koja se moe koristiti u svim sluajevima. Kod
MC68020 for iskaz se podrava pomou DBcc (test condition, decrement and branch)
instrukcije. Kod VAX-11 pomou tri instrukcije se podrava for iskaz.

Primjer 8:
Instrukcija ACB (Add, Compare and Branch) kod VAX-11 maine ima etiri operanda i
funkcije koje su slijedeeg oblika:
ACB limit, add, index, displacement
index:=index + add
if {(add 0) and (index limit)} or {(add < 0) and (index limit)} then
PC:=(PC) + SEXT(displacement) ; SEXT = Sign-extended (Znakovno proiren)
Instrukcija podrava opti oblik for iskaza. Kako je veliina koraka promjenljiva (kako po
vrijednosti tako i po znaku) ona se moe mijenjati unutar petlje, kako se to specificira kod
ALGOL-a. Ostale dvije instrukcija AOB (Add One and Branch) i SOB (Subtract One and
Branch) su pojednostavljeni sluajevi koji koriste veliinu koraka +1 i -1, respektivno, a SOB
ima implicitnu krajnju vrijednost 0. Ove instrukcije su pogodne za implementaciju, na
primjer, for iskaza kod Pascala.

4.5.2. While iskaz


Iskaz while ... do se obino ne podrava specijalnim instrukcijama. Blok na kome se vri
iteracija ima test na poetku, koji uzrokuje skok (jump) "preko" bloka ako specificirani uslov
nije istinit. Zadnja instrukcija bloka je bezuslovni skok na test na poetku. Mogui oblik
while ... do iskaza za mikroprocesor MC68020 ima oblik:

__________________________________________________________________________ 28

4.5.3. Repeat iskaz


Iteracioni mehanizam... until, se obino ne podrava specijalnim instrukcijama. Blok
nad kojim se vri iteracija ima test na kraju, tako da se blok izvrava najmanje jedanput. Ovo
znai da ovaj iteracioni mehanizam zahtjeva manje instrukcija u odnosu na while ... do
konstrukciju, jer ne postoji bezuslovna instrukcija skoka (jump). Veliki broj optimizirajuih
kompilatora moe prepoznati petlju tipa while ... do koja e se izvriti najmanje jedanput i da
prevede taj tip petlji u njihov repeat ... until ekvivalent. Mogue prevoenje repeat ... until
jezike konstrukcije kod MC68020 ima slijedei oblik:

Primjer 9:
Kod MC68020 postoji instrukcija DBcc (Decrement and Branch According to Condition) kao
to je prikazano na slici 4.9.

Sl. 4.9. Format instrukcije DBcc mikroprocesora MC68020.


DBcc instrukcija podrava tri osnovna iteraciona mehanizma. Ova instrukcija se
postavlja na kraj kod repeat ... until i for petlji, a na poetku kod while ... do petlji. DBcc prvo
testira uslov da bi odredila kada je zavreni uslov petlje istinit. Ako je istinit, operacije se ne
izvravaju i petlja zavrava. Ako je uslov zavretka pogrean, LS rije vrijednosti koja se broji u
Dn se dekrementira za 1 (broja se definie kao 16-bitni). Ako je rezultat -1 petlja se zavrava, a
izvrenje se produava slijedeom instrukcijom. Ako rezultat nije jednak -1, izvrenje se
produava na lokaciji oznaenoj tekuom vrijednou PC-a, plus 16-bitni razmjetaj koji se
__________________________________________________________________________ 29

znakovno proiruje (pozitivni za while ... do petlje, a negativan u ostalim sluajevima), a


specificiran je DBcc instrukcijom.

LITERATURA:
- prof. dr Krstan Bosnjak, (Banja Luka, 2002.), Osnovi programiranja,
- Thomas H. Cormen, (Toronto, 2002.), Uvod u algoritme,
- McGraw-Hill, (Osborne, 2004.), Struktire podataka demistificirane,
__________________________________________________________________________ 30

- Randy L. Haupt, Sue Ellen Haupt, (Unated States, 2004.), Praktini


genetski algoritmi,
- Sumit Ghosh, (New York, 2004.), Dizajn algoritama za mrene
informacione tehnoloke sisteme.

__________________________________________________________________________ 31

You might also like