Professional Documents
Culture Documents
Principi Programiranja-Upravljanje Tokom Programa
Principi Programiranja-Upravljanje Tokom Programa
Predmet
PRINCIPI PROGRAMIRANJA
Predmetni nastavnik
Prof. dr Zoran . Avramovi, dipl.in.elek.
Student
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
__________________________________________________________________________
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
__________________________________________________________________________
analiza problema,
uoavanje problema,
definisanje sistema,
analizu,
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.
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
__________________________________________________________________________
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.
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.
__________________________________________________________________________
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.
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.
Rezultativnost Za svaki mogui skup ulaznih veliina u algoritmu mora biti definisano
to treba smatrati rezultatom, odnosno izlaznom veliinom algoritma.
__________________________________________________________________________ 10
prirodne jezike,
meta jezike,
programske jezike.
__________________________________________________________________________ 11
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
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
__________________________________________________________________________ 13
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.
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:
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.
(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.
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).
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:
__________________________________________________________________________ 22
Primjer 4:
Kod MC68020 na elegantan nain se podrava HLL iskaz B:=(XY) koristei Scc (Set
Acording to Condition) instrukciju (slika 4.6).
__________________________________________________________________________ 23
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
Primjer 6:
Interesantni primjer relativne, implicitne specifikacije adrese sreemo kod IBM/704
CAS (Compare Accumulator with Storage) instrukcije (slika 4.8).
__________________________________________________________________________ 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
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.
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.
__________________________________________________________________________ 28
Primjer 9:
Kod MC68020 postoji instrukcija DBcc (Decrement and Branch According to Condition) kao
to je prikazano na slici 4.9.
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
__________________________________________________________________________ 31