You are on page 1of 51

TEHNIKI FAKULTET BIHA ODSJEK: ELEKTROTEHNIKA SMJER: INFORMATIKA

Uvod u arhite turu ra!u"ar# ih #i#te$a


ASSEMBLER SKRI%TA

Autor:

Mr&Meh$ed Ar"autovi' di()&i"*&e)&


Odlukom nastavno-naunog vijea Tehnikog fakulteta u Bihau od 25.04.2011 odob ava se m .!ehmedu " nautoviu di#l.ing.el. i$davanje % &tam#anje s' i#te ()vod u u hitektu u auna skih sistema*. +a e'en$enta s' i#te ()vod u u hitektu u auna skih sistema*se imenuje # of.d .,amil -uki.

5.ASEMBLER
5.1 Simboliko mainsko programiranje
Ma+i"# i (ro*ra$ Program se u memoriji raunara smjeta u binarno kodiranom obliku.Takav oblik je jedini oblik koji moe prihvatiti upravljaka jedinica raunara i izvravati ga. Da bi program za rjeenje nekog problema morao da bude izvravan u raunaru, potrebno je da se on pripremi u binarno kodiranom obliku.Me utim, pisanje programa u tom obliku teak je i naporan zadatak iz vie razloga! ". Treba znati napamet sve kodove operacija# $. Treba znati unaprijed mjesta u memoriji na kojima %e on biti smjeten, jer se sve adrese piu sa apsolutnim vrijednostima# &. Treba znati pisati vrlo veliki spoj binarnih ci'ara. Program za prve raunare bili su pisani na pomenuti nain jer tada nisu postojala druga sredstva.(li, programeri su prvo brzo poeli da sebi olakavaju posao pri pisanju programa.Prvo takvo mogu%e poboljanje bilo je pisanje programa umjesto u binarnom u heksadecimalnom obliku.)bor proste veze izme u binarnog i heksadecimalnog oblika prevo enje u binarni oblik vreno je prije pripreme programa za unoenje, ali je brzo prvo taj zadatak povjeren posebnom programu koji je sam vrio prevo enje u binarni oblik.Pri tome je u instrukcijama kod operacije odvojen od adresnog djela instrukcije radi lakeg pra%enja. *eto drugaije pisanje programa,ali dosta slino prethodnom, sastojalo se u pisanju koda operacije u adresu u decimalnom obliku. Po teini to je slino, a program za prevo enje bio je neto sloeniji jer je sada trebao vriti prevo enje iz decimalnog u binarni oblik. *ajvaniji nedostaci pisanja program u binarnom ili heksadecimalnom obliku su sre eni. "+ ,dre ivanje stvrani adresa. Prije poetka pisanja programa potrebno je znati koliko %e memorijskog prostora zauzimati progrma, a koliko podaci. Me utim, ovdje jo nema in'ormacije o tome koliko konstanti ima u progrmau, koliko %e memorije biti potrebno za me urezultate, a koliko %e biti dug sam program. $+ -vo enje izmjena.(ko su programi ve% napisani, a treba uzeti izmjene, posebno ako treba nove instrukcije, nastaje potreba da se vri pomjeranje ve% napisanih instrukcija i podataka, to zahtjeva izmjenu adresa u mnogim instrukcijama. &+ Pra%enje programa. Program napisan u ci'arskom .kodiranom+ pbliku nepregledan je i ne moe se lako pratiti u razumjeti.,vo je posebno .

vano ako treba provjeriti ispravnost napisanog programa ili unjeti izmjene u njega. /+ Pam%enje kodova.,vakav nain pripreme programa zahtjeva da se pamte ci'arski kodovi svih operacija, kojih ponekad ima nekoliko stotina. 0jeenje navedenih nedostataka u pripremi programa na eno je u simbolikom predstavljanju adresa po kojim se smjetaju instrukcije, kao i u simbolikom predstavljanju svih djelova instrukcija. Si$,o)i! a i$e"a 1imboliko ime .simboliki naziv, identi'ikator+ predstavlja niz sastavljen od slova abecede i decimalnih ci'ara koji poinje slovom, a slui za oznaavanje nekog pojma ili objekta.2oritenje simbolikji imena u obinom ivotu je vrlo rairen metod, da je i to razlog njihovog uvo enja u programiranje. 2odovi operacija u instrukciji se simboliki imena koja istovremeno predstavljaju i mnemonike oznake .tako izabrana imena potpomau da se lake zapamte i odgonetnu pojmovi na koje se ona odnose+. *a primjer, mnemonika oznaka za sabiranje moe biti 1(3, pomeranje akumulatora P(2, i sl.1matra se da je najbolje koristiti mnemotehnike oznake od $,& ili / simbola .slova i ci'ara+, a praktino se taj spoj kre%e od " do 4 ili 5 simbola. )a simbiloko oznaavanje operacija realizovanih u raunaru mi %emo koristiti simbolika imena koja predstavljaju mnemonike .ili mnemotehnike+ oznake naziva tih operacija na engleskom jeziku, budu%i da su gotovo svi raunari koje mi koristimo prizvedeni na engleskom govornom podruju. (drese operanada u adresnom djelu instrukcije tako e se oznaavaju simbolikim imenima.Pri tome je usvojen princip da simbolika imena adresa operanada predstavljaju nazive tih operanada.*a primjer, ako zapie,o 6D 7, tada 7 predstavlja simboliko ime memorijske lokacije u koju %e biti smjetena prednost za promjenljivu koju smo nazvali 7.-mjesto simbolikih imena ponekad je dozvoljeno da se za oznaavanje adresa operanada koriste, tzv. adresni izlazi.- adresnom djelu instrukcije koriste se ponekad simbloika imena i u djelu adresnih modi'ikatora. - programu esto nastaje i potreba da se pozivamo na neku instrukciju u njemu.- tom sluaju potrebno je navesti simboliko ime za instrukciju u cjelini koje sada nazivamo oznaka ili naziv instrukcije .nekad se koristio i termin 8 obiljeje instrukcije+. ,znaka instrukcije 'aktiki predstavlja simboliko ime za adresu memorijske pokazuje u kojo %e biti smjetena ta instrukcija. Si$,o)i! i o,)i i"#tru -i.e

Poto se koriste simbolika imena za iznaavanje pojedinih elemenata instrukcije, slijedi opti oblik instrukcije jednoadresnog raunara! 9:oznaka;!< :oper.;9:modi'ikator;<9adres.dio;<9#:komentar;< 4

,vako predstavljena instrukcija naziva se simbolika .mainska+ instrukcija.=mena stavljena u uglaste zagrade nisu uvijek obavezna.>lement :oznaka; predstavlja ime instrukcije, tj. simboliku oznaku adrese memorijske lokacije u kojo %e instrukcija biti smjetena.,znaka instrukcije koristi se samo u sluajevima kada se na neku instrukciju pozivamo u programu.>lement :modi'ikator; slui za speci'ikaciju vie podataka koji se prije svega koriste da ukau na modi'ikacije adrese pri adresiranju ali mogu predstavljati i druge podatke neophodne za takvo de'inisanje operacija.>lement :adr.dio; predstavlja simboliko ime memorijske lokacije u kojoj je smjeten operand.2od nekih instrukcija umjesto adrese operanada moe se na%i neki drugi podatak.>lement :komentar;, koji nije obavezan i nije sastavni dio instrukcije, slui da se detaljnije speci'ikuje ta se sotvaruje tom instrukcijom. Primjer. =nstrukcija napisana u simbolikom obliku izgledala bi ovako! P,?! M,@ (7, (D0 # Prenos podataka sa adrese (D0 u# registar (7. Pisanje programa tako da se instrukcije predstavljaju u simbolikom obliku naziva se simboliko mainsko programiranje ili asemblersko programiranje. - njemu su rjeeni mnogi nedostaci koji su se javljaju tokom pisanja instrukcija u ci'arskom .kodiranom+ obliku. A#e$,)er# i .e/i Programski jezik kod kojh se instrukcije u programima predstavljaju simbolikim mainskim instrukcijama nazivaju se simboliko mainski jezici ili asemblerski jezici.,dlikuju se time to cu vrlo slini mainskom jeziku konkretnog raunara i sa njim stoje u odnosu "!", tj. svakoj simbolikoj instrukciji odgovara jedna mainska instrukcija.=zvorni kod napisan na asemblerskom jeziku sadri! (semblerske instrukcijeA instrukcije mikroprocesoru i (semblerske direktive .pseudoinstrukcije+ namjenjene asembleru. namjenjene 8 instrukcije

1imboliki mainski jezik pored toga sadri i niz dodatnih mogu%nosti za pisanje, izmjenu u pripremu programa. Primjer! # pushds mov aB,o pushaB mov bB,dseg

mov ds,bB mov es,bB # mov dB,o''set poruka" call prints mov dB,o''set niz call inputs call neCline # 2oritenje asemblerskog jezika za programiranje zahtjeva da raunar ima poseban program kojim se simboliki program prevodi u mainski program tj. u binarni kod. A#e$,)eri (sembler predstavlja poseban program koji pripada grupi sistemskih programa poznatih pod imenom programski prevodioci i slui za prevo enje simbolikih programa u mainske programe.Pri tome se element oznaka prevodi u adresi memorijske lokacije gdje %e instrukcija biti smjetena, operacija se prevodi u binarni kod peracije, a adresa operacije u adresu gdje je smjeten podatak nad kojim se izvrava operacija.Modi'ikatori se prevode u posebne bitove ili grupe bitova koji speci'ikuju dodatke in'ormacije za izvrenje instrukcije.2omponovanjem elemenata! operand, modi'ikatori, adresa operanda 'ormira se binarni kod instrukcije. Da bi asembler morao da vri prevo enje, potrebno je zadati poetnu adresu u memoriji od koje poinje smjetanje programa.2ako kod savremenih raunara ovaj posao obavljaju posebni sistemski programi, prevo enje sa asemblerskog jezika se vri u relativnim adresama poev od adrese D.1tvarne adrese 'ormirajuse u momentu unoenja programa u memoriju prije izvrenja.

5.2 Asemblerski jezik mikroprocesora i8086


Program napisan na asemblerskom jeziku mikroprocesora iEDE4 predstavlja izvorni asemblerski program i sastoji se od naredbi jezika koje mogu biti! "+ asemblerskie instrukcije i $+ asemblerske direktive. (semblerske instrukcije u izvornom asemblerskom programu imaju ulogu da de'iniu ta mikroprocesor treba da uradi.1vakoj asemblerskoj instrukciji odgovara jedna ili vie instrukcija na mainskom jeziku. - prilogu na kraju ubenika prikazane su sve asemblerske instrukcije za mikroprocesor iEDE4.

(semblerske direktive se koriste da bi se odredio ta asembler treba da uradi, tj. kako da u procesu prevo enja tretira asemblerske instrukcije i podatke u datom izvornom programu. 2ao i u niim programskim jezicima, i asemblerski jezik u svojim naredbama sadri promjenljive, oznake, konstante i operatore. %ro$.e").ive Promjenljive predstavljaju oznaku za pojedine, tj. za odre ene memorijske lokacije u koje se smjetaju vrijednosti tih podataka.Mogu se u programu de'inisati na dva naina! A direktivom za de'inisanje podataka i A label 8 direktivom 1vaka promjenljiva je odre ena sljede%im atributima! segment 8 segment memorije u kome se nalaze vrijednosti promjenjive# pomjeraj 8 rastojanje u bajtovima od poetka segmenta do poetka memorijske lokacije promjenljive u okviru segmenta# tip 8 duina promjenljive u bajtovima.

- asembleru za iEDE4, de'inisani su sljede%i tipovi promjenljivih! La,e)e 6abele predstavljaju oznake za djelove programa na koje se moe Hpre%iI ili HskoitiI ili za djelove programa koje se mogu pozvati kao potprogrami.2ao i promjenljive, i labele sadre tri atributa!segment# pomjeraj u tip. 1egment i pomjeraj su atributi koji imaju isto znaenje kao i kod promjenljivih, dok tip speci'ikuje vrstu instrukcije koja %e se izvriti na datoj lokaciji u programu.)a labele su de'inisani sljede%a dva tipa! *>(0 8 oznaka za labelu kojo %e se pristupiti iz istog 'izikog segmenta i J(0 8 oznaka za labelu u kojo %e se pristupiti iz drugog 'izikog segmenta. 3FT> 8 za promjenljive duine od " bajta# G,0D 8 za promjenljive duine od $ bajta# DG,0D 8 za promjenljive duine od / bajta.

Ko"#ta"te

2onstante koje se koriste u asemblerskom jeziku mokroprocesora iEDE4 mogu biti! - brojane i - znakovne ili slovne. 3rojane konstante mogu biti! - binarne, - decimalne i - heksadecimalne. 3inarne konstante se satoje od binarnih ci'ara .nule u jedinice+ na ijem kraju mora da stoji oznaka da se radi o binarnom brojnom sistemu#slovo 3. *a primjer! ""DD"D"D3. Decimalne konstane se sastoje od niza arapskih ci'ara .od D do K+. *a kraj niza ci'ara postavlja se oznaka za dekadni brojni sistem! slovo D.)a razliku od binarnih konstanti, decimalne konstante ne moraju da sadre oznaku brojnog sistema, tj. ukoliko se ba kraju niza ci'ara ne nalazi slovo D, ono se podrazumjeva. *a primjer, $ED i $E su ispravno zapisane konstante. Leksadecimalne konstante se sastoje od niza heksadecimalnih ci'ara .D,",$,&,/,M,4,5,E,K,(,3,?,D,>,J+.*a kraju niza heksadecimalnih ci'ara nalazi se slovo L, kao oznaka za heksadecimalni brojni sistem.*a primjer! "/D(L, (DJ&L... )nakovne konstante se sastoje od slova, ci'ara, gra'ikih simbola ili specijalnih znakova koji se zapisuju izme u navodnica il znakova apostro'a.*a primjer! H)nakovna konstantaI i N,vo je primjerN su ispravno zapisane znakovne konstante. O(eratori ,peratori imaju ulogu da modi'ikuju operande instrukcija asemblerskog jezika. Postoje! aritmetiki operatori! O, A, P, Q, M,D, 1L6, 1L0# logiki operatori! (*D, ,0, 7,0, *,T# ralacioni operatori! >R, *>, 6T, ST, 6>, S># povratnoAvrijednosni operatori! T, 1>S, ,JJ1>T, 6>*SLT, TFP>, 1=)># atributi! PT0, 1L,0T, TL=1, L=SL, 6,G# operatora bi%e objavljena na konkretnim

*amjenja pojedinih primjerima.

5.3. Asemblerske direkti e


Pored simbolikih mainskih instrukcija, jezik asemblera sadri i odre eni broj posebnih naredbi koje se ne prevode u mainski kod, ve% slue da daju odre ene in'ormacije asembleru .programuAprevodiocu+ za vrijeme

samog prevo enja.=n'ormacije koje se njima prenose nose upustva asembleru ta da uradi sa odre enim instrukcijama i dodacima.Te instrukcije se nazivaju naredbe asemblera, pseudonaredbe ili asemblerske direktive.,pti 'ormat asemblreskih direktiva je sljede%i! 9:ime;< :direktiva; 9#:komentar;< 9Upoe sa operandima;<

(semblerkse direktive se mogu podeliti na / grupe! "+ direktive za podrku segmentnog rada mikroprocesora iEDE4# $+ direktive za de'inisanje simbola, labela i inicijalizaciju promjenljivih# &+ direktive vezane za in'ormacije o lociranju programa# /+ direktive koje daju in'ormacije pri povezivanju programa. Dire tive /a (odr+ u #e*$e"to* rada $i ro(ro-e#ora i0102 1>SM>*T Q >*D1 8 omogu%ava de'inisanje logikih segmenata# (11-M> 8 de'inie sadraj segmentnih registara# S0,-P 8 omogu%ava kombinovanje razliitih logikih segmenata u jedan 'iziki segment. Dire tive /a (ro$.e").ivih: de3i"i#a".e #i$,o)a4 )a,e)a i i"i-i.a)i/a-i.u

>R- 8 omogu%ava de'inisanje sibmola# V A omogu%ava de'inisanje simbloa samo u numerikim izrazima# D3 8 de'inie promjenljivu tipa 3FT># DG 8 de'inie promjenljivu tipa G,0D# DD 8 de'inie promjenljivu tipa DG,0D# P0,? 8 de'inie labelu za grupu naredbi koja predstavlja potprogram# 6(3>6 8 de'inie ime teku%e lokacije koja se asemblira. Dire tive ve/a"e /a i"3or$a-i.e o )o-ira".u (ro*ra$a ,0S 8 postavlja broja instrukcija na eljenu prednost# >@>* 8 postavlja instrukcije iza ove direktive na razne lokacije u memoriji. Dire tive (ro*ra$a o.e da.u i"3or$a-i.e i)i (ove/iva".u 5)i" ova".u6

P-36=? 8 de'inie koje su konstante, promjenljive ili labele iz drugih programskih modula dostupne prilikom povezivanja# >7T>0* 8 de'inie one promjenljive ili labele koje %e se u datom modulu koristiti, akoje su kao P-36=? deklarisane u nekom drugom programskom modulu# *(M> 8 de'inie ime obgjetnog modula# 2

>*D 8 posljedna naredba u modulu koja oznaava zavretak procesa asemblera.

5.!. "#$%&# AS'()*'+S,#- #.S"+/,0#1A


3roj = vrsta instrukcija realizovanih u nekom racunaru zavisi od namjene = velicine procesora. *aime, praksa pokazuje da zavisno od primjene moze da se odredi najekonomicniji skup instrukcija. 2lasi'ikacija instrukcija u grupe srodnih instrkcija nije uvijek jednostavna. Mi cemo sve instrukcije asemblera za iEDE4 svrstati u jednu od slijedecih klasa! ". =nstrukcije za prenos podataka $. (ritmeticke instrukcije &. 6ogicke instrukcije /. =nstrukcije pomjeranja = kruzenja M. =nstrukcije za upravljanje tokom izvrsenja programa! a+ instrukcije za grananje b+ instrukcije za preskoke c+ instrukcije za programske petlje 4. -laznoA izlazne instrukcije 5. =nstrukcije za rad s potprogramima E. ,stale instrukcije =nstrukcijama za prenos podataka vrsi se pozivanje sadrzaja memorije u akumulator (2 ili u neki drugi registar procesora, slanje sadrzaja akumulatora ili nekog drugog registra procesora u memoriju, slanje iz jednog registra procesora u drugi, slanje iz jedne memorijeske lokacije u drugu, rad s magistralom = sl. (ritmeticke instrukcije sluze za izvrsenje osnovnih aritmetickih operacija! sabiranje, oduzimanje, mnozenje = djeljenje, zatim poredjenje dva sadrzaja, komplementiranje, povecanje ili smanjenje sadrzaja za neku zadanu vrijednost = sl. =nstrukcijama za logicke operacije realizuju se operacije prekidacke .3ulove+ algebra! (*D, ,0, 7,0 i *,T. =nstrkcijama za pomjeranje vrsi se pomjeranje binarnog sadrzaja nekog registra procesora, najcesce akumulatora, za odredjeni broj pozicija lijevo ili desno. Pri tome postije razne varijante, zavisno od toga da li je pomjeranje kruzno ili ne. =nstrukcije za upravljanje tokom izvrsenja programa ili instrukcije za grananje omogucavaju da se izvrsava jedan ili drugi dio programa, zavisno od nekog uslova dobijenog u toku rada programa. )ato one utjecu na redoslijed izvrsenja instrukcija. -laznoA izlazne instrukcije sluze za prenos podataka iz procesora na neki drugi peri'erni uredjaj ili za citanje sa peri'ernog uredjaja na procesor, takodje = ispitivanje, brisanje ili postavljanje indikatora stanja na peri'ernim uredjajima. - grupu instrukcija pod nazivom ostale instrukcije ukljucene su instrukcije koje se ne mogu svrstati ni u jednu od gore opisanih grupa. Mi cemo ovdje razmotriti instrukcije kao sto su instrukcije bez dejstva .nema operacije+ zaustavljanje ili prekid izvrsenja programa, cekanje na neki uslov, zabrana

10

ili dozvola programskog prekida = sl.

5.5. INSTRUKCIJE ZA PRENOS PODATAKA


=nstrukcije za prenos podataka mogu se podjeliti na cetiri grupe! ". =nstrukcije opste namjene $. -laznoA izlazne instrukcije &. =nstrukcije za prenos adresa /. =nstrukcije za prenos indikatora .'legova+ =*1T0-2?=W> ,P1T> *(MW>*> Srupi instrukcija za prenos podataka opste namjene pripadaju slijedece instrukcije! a+ M,D ,D0, =)@0 ,vom instukcijeom se desni .izvorni+ operand .=)@0+ kopira u lijevi .odredisni+ operand .,D0+ pri cemu desni operand = bitovi registra uslova ostaju nepromjenjeni. ,mogucava prenos podataka izmedju dva registra, memorije = registra i obrnuto, upisivanje konstante u registar ili u memorijsku lokaciju. =nstrkcija M,@ ne dozvoljava prenos podataka izmedju dvije memorijske lokacije = neposredno upisivanje podataka u segmentni registar, sto je posljedica ogranicenja samog mikroprocesora iEDE4. Primjeri! M,@ ?7, D7 !1adrzaj registra D7, kopira u registar ?7# M,@ ?=J0, K !-pisuje u menorijsku lokaciju broj K# M,@ (6, && !-pisuje konstantu .broj &&+ u registar# M,@ M>1T,, (7 !-pisuje sadrzaj registra (7 u memorijsku lokaciju M>1T,# a+ P-1L =)@0 ,vom instrukcijom se sadrzaj izvornog operanda =)@0 upisuje u magacinsku memoriju .stek+. Pri izvrsenju P-1L instrukcije, sadrzaj pokazivaca steka se dekrementuje .umanji+ za dva, a za tim se na vrh steak prenosi sadrzaj izvornog operanda =)@0. ,perand =)@0 mora biti duzine dva bjta = ne moze biti neposredni operand. Primjeri! P-1L37 ! .-M+ !V .37+ ! .-M+O" P-1L(7 ! 1adrzaj registra (7 se upisuje na vrh steka b+ P,P ,D0 ,vom instrukcijom se ostvaruje ispisivanje sadrzaja magacinske memorije, tj. Prenos podataka sa vrha steka u operand ,D0. Poslije izvrsenja ove instrukcije pokazivac magacina se inkrementuje .uveca+ za dva = time ukazuje na novi vrh magacina. Primjeri! P,P 37 ! .-M+ !V .-M+A"# .37+ !V ..-M++ P,P (7 ! 2opira sadrzaj sa vrha steak u (7 c+ 7?LS ,D0, =)@0 ,vom instrukcijom se razmjenjuju sadrzaji operanada ,D0 = =)@0. Pri izvrsenju ove instrukcije najmanje jedan operand mora biti registar, ali se segmentni registar ne moze koristiti kao operand.

11

Primjeri! 7?LS (7, D7 ! 0azmjenuju se sadrzaji registara (7 i D7 # 7?LS @(0, (7 ! 0egistar (7 se puni vrijednoscu promjenljive @(0 tipa DG = istovremeno promjenljiva @(0 uzima vrijednost sadrzaja 0egistra (7# d+ 76(T ,va instrukcija prenosi odredjeni clan niza .tabele+ u (6. 2oristi se iskljucivo indirektno adresiranje, zbog cega je neophodno da se prije poziva ove instrukcije inicijalizuje bazni registar .37+ na vrijednost pomjeranja podataka koji ce se prenijeti. =*1T0-2?=W> )( P0>*,1 (D0>1( Srupu instrukcija za prenos adresa karakterise odlika da se njima premjestaju e'ektivne adrese, a ne promjenljive. 1astoji se od slijedecih instrukcija. a+ 6D1 0>S, =)@0 ,va instrukcija prenosi podatak .&$ bita+ sa memorijske lokacije =)@0 = nizih "4 bitova u registar 0>S, a visih "4 bitova prenosi u registar D1. b+ 6>1 0>S, =)@0 ,va instrukcija proizvodi isti e'ekat kao = instrukcija 6D1, samo sto se umjesto segmentnog registra D1, puni segmentni registar >1. c+ 6>( 0>S, =)@0 ,vom instrukcijom se obavlja prenos u okviru istog segmenta adrese =)@0 od "4 bitova u registar 0>S. =sti e'ekat bi proizvela = slijedeca instrukcija! M,@ 0>S, ,JJ1>T =)@0# =)@0 je nziv promjenljive Primjeri! 6>( 37, P,D(?= ! Prenosi se adresa P,D(?= u registar 37 6D1 ?7, 1=M3,6= ! - registar ?7 se prenosi nizih "4 bitova, dok se u registar D1 prenosi visih "4 bitova adrese sa memorijske lokacije 1=M3,6=. =*1T0-2?=W> )( P0>*,1 =*D=2(T,0( .J6>S,@(+ 0egistar stanja .P1G registar+ je "4 bitni, a svaki njegov bit ce naziva indikator, 'leg ili marker. =nstrukcije za prenos indikatora ili markeri instrukcije se koriste bez operanada = imaju ulogu da prenose podatke u registar stanja. ,vu grupu instrukcija cine slijdece instrukcije. a+ 6(LJ ,vom instrukcijom se prenosi nizi bajt registra stanja u visi bajt registra (7. b+ 1(LJ ,vom instrukcijom se prenose bitovi registra (L u nizi bajt registra stanja. c+ P,PJ ,vom instrukcijom se vrsi prenos sadrzaja registra uslova .registra stanja+ na stek. d+ P-1LJ ,vom instrukcijom se vraca sadrzaj registra uslova sa steka.

12

5.6. ARITMETICKE INSTRUKCIJE


(ritmeticke instrukcije realizovane u mikroprocesoru iEDE4 mogu se podijeliti na tri grupe, zavisno od tipova operanada koje koriste! "+ =nstrukcije koje koriste operende u binarnom obliku $+ =nstrukcije koje koriste operande u pakovanom 3?D kodu &+ =nstrukcije koje koriste operande u nepakovanom 3?D kodu. (ritmeticke instrukcije se mogu podijeliti = prema operacijama koje realizuju nad operandima. Prema toj podjeli postoje slijedece grupe instrukcija! "+ =nstrukcije za sabiranje# $+ =nstrukcije za oduzimanje# &+ =nstrukcije za mnozenje# /+ =nstrukcije za dijeljenje. =*1T0-2?=W> )( 1(3=0(*W> )a realizaciju sabiranja brojnih podataka postoji pet instrukcija! a+ (DD ,D0, =)@0 ,vom instrukcijom se sadrzaj operanda =)@0 dodaje sadrzaju odredista ,D0. 2ao operandi se mogu pojaviti! A registri A registar = memorijska lokacija A memorijska lokacija = registar A neposredni operand = memorijska lokacija A neposredni operand = registar. Primjeri! (DD 37, ?7 ! 1adrzaj registra ?7 se dodaje sadrzaju registra 37, tj. .37+ !V .37+ O .?7+ (DD ?6, $$L ! *izi bajt registra ?7 se uveca za $$L a+ (D? ,D0, =)@0 ,vom instrukcijom se realizuje operacija sabiranja sa prenosom, tj. 1abira se sadrzaj operanada =)@0 = ,D0, dodaje sadrzaj ?J indikatora, a zbir upisuje u operand ,D0. 2ao operandi se mogu pojaviti svi tipovi koji se koriste kod obicnog sadrzaja. b+ ((( ,vom instrukcijom se koriguje rezultat sabiranja dvije nepakovane 3?D ci're. Predpostavlja se da se rezultat nalazi u nizem bajtu registra (7. c+ D(( ,vom instrukcijom se koriguje rezultat sabiranja dva bajta koji sadrze po dvije pakovane 3?D ci're. 2oristi se kada poslije sabiranja dva pakovana broja rezultat treba opet konvertovati u decimalno pakovani broj. d+ =*? ,D0 ,vom instrukcijom se operand inkrementuje, tj. ,perandu ,D0 se dodaje broj " = rezulatat upisuje na isto mjesto. 2ao operandi mogu se koristiti registri = memorijske lokacije. Primjeri! =*? D7 ! sadrzaj registra D7 se uvecava za "

1.

=*? M>M ! sadrzaj memorijske lokacije se uvecava za " =*1T0-2?=W> )( ,D-)=M(*W> )a realizaciju operacije oduzimanja u asembleru postoji sedam instrukcija! a+ 1-3 ,D0, =)@0 ,vom instrukcijom se oduzima desni od lijevog operanda = rezultat smjesta u lijevi operand 8 ,D0. Primjeri! 1-3 (6, D6 ! ,d sadrzaja registra (6, oduzima se sadrzaj registra D6 = rezulatat opet smjesta u registar (6 1-3 ?7, 37 ! 1adrzaj registra ?7 se umanjuje za sadrzaj registra 37 1-3 D7, &M ! 1adrzaj registra D7 se umanjuje za &M 1-3 P,D, 37 ! Memorijska lokacija na adresi P,D se umanjuje za sadrzaj registra 37. a+ 133 ,D0, =)@0 ,vom instrukcijom se realizuje operacija oduzimanja desnog operanda .=)@0+ = sadrzaja indikatora ?J od lijevog operanda .,D0+. ,perandi koji se mogu koristiti su istog tipa kao = za instrukciju 1-3. b+ D>? ,D0 ,vom instrukcijom se vrijednost operanda ,D0 samanjuje za ". 2ao operande moguce je koristiti register = memorijske lokacije. c+ *>S ,D0 ,vom instrukcijom se 'ormira potpuni komplement operanda ,D0, tj. mjenja se znak operanda ,D0. 2ao operand moze se koristiti registar ili memorijska lokacija. d+ 1MP ,D0, =)@0 ,vom instrukcijom se realizuje operacija oduzimanja, ali se u operand ,D0 ne upisuje rezultat. ,va instrukcija samo utjece na indikatore registra uslova = koristi se uglavnom pri realizaciji uslovnog grananja. '+ ((1 ,va instrukcija koriguje rezultat u registru (6 poslije oduzimanja dvije nepakovane 3?D ci're. e+ D(1 ,va instrukcija koriguje rezultat oduzimanja dva bajta koji sadrze po dvije pakovane 3?D ci're. =nstrukcije ((1 = D(1 imaju analogni e'ekat sa instrukcijama ((( = D(( kod sabiranja. =*1T0-2?=W> )( M*,)>*W> )a realizaciju operacije mnozenja koriste se tzri instrukcije. a+ M-6 =)@0 ,va instrukcija se koristi za mnozenje neoznacenih brojeva. 1adrzaj registra (6 se mnozi sa izvornim operandom =)@0 = rezulatat se smjesta u registar (7. =zvorni operand moze biti osmobitni registar ili memorijska lkacija. (ko su operandi sesnaestobitni, onda se rezulatat smjesta u registarski par D7, (7. b+ =M-6 =)@0 ,va instrukcija mnozi oznacene brojeve. ,perandi = rezulatat operacije se rasporedjuju =sto kao = kod instrukcije M-6. 14

c+ ((M ,va instrukcija se koristi poslije mnozenja nepakovanih decimalnih brojeva, tako da prva .niza+ ci'ra ide u (6, a druga .visa+ se smjesta u (L. =*1T0-2?=W> )( D=W>6W>*W> 1licno kao = kod operacije mnozenja, za realizaciju operacije dijeljenja koriste se tri instrukcije! za neoznacene brojeve, za oznacene brojeve = za podesavanje nepakovanih operanada. a+ D=@ =)@0 ,vom instrukcijom se dijele neoznaceni brojevi .sa osmobitnim = sesnaestobitnim operandom+# A ukoliko je operand =)@0 .koji moze biti registar ili memorijska lokacija+ osmobitni, onda se sadrzaj registra (7 dijeli sa sadrzajem operanda = rezultat smjesta u registar (6, a ostatak dijeljenja u registar (L# A ukoliko je operand =)@0 sesnaestobitni , onda sadrzaj para registara D7 = (7 predstavlja dijeljenik, kolicnik se, nakon operacije, smjesta u registar (7, a ostatak u registar D7. b+ =D=@ =)@0 ,va instrukcija obavlja isti posao kao = instrukcija D=@, samo sto to cini sa oznacenim brojevima. c+ ((D ,va instrukcija priprema dvije nepakovane 3?D ci're dijeljenika u registru (7 za operaciju dijeljenja. %OT%RO7RAM %OJAM %OT%RO7RAMA - programima se esto sre%u grupe instrukcija koje predstavljaju logike cjeline ili imaju samnostalno znaenje i ponavljaju se na vie mjesta. Takvi djelovi programa opisuju vie ili manje samostalnu etapu nekog raunskog procesa, a mogu postojati ne samo pri rjeavanju jednog konkretnog zadatka ve% i pri rjeavanju vie razlicitih zadataka. ,sim tog u svakoj grani nauke i tehnike postoje 'unkcionalne zavisnosti koji se vrlo esto koriste. To je sluaj kod izraunavanja elementarni matematikih 'unkcija , rjeavanja jednaina, konverziju jednog koda u drugi i mnogih drugih tipinih obrada. 0adi lakeg i breg programiranja ovi djelovi programa izdvajaju se u samostalne programske cjeline koje se posebno piu , ispituju i koriste. Program koji je tako organizovan da se njemu moze prenijeti upravljanje iz nekog drugog programa i da se po zavretku obrade upravljanje vrati nazad u isti taj program naziva se podprogram. PodIprenosom upravljanjaI podrazumjeva se uzimanje slijedece instrukcije za izvrsenje iz memoriske lokacije u kojoj se nalazi prva izvrsna instrukcija podprograma. Program iz koga se poziva potprogram naziva se glavni ili osnovni program. Potprogrami predstavljaju samostalne programske jedinice koje se piu samo jednom a mogu se koristiti kad god je potrebno u jednom ili vie programa. 1vaki potprogram ima posebno ime a poziva se na nain vrlo slian nainu pozivanja pojedinih instrukcija raunara. Po svojoj prirodi 15

program se moe razmatrati kao procedura .postupak+ za izraunavanje neke 'unkcije jedne ili vie promijenjivih ili za izvrenje grupe operacija zajedniki i tipini za vie programa. ODLIKE %OT%RO7RAMA )ajedno sa programskim petljama programi ine osnovu tehnike programiranja kod savremenih raunara. 1istem pisanja podprograma omogu%ava da se samo jedna kopija potprograma moe pozivati proizvoljan broj puta. Pored lakeg programiranja postie se i znaajna ekonomija memorije. Potprogram se moe pisati sa velikim stepenom logike nezavisnosti od osnovnog programa ili drugih programa. To omogu%ava lake izmijene u osnovnom programu jer se lako mogu pratiti putevi tih izmijena i njihovih uticaji. 6ogika nezavisnost ima kao znacajnu posljedicu i to da razni ljudi ili grupa ljudi mogu pisati dijelove velikog programa. Mehanizam povezivanja osnovnog programa i potprograma i naini prenosa parametara potprograma precizno de'iniu kako te grupe mogu komunicirati jedna sa drugom. 2od ve%ine raunara mogu%e jepisati potprograme na vie razliitih izvornih jezika i povezivati ih u jedan isti program. ,vo je posebno znaajno kada je jedan od tih jezika simboliki mainski jezik, a drugi vii programski jezik. 1T0-2T-0( P,TP0,S0(M( Pored osnovnog dijela programa u kome se vri obrada tzv.tijelo potprograma , u svekom potprogramu postoje i drugi dijelovi. )a prelaz na potprogram .tj.ulaz u program+ koristi se pozivna sekvenca .pozivni niz+instrukcija u kojoj se i u asemblerskim i u viim programskim jezicima navodi ime potprograma u posebnoj instrukciji za poziv potprograma oblika! ?(66:ime potprograma; 1vaki put kada se ulazi u potprogram potrebno je zadati polazne podatke neophodne za rad potprograma. =sto vremeno je potrebno, poslje obrade u potprogramu, obezbijediti i vra%anje rezultata u glavni potprogram. Podatci koji se unose potprogramom i izlazni rezultati iz potprograma nazivaju se optim imenom ulazi i izlazni parametri potprograma. )a pristup parametrima ponekad se 'ormiraju posebni dijelovi potprograma. - toku izvrenja potprograma javlja se potreba za kori%enjem odre enih registara centralnog procesora. 1 obzirom da prethodni sadraji tih registara mogu postati potrebni za dalji rad osnovnog programa , to bi njihovo unitenje u potprogramu dovelo do nepravilnog daljeg rada osnovnog programa. )bog toga je potrebno na poetku potprograma predvidjeti privremeno pam%enje u samom potprogramu sadraja svih registara centralnog procesora koji se koristi u tom programu. ,vaj se dio obino zove pam%enje stanja procesora ili pam%enje stanja programa. Poslje zavretka obrade u potprogramu a prije povratka u osnovni program potrebno je sadraje tih registara obnoviti .regenerisati, ponovo uspostaviti+, tj.vratiti procesor u stanje prije ulaska u potprogram. 1/

*a slici M.$ predstavljena je struktura potprograma.

8RSTE %OT%RO7RAMA )avisno od naina na koji se potprogrami ukljucuju u osnovni program razlikuju se $ vrste potprograma! - ,tvoreni potprogrami )atvoreni potprogrami

,tvoreni potprogram predstavlja niz instrukcija koji se ume%u u osnovni program. Pri svakom obra%anju ovakvom potprogramu u osnovni program se ume%e HkpijaI tog niza instrukcija, tj.jedan takav niz instrukcija 1 ukljuuje se u program onoliko puta koliko se puta vri obra%anje njemu .slika M.&+. osnovni nedostatak otvorenih programa je ponavljanje svih instrukcija potprograma pri svakom obra%anju, to zahtijeva vie memorije.

2oritenje otvorenih programa u viim programskim jezicima, gdje se jos zovu i unutranje 'unkcije, ogranieno je na mali broj potprograma koji se sastoje od malog broja mainskih instrukcija. To su npr.potprogrami (31, =(31, M,D, (M,D, J6,(T,=J=7, 1=S*, =1=S* = dr. )atvoreni potprogram

10

predstavlja niz instrukcija koji se 'ormira i prevodi kao zasebna cijelina, a moe se koristiti mnogo puta u jednom ili vie programa i potprograma. Pri pozivanju se nekopira a smijesta se van osnovnog programa .slikaM./+ Pozivanje ztvorenog programa ostvaruje se posebnim instrukcijama raunara za rad s potprogramima. Pozivnom zatvorenog programa dalje izvrenje instrukcija se nastavlja od prve instrukcija potprograma . Poslje zavretka potprograma upravljanje se vra%a na mijesto na kome je bio prekinut osnovni program.

INSTRUK9IJE :A RAD SA %OT%RO7RAMIMA )a pozivanje potprograma i vra%anje u glavni program koriste se instrukcije ?(66 i 0>T. ,ve instukcije omogu%avaju! Apam%enje povratne adrese.adrese instukcije na koju se vri povratak iz potprograma+, Aprelazak na prvu instrukciju potprograma, Apovratak iz programa. 9ALL INSTRUK9IJA Jormat zapisa ?(66 instrukcije je! ?(66 novaXprocedura# prelazak na proceduru novaXprocedura ,va instrukcija povratnu adresu upisuje u srek i upravljanje predaje prvoj nstrukciji procedure .novaXprocedura+. Procedura moe biti tipa *>(0 ili J(0. -koliko je procedura tipa *>(0, u stek se upisuje sadaj brojaa instrukcija .=P+, a za procedure tipa J(0 potrebno je da se u stek upie sadraj brojaa instrukcija i sadraj segmentnog registra ?1 RET INSTRUK9IJA =nstrukcija 0>T uzima sadaj vrha steka i smjeta ga u broja instrukcija, ime prenosi upravljanje na povratnu adresu glavnog programa. 2oristi se bez operanda i njen 'ormat zapisa je ! 0>T # povratak iz potprograma Primjer! Poziv procedure *,@( i vra%anje u glavni program! 11

.... # instrukcije glavnog programa ?(66 *,@( # poziva se procedura *,@( D(6W> ... # povratna instrukcija ................... # ostale instrukcije glavnog programa ................... # *,@( # P0,? # poetak procedure *,@( ................... # prva instr.procedure *,@( ................... # ostale instrukcije procedure 0>T # povratak u program *,@(! >*DP # kraj procedure *,@( MAKRONAREDBE Makronaredba predstavlja simboliko ime izvornog .asemblerskog+ jezika kojom je oznaen unaprijed de'inisan niz mainskih instrukcija. Makro naredba predstavlja otvoreni program i pri njenom pozivu u osnovni program ume%e se cio taj niz mainskih instrukcija. Djelovi programa koji se esto koriste de'iniu se samo jednom u obliku makronaredbe koja ima svoje ime i parametre. Poziva se navo enjem imena makronaredbe i parametara. ,snovna namijena makronredbi je skra%enje izvornog program. Makro naredbe u asemblerskom jeziku predstavljaju sredstva vieg nivoa ime se postie krace i lakse programiranje.

5.7. Logike inst !k"i#e


Lo*i! e o(era-i.e )a obavljanje razliitih obrada nad podacima pored aritmetikih operacija esto se koriste i neke druge operacije. Wednu grupu takvih operacija ine logike operacije koje se izvravaju naporedno nad binarnim vrijednostima D i " u odgovaraju%im .istim+ pozicijama mainske rei. Pravila za logike operacije data su u tabeli.

I"#tru -i.e /a )o*i! e o(era-i.e ,vu grupu ine dvooperandske instrukcije! (*D, ,0, 7,0, T>1T i jednooperandska instrukcija *,T. 2ao operandi se u logikim instrukcijama mogu pojaviti registri, memorijske lokacije i konstante, duine rijei ili bajtovi. a+ (*D ,D0, =)@0 ,vom instrukcijom se izvrava logika operacija HiI nad operandima ,D0 i =)@0, a rezultat se smijeta u operand ,D0. b+ ,0 ,D0, =)@0 ,vom instrukcijom se izvrava logika operacija HiliI nad operandima ,D0 i =)@0 i rezultat smjeta u operand ,D0. 12

c+ 7,0 ,D0, =)@0 ,vom instrukcijom se izvrava logika operacija Hiskljuivo iliI nad datim operandima i, kao i prethodnim instrukcijama, rezultat se smjeta u operand ,D0. d+ T>1T ,D0, =)@0 ,vom instrukcijom se izvrava logika operacija HiI nad operandima, ali se rezultat nigdje ne upisuje .slino kao kod instrukcije ?MP+. ,snovna namjena ove instrukcije je postavljanje bitova registra uslova .kodova stanja+. *aje%e poslije ove instrukcije u program slijedi neka od instrukcija uslovnog grananja. e+ *,T ,D0 ,va instrukcija vri inverziju bitova u operandu, tj obavlja jedinini kompliment. 2ao operandi mogu se koristiti registri i memorijske lokacije. ,stale logike operacije mogu se realizovati koritenjem ovih instrukcija na osnovu veza koje se prouavaju u prekidakoj .3ulovoj+ algebri. Kori+te".e )o*i! ih o(era-i.a *aje%e se logike operacije koriste za izdvajanje pojedinih dijelova mainske rijei .maskiranje pomo%u operacije (*D+, spajanje grupa bitova u jednu rije.pakovanje pomo%u logike operacije ,0+ ili za upore enje da li su dva sadraja ista .koritenje logike operacije 7,0 ili T>1T+. (ko su =1, 5 .(1?==+ kodovi smjeteni u jednu "4Abitnu memorijsku lokaciju, onda se kodovi za pojedine simbole odvajaju primjenom operacije maskiranja na slijede%i nain! D"DDDDD"D"DDDD"D polazni sadraj """"""""DDDDDDDD maska (*D D"DDDDD"DDDDDDDD izdvojeni kod cijelog simbola 6ogika operacija ,0 moe se koristiti za suprotni postupak 8 HpakovanjeI dva razliita binarna niza u jednu rije, na slijede%i nain! D"DDDDD"DDDDDDDD sadraj " DDDDDDDDD"DDDD"D sadraj $ ,0 D"DDDDD"D"DDDD"D rezultat ,peracija 7,0 koristi se za upore enje .komparaciju+ tako to se u sluaju da su dva sadraja jednaka dobija rezultat DD...DD. )a upore ivanje dva sadraja moe se koristiti i operacija oduzimanja ili operacija komparacije ?MP. Poto procesor ima relizovanu operaciju ?MP, ponekad je bolje nju koristiti , jer i ona postavlja indikatore u registru uslova. =nstrukcijama grananja neposredno iza instrukcije ?MP nastavlja se program u jednom ili drugom smijeru.

20

5.8 #nstr2kcije pomjeranja i kr23enja


O(era-i.e (o$.era".a ,peracijom pomjeranja binarni sadraj nekog registra centralnog procesora se za jedno ili vie binarnih mjesta, lijevo ili desno. Pomjeranje lijevo za jedno mjesto oznaava da se binarna ci'ra iz pozicije i premjeta u poziciju iO". *pr., sadraj DD""D"D" pomjeranjem lijevo za jedno mjesto dobija oblik D""D"D"D. )avisno od naina na koji se radi sa bitovima viim ili niim pozicijama, razlikuje se logiko pomjeranje, aritmetiko pomjeranje i kruenje. Pomjeranje binarnog sadraja za jedno mjesto lijevo ekvivalentno je mnoenju tog sadraja sa $. Pomjeranje desno za jedno mjesto ekvivalentno je djeljenju sadraja sa $. ,peracije pomjeranja koriste se najvie pri realizaciji aritmetikih operacija mnoenja i djeljenja, ali ima i mnoge druge praktine primjene, npr. pakovanje kodova simbola koje se nalaze u dva razliita registra ili lokacije, zahtjeva prvo pomjeranje jedno od njih za E pozicija. I"#tru -i.e /a )o*i! o (o$.era".e Pri logikom pomjeranju za jedno mjesto lijevo bit najvede teine se gubi, a u poziciju najmanje teine upisuje se D. Pri logikom pomjeranju za jedno mjesto bit najmanje teine se gubi, a u poziciji najvede teine upisuje se D. Primjer "DD"""D"D""DDD"" poetni sadraj """D"D""DDD""DDD stanje poslje pomjeranja za tri mjesta ulijevo .bitovi "DD su izgubljeni+ DD"DD"""D"D""DDD stanje poslje logikog pomjeranja za dva mjesta desno .bitovi "" su izgubljeni+ =nstrukcije za lijevo i desno logikog pomjeranja imaju sljedede oblike! a+ 1L6, ,D0, 2 ,vom instrukcijom se ostvaruje pomjeranje sadraja (2 za 2 mjesta. ,perand 2 moe biti broj " ili registar ?6. -koliko je operand 2 registar ?6, onda se pomjeranje na lijevo izri za onoliko mjesta koliki je broj upisanih u registar. )a procesore iED$E4 i novije, kao operand 2 moe se pojaviti konstanta i veda od broja ". b+ 1L0, ,D0, 2 ,vom instrukcijom se ostvaruje pomjeranje udesno sadraja (2 za 2 mjesta. ,perand 2 ima istu ulogu kao i u instrukcijama 1L6. - ovim instrukcijama registar iji se sadraj pomjera, proiruje se bitom prenosa ?J .kao da je to deveti bit u registru+. - tom sluaju pri pomjeranju lijevo bit najvie teine se prenosi u ?J, staro stanje bita ?J se gubi, a u poziciji najmanje teine upisuje se D. Pomjeranje udesno prenos ?J se tretira kao da se nalazi ispred pozicije najnovije teine pa se u njega upisuje bit iz najmanje pozicije, a u poziciju najmanje teine upisuje se D. I"#tru -i.e /a arit$eti! o (o$.era".e

21

(ritmetiko pomjeranje se vri udesno za potreban broj mjesta, i osnovni niz koji se ovdje ostvaruje je zadravanje znaka iz najvede pozicije. Pri aritmetikom pomjeranju pozitivnog broja udesno, u najvioj poziciji zadrava se D za znak i istovremeno se upisuje nula u susjednu desnu poziciju. Pri aritmetikom pomjeranju negativnog broja u najvioj poziciji se zadrava ", ali se istovremeno u susjednu desnu poziciju tako e upisuje ". Time se pomjeranjem negativnog broja desno dobija ponovo negativan broj. =nstrukcija za aritmetiko pomjeranje ima obilk! 1(0 ,D0, 2 ,vom instrukcijom se ostvaruje aritmetiko pomjeranje udesno sadraja ,D0 za 2 mjesta. Primjer! "D"D""D"DDD""D"" Poetni sadraj """"D"D""D"DDD"" 1adraj poslje aritmetikog pomjeranja za tri mjesta desno. I"#tru -i.e /a ru;e".e Pri izvrenju operacija pomjeranja koji nazivamo kruenje ili ciklino pomjeranje, zamiljamo da su bit najvede i bit najmanje teine susjedni. tom sluaju pri kruenju udesno bit najmanje teine se ne gubi, ved se prenosi u poziciju najvede teine. Pri kruenju udesno bit najvede teine prenosi se u u poziciju najmanje teine. =nstrukcije za kruenje imaju slijededi oblik. a+ 0,0 ,D0, 2 ,vom instrukcijom se ostvaruje kruenje udesno za 2 mjesta. b+ 0,6 ,D0, 2 ,vom instrukcijom se ostvaruje kruenje udesno za 2 mjesta. Primjer! D"D""""DDDD""D"" Poetni sadraj D""D"D""""DDDD"" 1adraj poslje kruenja udesno za tri mjesta D""""DDDD""D""D" 1adraj poslje kruenja udesno za dva mjesta. ,peracija kruenja se esto realizuje zajedno sa bitom prenosa ?J. - tom sluaju pri kruenju udesno bit namanje teine se prenosi u ?J, a sadraj ?J u poziciju najvede teine. =nstrukcije imaju sljedede oblike! a+ 0?0 ,D0, 2 ,vom isntrukcijom se ostvaruje kruenje udesno operanda ,0D i ?J za 2 mjesta. b+ 0?6 ,D0, 2 ,vom instrukcijom se ostvaruje kruenje udesno ,D0 i ?J za 2 mjesta.

5.4. /*A5.%6#5*A5.' #.S"+/,0#1'


-laznoAizlazne instrukcije su namijenjene komunikaciji sa ulaznoA izlaznim vratima .portovima+. Mogu%e je direktno adresiranje, navo enjem adrese u samoj instrukciji, pri emu adrese ulaznoAizlaznih vrata mogu 22

uzimati adrese u opsegu OOH DO FFH. 2omunikacija se odvija iskljuivo preko akumulatora, pa se u ovim instrukcijama akumulator uvijek pojavljuje kao jedan od operanada. -mjesto adrese ulaznoAizlaznih vrata moe se koristiti i registar D< i to je indirektno adresiranje, jer se u njemu uvaju adrese za ulazAizlaz.,vu grupu instrukcija ine sljede%e instrukcije. a6 IN ODR4 I:8R ,vom instrukcijom se podaci sa ulaznih vrata .porta+ 8 I:8R prebacuju u akumulator. -koliko se prenosi rije, onda se koristi cijeli akumulator, a ako se prenosi jednobajtni podatak, koristi se nii bajt akumulatora .AL+. Primjer! IN A<4 %ORT=2 akumulator. IN AL4 %ORT=0 akumulator. #prijenos rijei sa P,0T"4 u

# prijenos bajta sa P,0T"E u

,6

OUT ODR4 I:8R ,vom instrukcijom se sadraj akumulatora alje na izlazna vrata. Primjer! OUT %ORT04 AL P,0TE. OUT %ORT=24 AL P,0T"4. # Prijenos bajta iz akumulatora na

#Prijenos rijei iz akumulatora na

OUT D<4 AL #Prijenos bajta iz akumulatora u ulaznoAizlazni registar ija je adresa u registru D7.

5.10. #.S"+/,0#1' 5A +A7 SA .#5%&#(A


*iz ili string predstavlja skup podataka tipa bajt ili rije,koji se nalaze na sukcesivnim lokacijama u memoriji raunara.Maksimalna duina niza moe biti 4/ k3. =nstrukcije za rad sa nizovima omogu%uju slijede%e operacije!
2opiranje .prenos+ podataka sa jednog memorijskog bloka u drugi Pronalaenje odre ene vrijednosti u nizu podataka .pretraivanje+ Pore enje vrijednosti dva niza

2.

=nicijalizaciju uzastopnih memorijskih lokacija

Jormat instrukcija za rad sa nizovima moe imati jedan od slijede%ih oblika!


a+ ,P>0(?=W( ,P>0(*D .30,W+ b+ ,P>0(?=W( B >koristi se za tip podatakaAbajt c+ ,P>0(?=W( ?>koristi se za tip podatakaArije

INSTRUK9IJE %RENOSA
a+ M,@1,D0,=)@0

,vom instrukcijom se odre eni lan izvornog niza koji je adresiran parom registara D1#1=, kopira u odre eni lan odredinog niza adresiranog parom registara >1#D=.
b+ M,@13 c+ M,@1G

,ve instrukcije se koriste bez operanada.,ne omogu%uju kopiranje lanova izvornog niza u odredini niz.- registru ?7 se nalazi broj ponavljanja instrukcije,tj. koliko elemenata treba kopirati.=ndeksni registri sadre adrese izvornog i odredinog operanda po sljede%em pravilu!
0egistar 1= ukazuje na izvorni niz 0egistar D= ukazuje na odredini niz

INSTRUK9IJE %ORE@ENJA
a+ ?MP1 ,D0,=)@0 b+ ?MP3 c+ ?MPG

,perandi za ove instrukcije se uzimaju iz istih registara kao i kod instrukcija prenosa.,vom instrukcijom se porede lanovi niza.>'ekat instrukcija je isti kao i kod instrukcije ?MP,samo to se u ovom sluaju radi o nizovima. INSTRUK9IJE %RETRAAI8ANJA =nstrukcije za pretraivanje niza su sline instrukcijama pore enja.0azlika je u tome to instrukcije upore uju podatak sa sadrajem akumulatora.0ezultat pore enja se koristi za postavljanje indikatora u registru uslova.Jormat zapisa ovih instrukcija je slijede%i!
a+ 1?(1 ,D0 b+ 1?(13

24

c+ 1?(1G

,perandi su i kod ovih instrukcija odre eni sadrajem indeksnih registara. INSTRUK9IJE %UNJENJA ,vu grupu ine slijede%e instrukcije!
a+ 6,D1 =)@0 b+ 6,D13 c+ 6,D1G

,vim instrukcijama se lan izvornog niza kopira u akumulator.2ao i u prethodnim instrukcijama,adresa lana izvornog niza se nalazi u paru registara D1#1=.Poslije kopiranja indeksni registar 1= se aurira.

INSTRUK9IJE SMJEBTANJA =nstrukcijama smjetanja se kopira sadraj akumulatora u odre eni lan adresnog niza.(dresa lana niza u koji %e biti iskopiran sadraj akumulatora nalazi se u paru registara >1#D=.Jormat zapisa instrukcija iz ove grupe je slijede%i!
a+ 1T,1 ,D0 b+ 1T,13 c+ 1T,1G

,igledno je da instrukcije smjeatanja imaju suprotno djelovanje od instrukcija punjenja. INSTRUK9IJE %ONA8LJANJA =nstrukcije za rad sa niskama.nizovima+ znakova operiu pojedinanim podacima.Me utim, naje%e postoji potreba da se operacije nizovima primjenjuju na vie lanova niza, sukcesivno.To se rijeava instrukcijama ponavljanja.=nstrukcije ponavljanja se postavljaju kao pre'iks ostalim instrukcijama za rad sa nizovima i omogu%uju ponavljanje odre ene instrukcije sve dok sadraj registra ?7 ne postane D.*a taj nain se e'ikasno obra uju podaci koji pripadaju jednom bloku i memoriji.,voj grupi pripadaju slijede%e instrukcije! a+ 0>PAnizovna instrukcija A; ,va pre'iksAinstrukcija uslovljavlja ponavljanje nizovne instrukcije sve dok sadraj registra ?7 ne postane D.

25

b+ 0>P)Ainstrukcija A; ,va pre'iksAinstrukcija uslovljavlja izvravanje instrukcije pore enja ili analize sve dok nebude ispunjen uslov da je .?7+VD ili .)J+VD c+ 0>P*)Ainstrukcija A; ,va pre'iksAinstrukcija uslovljavlja izvravanje instrukcije pore enja sve dok nebude ispunjen uslov da je .?7+VD ili .)J+V". =nstrukcijama 0>P) i 0>P*),u stvari,realizuje se petlja koja vri pore enje sve dok se ne do e do odre ene vrijednosti ili kraja niza. INSTRUK9IJE :A %OSTA8LJANJE %RA89A Pri obradi nizova u petlji,lanovi niza se mogu brojati unaprijed i unazad,zavisno od sadraja indikatora DJ.bita registra uslova+.(ko je DJVD onda se poslije izvrenja neke od nizovnih instrukcija pokazivai .registri 1= i D=+ uve%avaju za ".odnosno $,ako se radi o rijeima+,tj. vri inkrementisanje.-koliko je DJV" vri se dekrementisanje.=nstrukcijama za postavljanje pravca se,u stvari,postavlja DJ indikator na " ili D. a+ ?6D A; ,vom instrukcijom se DJ indikator postavlja na D. b+ 1TD A; ,vom instrukcijom se DJ indikator postavlja na ".

O#ta)e i"#tru -i.e


O(era-i.a ,e/ de.#tva Sotovo svi procesori imaju instrukciju *,0 .nema operacije+ cijim izvrsenjem processor trosi jedan masinski ciklus i ne obavlja nikakve druge upravljacke aktivnosti. ,blik instrukcije! *,0 # Procesor ne vrsi nikakava dejstva vec ceka jedan # masinski ciklus i prelazi na slijedecu instrukciju =nstrukcija *,0 koristi se pri testiranju programa, kada se instrukcija koju treba izbaciti prosto zamjenjuje *,P instrukcijom bez ikakvih drugih izmjena u programu. 2od mikroprocesora ova instrukcija se koristi u petljama radi postizanja odredjenog vremenskog kasnjenja. :au#tav).a".e i/vr#e".a (ro*ra$a )a zaustavljanje izvrsenja programa koriste se L(6T i G(=T instrukcije oblika! L(6T # Procesor prekida dalje izvrsenje programa. # 0ad procesora aktivira se dalje sa pulta ili # nekim drugim spoljasnjim prekidom. G(=T # Procesor prekida izvrsenje programa i # ceka dok ne nastane neki spoljni ili unutrasnji uslov, # kada nastavlja dalji rad automatski.

2/

=nstrukcijom L(6T zavrsava se izvrsenje programa i ponekad se prenosi upravljanje na pult masine, odakle se moze rucno aktivirati novi program. =nstrukcija G(=T ceka neki uslov i automatski nastavlja dalje izvrsenje programa kada se taj uslov ispuni. %ri$.eri (ro*ra$a u a#e$,)eru 1lijede%i primjeri sadre, pored osnovnog koda, pozive podprograma za unos i prikaz podataka. 1kup programa za unos i prikaz podataka se nalazi u posebnoj datoteci 8 =,.(1M. 1vaka datoteka sa izvornim kodom se moe zasebno prevesti odgovoraju%im asemblerom .npr. M(1M P0".(1M+ . )a 'ormiranje konacne 8 izvrne verzije programa potrebno je pri povezivanju navesti sve neophodne .ukljune+ datoteke. *aprimjer, kompletna procedura za prvi primjer bi glasila! M(1M =,.(1M M(1M P0".(1M 6=*2 P0"O=, S u( (od(ro*ra$a /a u(i# (odata a i (ri a/ "a e ra"u : #P0=*T? 8 tampa (1?== krakter iz D6 #*>G6=*> 8 pomjera kursor u novi red #P0=*T1 8 tampa niz na koji pokazuju D1!D7 a koje se zavrava sa YTZ #P0=*T=*T 8 tampa oznaeni integer iz D7 #=*P-T? 8 u (6 vra%a (1?== u red #=*P-T1 8 uitava niz znakova i upisuje ih na D1!D7 i zavrava niz sa T #=*P-T=*T 8 u (7 vra%a vrijednost oznaenog uitanog broja Primjer sabiranje i oduzimanje brojeva!

20

21

5.11. #nstr2kcije za 2pra ljanje tokom programa


=nstrukcije za upravljanje tokom programa omogu%avaju da se izvrenje programa nastavi sa memorijske lokacije koja ne slijedi iza tek izvrene instrukcije. ,ne, u stvari, mijenjaju sadraj registara koji nose adresu slijede%e instrukcije! =P i ?1. Mogu se podijeliti na slijede%e grupe! a+ instrukcije uslovnog i bezuslovnog skoka i b+ instrukcije za organizaciju ciklusa.

#nstr2kcije 2slo nog i bez2slo nog skoka


,voj grupi instrukcija pripadaju slijede%e instrukcije! a+ WMP ,D0 ,va instrukcija ostvaruje bezuslovni skok na odre enu labelu ili memorijsku lokaciju odre enu operatorom ,D0. 6abela moe biti J(0 ili *>(0. -koliko se radi sa *>(0 labelom, mogu%e je ostvariti skok samo u okviru segmenata, dok sa J(0 labelom moe da se skae izme u segmenata. b+ W( 6(3>6( 0ealizacija uslovnog skoka ukoliko je ?J V D i )J V D. )a instrukcije uslovnog skoka vai pravilo da labela moe biti iskljuivo tipa *>(0. c+ W(> 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je ?J V D. d+ W3 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je ?J V ". e+ W3> 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je ?J V " i )JV ". '+ W?7) 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je .?7+ V D. g+ W> 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je )J V ". h+ WS 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je )J V D i 1J V ,J. i+ WS> 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je 1JV ,J. j+ W6 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je 1J : ; ,J. k+ W6> 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je 1J : ; D ili )J V ". l+ W*? 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je ?J V D. m+ W*> 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je )J V D. n+ W*, 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je ,J V D. 22

o+ W*P 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je PJ V D. p+ W*1 6(3>6( =nstrukcija uslovnog [+ W, 6(3>6( =nstrukcija uslovnog r+ WP 6(3>6( =nstrukcija uslovnog s+ W1 6(3>6( =nstrukcija uslovnog skoka. 1kok na labelu ukoliko je 1J V D. skoka. 1kok na labelu ukoliko je ,J V ". skoka. 1kok na labelu ukoliko je PJ V ". skoka. 1kok na labelu ukoliko je 1J V ".

#nstr2kcije za organizacij2 cikl2sa


,vim instrukcijama se mogu organizovati brojake petlje, slino kao u jezicima vieg nivoa. *jima se automatski obavlja! - dekrementisanje brojaa, - testiranje uslova za izlazak iz petlje, - grananje kada su ispunjeni uslovi. 2ao broja koristi se registar ?7. 1vaki put kada se zavri jedan ciklus, sadraj registara ?7 se umanjuje za ". ,voj grupi pripadaju slijede%e instrukcije! a+ 6,,P 6(3>6( ,vom instrukcijom se organizuje ciklus tako da se tijelo ciklusa izvrava sve dok je .?7+ :; D. Poslije svakog ciklusa sadraj registra ?7 se dekrementuje. b+ 6,,P> 6(3>6( ,va instrukcija je slina prethodnoj, samo to ovdje analizira i indikator )J. ?iklus se ponavlja dok je )J V " i .?7+ : ; D. c+ 6,,P*> 6(3>6( ,va instrukcija omogu%ava izvrenje tijela ciklusa sve dok je )J V D i .?7+ : ; D.

5.$%.Pot& og '(i
%o.a$ (ot(ro*ra$a

.0

- programima se esto sre%u grupe instrukcija koje predstavljaju logike cjeline ili imaju samostalno znaenje i ponavljaju se na vie mjesta.Takvi dijelovi programa opisuju vie ili manje samostalnu etapu nekog raunarskog procesa,a mogu postojati ne samo pri rjeavanju jednog konkretnog zadatka ve% i pri rjeavanju vie razliitih zadataka.,sim toga,u svakoj grani nauke i tehnike postoje 'unkcionalne zavisnosti koje se vrlo esto koriste.To je sluaj kod izraunavanja elementarnih matematikih 'unkcija,rjeavanja jednaina ,konverziji jednog koda u drugi i mnogih drugih tipinih obrada. 0adi lakeg i breg programiranja ovi dijelovi programa izdvajaju se u samostalne programske cjeline koje se posebno piu,ispituju i koriste. Program koji je tako organizovan da se njemu moe prenijeti upravljanje iz nekog drugog programa i da se po zavretku obrade upravljanje vrati nazad u taj isti program ,naziva se (ot(ro*ra$. Pod Zprenosom upravljanja Y podrazumijeva se uzimanje sljede%e instrukcije za izvrenje iz memorijske lokacije u kojoj se nalazi prva izvrna instrukcija potprograma.Program iz koga se poziva potprogram zove se *)av"i i)i o#"ov"i (ro*ra$& Potprogrami predstavljaju samostalne programske jedinice koje se piu samo jednom ,a mogu se koristiti kad god je potrebno u jednom ili vie programa.1vaki potprogram ima posebno ime a poziva se na nain vrlo slian nainu pozivanja pojedinih instrukcija rauanara.Po svojoj prirodi potprogram se moe razmatrati i kao procedura.postupak+za izvravanje neke 'unkcije jedne ili vie promjenljivih ili za izvrenje grupe operacija zajednikih i tipinih za vie programa. Od)i e (ot(ro*ra$a )ajedno sa programskim petljama potprogrami ine osnovu tehnike programiranja kod savremenih raunara.1istem pisanja potprograma omogu%uje da se samo jedna kopija potprograma moe pozivati proizvoljan broj puta.Pored lakeg programiranja postie se i znaajna ekonomija memorije. Potprogram se moe pisati sa velikim stepenom logike nezavisnosti od osnovnog programa ili drugih potprograma.To omogu%uje lake izmjene u osnovnom programu jer se lako mogu pratiti putevi tih izmjene i njihovi utjecaji. 6ogika nezavisnost ima kao znaajnu posljedicu i to da razni ljudi ili grupe ljudi mogu pisati dijelove velikog programa.Mehanizam povezivanje osnovnog programa i potprograma i naini prenosa parametara potprograma precizno de'iniu kkako te grupe mogu komunicirati jedna sa drugom. 2od ve%ine raunara mogu%e je pisati potprograme na vie razliitih izvornih jezika i povezivati ih u jedan isti program .,vo je posebno znaajno kada je jedan od tih jezika simboiki mainski jezik,a drugi vii programski jezik. Stru tura (ot(ro*ra$a

.1

Pored osnovnog dijela potprograma u kome se vri obrada ,tzv.tijelo potprograma ,u svakom potprogramu postoje i drugi dijelovi.)a prelaz na potprogram .tj,ulaz u potprogram+ koristi se pozivna #e ve"-a .pozivni niz+ instrukcija u kojoj se i u asemblerskim i viim programskim jezicima navodi ime potprograma u posebnoj instrukciji za poziv potprograma oblika! ?(66:ime potprograma; 1vaki put kada se ulazi u potprogram potrebno je zadati polazne podatke neophodne za rad potprograma.=stovremeno je potrebno ,poslije obrade u potprogramu ,obezbjediti i vra%anje rezultata u glavni program.Podaci koji se unose u potprogram i i izlazni rezultati iz programa nazivaju se optim imenom u)a/"i i i/)a/"i (ara$etri (ot(ro*ra$a. )a pristup parametrima ponekad se 'ormiraju posebni dijelovi potprograma. - toku izvrenja potprograma javlja se potreba za koritenjem odre enih registra centralnog procesora.1 obzirom da prethodni sadraji tih registra mogu postati potrebni za dalji rad osnovnog programa ,to bi svakako njihovo unitenje u potprogramu dovelo do nepravilnog daljeg rada osnovnog programa.)bod toga je potrebno na poetku potprograma predvidjeti privremeno pam%enje u samom potprogramu sadraja svih registara centralnog procesora koji se koriste u tom potprogramu.,vaj se dio obino zove pam%enje stanja procesora ili pam%enje stanja programa.Posle zavretka obrade u potprogramu ,a prije povratka u osnovni program , potrebno je sadraje tih registara obnoviti.regenerisati,ponovo uspostaviti+,tj,vratiti procesor u stanje prije ulaska u potprogram. *a slici M.$ predstavljena je struktura potprograma. -laz u potprogram Pam%enje stanja procesora Priprema za pristup parametrima potprograma Tijelo potprograma.obrada+ Priprema in'ormacija o rezultatima ,bnavljanje stanja procesora.regeneracija+ Povratak.izlaz+iz potprograma 0adna oblast potprograma.pomo%ne promjenljive+ 1lika M.$.A1truktura potprograma 8r#te (ot(ro*ra$a )avisno od naina na koji se potprogrami ukljuuju u osnovni program ,razlikuju se dvije vrste potprograma! Aotvoreni potprogrami i Azatvoreni potprogrami.

.2

,tvoreni potprogram predstavlja niz instrukcija koje se ume%u u osnovni program.Pri svakom obra%anju ovakvom potprogramu u osnovni program se ume%e YkopijaZ tog niza instrukcija,tj.jedan takav niz instrukcija 1 ukljuuje se u program onoliko puta koliko se puta vri obra%anje njemu .sl.M.&.+. ,snovni nedostatak otvorenih potprograma je ponavljanje svih instrukcija potprograma pri svakom obra%anju ,to zahtjeva vie memorije.

1lika M.&.A *aini koritenja otvorenog potprograma 2oritenje otvorenih potprograma u viim programskim jezicima,gdje se jo zovu i unutranje 'unkcije,ogranieno je na mali broj potprograma koji se sastoje od malog broja mainskih instrukcija.To su npr.potprogrami (31,M,D,(M,D,J6,(T,=J=7,1=S*,=1=S*,i dr. )atvoreni potprogram predstavlja niz instrukcija koji se 'ormira i prevodi kao zasebna cjelina , a moe se koristiti mnogo puta u jednom ili vie programa i potprograma.Pri pozivanju se ne kopira ,a smjeta se van osnovnog programa..sl.M./.+. Pozivanje zatvorenog potprograma ostavruje se posebnim instrukcijama raunara za rad sa potprogramima.Pozivom zatvorenog potprograma dalje izvrenje instrukcija se nastavlja od prve instrukcije potprograma.Poslije zavretka potprograma upravljanje se vra%a na mjesto na kome je bio prekinut osnovni program.

..

1lika M./.A 2oritenje zatvorenih potprograma I"#tru -i.e /a rad #a (ot(ro*ra$i$a )a pozivanje potprograma i vra%anje u glavni program koriste se instrukcije ?(66 i 0>T.,ve instrukcije omogu%uju! Apam%enje povratne adrese.adrese instrukcije na koju se vri povratak iz potrpograma+, Aprelazak na prvu instrukciju potprograma, Apovratak iz potprograma 9ALL i"#tru -i.a Jormat zapisa ?(66 instrukcije je! ?(66 novaXprocedura #prelazak na proceduru nova procedura ,va instrukcija povratnu adresu upisuje u stek i upravljanje predaje prvoj instrukciji procedure.novaXprocedura+.Procedura moe biti tipa *>(0 ili J(0.ukoliko je procedura tipa *>(0,u stek se upisuje sadraj brojaa instrukcija .=P+, a za procedure tipa J(0 potrebno je da se u stek upie sadraj brojaa instrukcija i sadraj segmentnog registra ?1. RET i"#tru -i.a

.4

=nstrukcija 0>T uzima sadraj vrha steka i smjeta ga u broja instrukcija ,ime prenosi upravljanje na povratnu adresu glavnog programa. 2oristi se bez operanada i njen 'ormat zapisa je. 0>T# povratak iz potprograma Primjer! Poziv procedure *,@( i vra%enje u glavni program! .... #instrukcije glavnog programa ?(66 *,@( #poziva se procedura *,@( D(6W>!...... #povratna instrukcija .... #ostale instrukcije glavnog programa .... *,@(! P0,? #poetak procedure *,@( .... #prva instrukcija procedure *,@( .... #ostale instrukcije procedure 0>T #povratak u program *,@(! >*DP #kraj procedure *,@( Ma ro"ared,e Makronaredba predstavlja simboliko ime izvornog .asemblerskog+jezika kojom je oznaen unaprijed de'inisan niz mainskih instrukcija. Makronaredba predstavlja otvoreni potprogram i pri njenom pozivu u osnovni program ume%e se cijeli taj niz mainskh instrukcija. Dijelovi programa koji se esto koriste de'iniu se samo jednom u obliku makronaredbe koja ima svoje ime i parametre.Poziva se navo enjem imena makronaredbe i prarametara.,snovna namjena makronaredbi je skra%enje izvornog programa.Makronaredbe u asemblerskom jeziku predstavljaju sredstva vieg nivoa ime se postie kra%e i lake programiranje.

5.13. $roblemi koritenja potprograma


Od"o# (ro*ra$ > (ot(ro*ra$ ,snovni program i potprogram koji se u njemu koristi predstavljaju nezavisne programske jedinice. 1vaka se jedinica nezavisno pie, ispituje, prevodi i smjeta na spoljnu memoriju u obliku tzv. objektnih modula. Prije izvrenja programa posebnim sistemskim programom za povezivanje se povezuju objektni moduli i module izvrenja. Program operativnog sistema koji se naziva punilac unosi modul punjenja u slobodnu oblast operativne memorije i startuje izvrenje. 2ori%enje potprograma sastoji se u tome to se na mjestu gdje je potrebna usluga potprograma prelazi na potprogram. Po zavrenoj obradi u potprogramu vra%a se nazad u osnovni program na mjestu na kome je on bio prekinut. %re)a/ "a (ot(ro*ra$

.5

Prelaz na potprogram sastoji se u prenosu upravljanja iz osnovnog programa na potprogram. To znai da se poslije izvrenja instrukcije glavnog programa sa adresom ( .sl. M.M+ slijede%a instrukcija za izvrenje uzima po adresi PP gdje se nalazi prva izvrna instrukcija potprograma. Prelaskom na potprogram naruava se prirodni redoslijed izvrenja instrukcija programa. 1 obzirom na to da se izvrenje instrukcija programa zapam%enih u memoriju raunara odvija pod kontrolom brojaa instrukcija . potprogramskog brojaa +, to %e u momentu izvrenja instrukcije sa adresom ( kojom se prelazi na potprogram, u broja instrukcija biti upisan novi sadraj PP. 8ra'a".e i/ (ot(ro*ra$a @ra%anje iz potprograma sastoji se u prijenosu upravljanja od potprograma na osnovni program. @ra%anje . izlaz + iz potprograma vri se od posljednje izvrne instrukcije potprograma na adresu (O" .sl. M.Ma + ili adresu (ODO" osnovnog programa.sl. M.Mb +. ,va se adresa naziva povratna ili vezna adresa i razliita je za svako mjesto u osnovnom programu sa koga se poziva potprogram. Prijelaz iz osnovnog programa u potprogram u najprostijem sluaju mogao bi se organizovati smjetanjem u memorijsku lokaciju sa adresom ( instrukcije bezuslovnog skoka na adresu PP. Me utim, pri tome se gubi in'ormacija o mjesti gdje se treba iz potprograma vratiti u osnovni program, jer se gubi prethodni sadraj brojaa instrukcija. 0adi obezbje enja vra%anja iz potprograma u osnovni program potrebno je adresu povratka zapamtiti na nekom unaprijed predvi enom mjestu program. Taj se problem u savremenim raunarima rjeava ili posebnim metodamaili, naje%e, postojanjem posebnih ?(66 i 0>T instrukcija za rad sa potprogramom.

5.$). Inst !k"i#e & eki*'


=nstrukcije prekida su karakteristicne za masinski orijentirane jezike. )a realizaciju prekida koristi se instrukcija =*T. Jormat ove instrukcije je! =*T brojXprekida # iniciranje prekida =zvrsavanjem ove instrukcije odvijaju se sljedeci procesi! A sadrzaj registra uslova prepisuje se na stek# A kontrolni bitovi registra uslova 8 =J .=nterrupt Jlag+ i TJ .Trap Jlag+ postavljaju se na D da bi se sprijecilo prihvatanje zahtjeva nekog drugog masinskog prekida# A sadrzaj registra ?1 se prepisuje na stek# A na osnovi broja prekida 'ormira se adresa vektora prekida duzine dvije rijeci# A druga rijec vektora prekida se upisuje u registar ?1#

./

A sadrzaj registra brojaca instrukcija .=P+ prepisuje se na stek# A prva rijec vektora prekida upisuje se u brojac instrukcija .=P+# A prelazi se na izvrshavanje rutine za obradu prekida.

5.$5. Ost'+e Inst !k"i#e


Sotovo svi procesori imaju instrukciju *,0 .nema operacije+ ijim izvrenjem procesor troi jedan mainski ciklus i ne obavlja nikakve druge upravljacke aktivnosti. ,blik instrukcije! *,0 AProcesor ne vrsi nikakva dejstva vec ceka jedan masinski ciklus i prelazi na slijedecu instrukciju. =nstrukcija *,0 koristi se pri testiranju programa, kada se instrukcija koju treba izbaciti prosto zamjenjuje *,0 instrukcijom bez ikakvih drugih izmjena u programu. 2od mikroprocesora ova instrukcija se koristi u petljama radi postizanja odre enog vremenskog kasnjenja. :au#tav).a".e i/vr+e".a (ro*ra$a )a zaustavljanje izvrenja programa koristi se L(6T i G(=T instrukcija oblika! L(6T AProcesor prekida dalje izvrenje programa. 0ad procesora aktivira se dalje sa pulta ili nekim spoljanjim prekidom. G(=TAProcesor prekida izvrenje programa i ceka dok ne nastane neki spoljni ili unutrasnji uslov, kada nastavlja dalji rad automatski. =nstrukcijom L(6T zavrava se izvrenje programa i ponekad se prenosi upravljanje na pult maine, odakle se moe runo aktivirati novi program. =nstrukcija G(=T eka neki uslov i automatski nastavlja dalje izvravanje programa kada se taj uslov ispuni.

5.$6. P i(#e i & og '(' ! 'se(,+e !


-ljedei # imje i sad 3e4 #o ed osnovnog koda4 #o$ive #ot# og ama $a unos i # ika$ #odataka. -ku# # og ama $a unos i # ika$ se nala$i u #osebnoj datote'i 5 %O."-!. -vaka datoteka sa i$vo nim kodom se mo3e $asebno # evesti odgova ajuim asemble om 6n# . !"-! 781."-!9. +a fo mi anje konane 5 i$v &ne ve $ije # og ama #ot ebno je # i #ove$ivanju 6linkovanju9 navesti sve neo#hodne 6ukljune 9 datoteke. :a # imje 4 kom#letna # o'edu a $a # vi # imje bi glasila; !"-%! %O."-! !"-%! 781."-! <%:= 781>%O 1kup potprograma za upis podataka i prikaz na ekranu!

.0

TitleX=nputX,utputX'unkcije #printc 8 stampa (1?== karakter iz D6 #neCline 8 pomjera kursor u novi red #prints 8 stampa niz na koji pokazuju D1!D7 a koji se zavrava sa NTN #printint 8 stampa oznaeni integer iz D7 #inputc 8 u (6 vra%a (1?== vrijednost pritisnutog tastera , znak se ispisuje #inputs 8 uitava niz znakova i upisuje ih na D1!D7 i zavrava niz sa T #inputint 8 u (7 vra%a vrijednost oznaenog uitanog broja dseg segment broj dp 4 dup .\+, NTN inpbroj dp K dup.\+ dseg ends cseg segment cmp aB,D jge pon neg aB pon! Bor dB,dB div cB add dl, NDN mov 9di<, dl dec di cmp aB, D jne pon cmp bB,D jge kraj mov bUte ptr9di<, /M dec di mov dB,di call prints pop dB pop cB # pop bB # pop aB # pop di# pop ds# ret printint endp inputc proc mov ah,D"h int $"h ret inputc endp inputs proc push aB #bira se D,1 'unkcija D"h #izvrava reinterapt $"h #povratak u glavni program #poredimo (7 i D # ako je (7;D idemo na pon a ako nije #(7 VA(7 tako da je (7 sigurno pozitivan #D7VD # (7V(7 div "D, D7 V (7 mod "D #Jormiramo (1?== kod ci're i #smjetamo u adresu na koju pokazuje Dl #DlVDiA" #da li smo obradili sve ci're\ #ako nismo idemo sve ispoetka #poredimo 37 sa nulom .jer se u 37 #nalazi orig.broj+ a ako je 37;D idemo na #kraj u suprotnom dodajemo znak NAN #smanjuje se D= #D7VD= #tampa se broj #vra%amo poetne vrijednosti registra

#uvaju se kori%eni registri .1

push di # mov di, dB #,JJ1>T adresa niza ide u D= cik! call inputc #uitavamo karakter u (6 cmp al,"& #da li je pritisnut >*T>0 je kraj" #ako jeste zavravamo mov 9di<,al #ako nije smjetamo karakter u niz inc di #i pove%avamo pokaziva na jedan jmp short cik #i sve ispoetka kraj"!mov bUte ptr9di<,NTN #na kraj dodajemo znak za kraj niza pop di #vra%amo kori%ene registre pop aB # ret #povratak u glavni program inputs endp inputint proc push di push dB #uvaju se koriteni indeBi push ds # push bB # push cB # mov dB, dseg # mov ds, dB # assume ds!dseg # Bor dB, dB #D7VD mov di, o''set inpbroj #,JJ1>T kori%enog niza ide u D= mov bUte ptr 9di<, D5 #M(7 broj kori%enih karaktera je 5 mov dB, di #D7VD= .o''set niza+ mov ah,Dah #bira se D,1 'unkcija Dah i poziva int $"h tako int $"h #da se u nizu inpbroj nalaze ci're uitanog broja Bor cB, cB #?7VD mov bB,"D #konstanta za mnoenje Bor aB, aB #(7VD add di,$ #D= pokazuje na prvu uitanu ci'ru Bor dB, dB #D7VD po! mov dl, bUte ptr 9di< #prvi karakter ide u dl cmp dl, "& #da li je pritisnut >*T>0\ je kr #ako jeste prekidamo rad cmp dl , NAN #da li je pritisnut znak minus\ je negt #ako jeste ?LV", da bismo kasnije promjenili znak mov cl,dl #uvamo .zbog mnoenja+ D6 u ?6 imul bB #mnoimo (7 sa 37 Bor dB, dB mov dl, cl sub dl,NDN add aB, dB jmp po" negt! mov ch, " #istimo D7 #vra%amo uitani karakter u D6 #od (1?== koda ci're 'ormiramo samu ci'ru #i dodajemo (7V(7OD7 #skaemo na po" #?LV", time pamtimo da je uitani broj negativan .2

po"! inc di jmp short po kr! cmp ch," jne kra neg aB kra! pop cB pop bB pop ds pop dB pop di ret inputint endp cseg ends end

#D=VD=O" pa pokazuju na sljede%u uitanu ci'ru #sve opet iz poetka #da li je ?LV" #ako nije znai ta uitani broj nije negativan #u suprotnom (7VA(7 #vra%amo sadraj kori%enih registara # # # #

%ri$.er= : Sa,ira".e i odu/i$a".e ,ro.eva title sabiranjeXiXoduzimanje sseg segment stack dp $M4 dup.\+ #rezerviemo $M4 bajtova za stek sseg ends dseg segment prvidC\ #promjenjive koje %e se drugidC\ #koristiti u programu zbirdC\ razlika dC\ poruka" db N-nesite broj!TN #poruke koje %e se poruka$ db N)bir iznosi!TN #ispisivati poruka& db N0azlika iznosi!TN dseg ends cseg segment assume cs!cseg, ss!sseg, ds!dseg, es!dseg eBtrn prints!near,neCline! near, printc! near, printint!near eBtrn inputs!near,inputc! near, inputint!near main proc 'ar pushds mov aB, D pushaB mov bB,dseg mov ds,bB mov es, bB # mov dB, o''set poruka" #o''set poruke ide u D7 call prints #stampa se odgovaraju%a poruka call inputint #uit@mo prvi broj mov prvi, aB #uitana vrijednost ide u promjenjivu P0@= call neCline #prelazimo u novi red call prints #opet se tampa poruka 40

call inputint #i uitava se drugi broj mov drugi, aB #koji se smjeta u odgovaraju%u promjenjivu call neCline # mov aB, prvi #(7VP0@= add aB, drugi #(7 V(7OD0-S= mov zbir,aB #rezultat se smjeta u )3=0 # mov aB,drugi #(7VD0-S= sub aB, prvi #(7V(7AP0@= move razlika, aB #rezultat se smjeta u 0()6=2( # mov dB, o''set poruka$ #,''set .pomjeraj+ poruke ide u D7 call prints #]tampa se poruka mov dB, zbir #D7V)3=0 call printint #]tampa se zbir call neCline #Prelazimo u novi red mov dB, o''set poruka& # call prints mov dB, razlika #D7V0()6=2( call printint #]tampa se razlika ret #i program zavrava rad main endp cseg ends end main

41

%ri$.er C: Bta$(a".e #vih -i.e)ih ,ro.eva $a".ih od u"i.eto* ,ro.a title stampanje od "...* sseg segment stack dp $M4 dup.\+ sseg ends dseg segment poruka" db N-nesi broj *!TN seg ends cseg segment assume cs!cseg, ds!dseg, ss!sseg, es!dseg eBtrn prints! near,neCline!near, printc!near, printint!near eBtrn inputs!near,inputc! near, inputint!near main proc 'ar pushds mov aB, D pushaB

42

mov bB, dseg mov ds, dB mov es, bB # mov dB, o''set poruka" # call prints #stampamo poruku za unos broja * call inpuint #ucitavamo broj * call neCline #prelazimo na novi red mov dB, " #pocinjemo od jedinice pon! cmp dB, aB #da li je D7 vece od (7 jg kraj #ako jeste ispisali smo sve brojeve call printint #ako ne, stampamo trenutni broj call neCline #prelazimo u novi red i inc dB #uvecavamo broj za jedan jmp short pon #ponavljamo cijeli proces kraj ! ret #vra%amo se u D,1 main endp cseg ends end main call printint #stampa se aritmeticka sredina ret main endp cseg ends end main

4.

%ri$.er D >Na.ve-i i "a.$a".i ,ro. u "i/u ,ro.eva title *ajveciXiXnajmanji sseg segment stack db $M4 dup.\+ sseg ends dseg segment niz dC MD dup .\+ najveci dC A&$54E najmanji dC &$545 poruka" db ^-nesi broj clanova niza!T^ poruka$ db ^*ajveci clan niza je broj!T^ poruka& db ^*ajmanji clan niza je broj!T^ dseg ends cseg segment assume cs!cseg, ds!dseg, ss!sseg, es!dseg eBtrn prints!near,neCline!near,printc!near,printint!near,printbin!near eBtrn inputs!near,inputc!near,inputint!near main proc 'ar push ds mov aB,D push aB mov bB,dseg mov ds,bB mov es,bB # 44

mov dB,o''set poruka" call prints # call inputint call neCline mov di, o''set niz mov bB, aB mov cB, " pon!cmp cB,bB jg nast call inputint mov 9di<, aB call neCline cmp aB, najveci jng na" mov najveci, aB na"!cmp aB,najmanji jnl na$ mov najmanji, aB na$! add di,$ inc cB jmp short pon nast!mov cB, " call neCline mov di,o''set niz cik ! cmp cB,bB jg kraj mov dB, 9di< call printint call neCline add di, $ inc cB jmp short cik kraj!mov dB, o''set poruka$ call neCline call prints mov dB, najveci call printint mov dB, o''set poruka& call neCline call prints mov dB, najmanji call printint ret main endp cseg ends end main %ri$.er 2E %retvara".e ve)i ih #)ova u $a)a i o,r"uto title Pretvaranje velikih slova u mala i obrnuto sseg segment stack 45

db $M4 dup.\+ sseg ends dseg segment niz db MD,M" dup .\+ #Prvi bajt niza sadrzi duzinu niza nniz db M" dup .\+ #Duzina niza VMD O ^T^ na kraju poruka" db ^-nesite pocetni niz!T^ poruka$ db ^Promijenjeni niz glasi!T^ dseg ends cseg segment assume cs!cseg, ds!dseg, ss!sseg, es!dseg eBtrn prints!near,neCline!near,printc!near,printint!near,printbin!near eBtrn inputs!near,inputc!near,inputint!near main proc 'ar push ds # mov aB,D # push aB # mov bB, dseg # mov ds,bB # mov es,bB # # mov dB,o''set poruka" call prints # mov dB, o''set niz # call inputs # call neCline cld #DJVD pa se D= i 1= uvecavaju kod 6,D1,1T,1 mov si,o''set nizO$ #,d drugog bajta se nalazi ucitani niz mov di,o''set niz # Bor cB,cB #?7VD mov cl,9siA"< #- prvom bajtu niza je broj ucitanih karakt. pon!londsb #(6V9D1!1=< , 1=V1=O" cmp al, ^a^ #Da li je (6:^a^ jb sljed #(ko jeste skacemo na sljed. cmp al, ^z^ #Da li je (6;^z^ ja sljed #(ko jeste idemo na sljed. subal,&$ #- suprotnom od malog 'ormiramo veliko slovo jmpshort snimi #1kacemo na snimi sljed!cmp al,^(^ #Da li je (6:^(^ jb snimi #(ko jeste zavrsavamo cmp al,^)^ #Da li je (6;^)^ ja snimi addal,&$ #,d velikog 'ormiramo malo slovo snimi!stosb #9>1!D=<V(6,D=VD=O"

4/

loop pon skacemo na pon mov bUte ptr9di<, ^T^ mov dB,o''set poruka$ call prints poruku mov dB,o''set nniz novog niza call prints ret main endp cseg ends end main %ri$.er F > Lo*i! e o(era-i.e title 6ogicke operacije sseg segment stack db $M4 dup.\+ sseg ends

#?7V?7A", (ko je ?7:;D #,znacavamo kraj niza nniz #Pripremamo se za stampu #1tampamo odgovarajucu # Pripremamo se za stampu #1tampamo novodobijeni niz

dseg segment broj" dC \ broj$ dC \ poruka" db^-nesite broj!T^ poruka$ db ^3roj" T^ poruka& db ^3roj$ T^ rezdb ^AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT^ i db ^and T^ ili db ^or T^ eili db ^Bor T^ negac db ^not br" T^ dseg ends cseg segment assume cs!cseg, ds!dseg, ss!sseg, es!dseg eBtrn prints!near,neCline!near,printc!near,printint!near,printbin!near eBtrn inputs!near,inputc!near,inputint!near main proc 'ar push ds mov aB,D push aB mov bB,dseg mov ds,bB mov es,bB mov dB,o''set poruka" # D7V,JJ1>T poruke" call prints #1tampa se poruka" call inputint # i ucitava se broj sa tastature mov br",aB #koji se smijesta na odgovarajucu lokaciju call neCline #Prelazimo u novi red 40

call prints call inputint mov br$,aB lokaciju # call neCline mov dB,o''set poruka$ call prints mov dB, broj" call printbin call neCline mov dB,o''set poruka& call prints mov dB, broj$ call printbin call neCline # mov dB,o''set rez call prints call neCline mov dB,o''set i call prtints mov dB,broj" and dB,broj$ call printbin call neCline # mov dB,o''set rez call prints call neCline mov dB,o''set ili call prints mov dB,broj" or dB,broj$ call printbin call neCline # mov dB,o''set rez call prints call neCline mov dB,o''set eili call prints mov dB,broj" Bor dB,broj$ call printbin call neCline # mov dB,o''set rez call prints call neCline

#,pet stampamo poruku" #-citavamo broj sa tastature # i smjestamo ga u odgovarajucu #Prelazimo u novi red # D7V,JJ1>T poruke$ #1tampa se poruka$ #D7Vbroj" #1tampamo binarno 30,W" #Prelazimo u novi red # D7V,JJ1>T poruke& #1tampamo poruku& #D7V30,W$ #1tampamo binarno 30,W$ #Prelazimo u novi red #D7V,JJ1>T rez #1tampamo minuseve . lijepo izgleda!+ #Prelazimo u novi red #D7V,JJ1>T poruke i #1tampa se poruka #D7V30,W" #D7VD7 and broj$ #1tampamo binarno D7 #Prelazimo u novi red # #,pet minusevi # #D7V,JJ1>T poruke ili #1tampa se poruka #D7V30,W" #D7VD7 or broj$ #1tampamo binarno D7 #Prelazimo u novi red # # # #D7V,JJ1>T poruke eili #1tampa se ta poruka #D7V30,W" #D7VD7 Bor broj$ #1tampamo binarno D7 #Prelazimo u novi red # # # 41

mov dB,o''set negac call prints mov dB,broj" not dB call printbin ret main endp cseg ends end main %ri$.er 0 > %o$.era".e title 1hi'tovanje sseg segment stack db $M4 dup.\+ sseg ends

#D7V,JJ1>T poruke negac #1tampa se ta poruka #D7V30,W" #D7Vnot.D7+ #1tampamo D7

dseg segment broj dC \ n dC\ poruka" db ^-nesite broj!T^ poruka$ db ^-nesite broj n!T^ poruka& db ^3roj V T^ shle db ^1L6 " VT^ shl" db ^1L6 n VT^ shri db ^1L0 "VT^ shr" db ^1L0 n VT^ carrU db ^?J VT^ dseg ends cseg segment assume cs!cseg, ds!dseg, ss!sseg, es!dseg eBtrn prints!near,neCline!near,printc!near,printint!near,printbin!near eBtrn inputs!near,inputc!near,inputint!near main proc 'ar push ds mov aB,D push aB mov bB,dseg mov ds,bB mov es,bB mov dB,o''set poruka" #D7V,JJ1>T poruke" call prints #1tampa se poruka call inputint # i ucitava broj sa tastature mov broj,aB #koji se smijesta u odgovarajucu lokaciju call neCline # prelazimo u sljedeci red mov dB,o''set poruka$ #D7V,JJ1>T poruke$ call prints #1tampa se poruka call inputint #-citava se broj * 42

mov n,aB # i smijesta na odgovarajucu lokaciju call neCline # # mov dB,o''set poruka& #D7V,JJ1>T poruke& call prints #1tampa se poruka mov dB,broj #D7V30,W call printbin #3inarno se stampa broj call neCline #i prelazi u sljedeci red #Dio programa koji je zaduzen za 'unkciju 1L6 d," mov dB,o''set shle #D7V,JJ1>T niza shle call prints #*iz se stampa mov dB,broj #D7V30,W shl dB," #D7 se shi'tuje ulijevo za jedan push' #J6>SAvi idu na stek .trebace nam kasnije+ call printbin #1tampa se binarno broj iz D7 mov dB,o''set carrU #D7V,JJ1>T poruka carrU call prints #koja se stampa mov dB,D #D7VD pop' #@racamo sadrzaj J6(SAova sa steka jnc nas" #(ko nije postavljen ?J 'leg idemo na nas" mov dB," #(ko jeste D7V" nas"!call printint #1tampa se D7 call neCline #Dio programa koji je zaduzen za 'unkciju 1L6 d, ?6 mov dB,o''set shl" #D7V,JJ1>T poruke shl" call prints # mov dB,broj #D7V30,W mov cB,n #?7Vn .koristi se samo ?6, visi bitovi se shl dB,cl #odbacuju+AD7 se shi'tuje za ?6 mjesta ulijevo push' #?uvamo sadrzaj 'legova call printbin #1tampamo broj iz D7 binarno mov dB,o''set carrU #D7V,JJ1>T poruka carrU call prints # mov dB,D #D7VD pop' #@racamo sadrzaj 'legova jnc nas$ #(ko nije postavljen ?J idemo na nas$ mov dB," #ako jeste onda D7V" nas$!call printint #1tampamo D7 call neCline # mov dB,o''set shri #D7V,JJ1>T poruke shri call prints # mov dB,broj #D7V30,W shr dB," #1hi'tuje se D7 udesno za jedan push' #?uvamo na steku koristene 'legove call printbin #1tampamo broj iz D7 mov dB,o''set carrU #D7V,JJ1>T poruke carrU 50

call prints mov dB,D pop' jnc nas& mov dB," nas&!call printint call neCline mov dB,o''set shr" call prints mov dB,broj mov cB,n shr dB,cl push' call printbin mov dB,o''set carrU call prints mov dB,D pop' jnc nas/ mov dB," nas/!call printint ret main endp cseg ends end main

# #D7VD #@racamo sadrzaj 'legova #(ko nije postavljen ?J idemo na nas& #ako jeste onda D7V" #1tampa se broj iz D7 # # # #D7V30,W #?7Vn . broj shi'tovanja + #1hi'tuje se D7 za ?6 mjesta udesno #?uvamo sadrzaj 'legova #1tampamo broj iz D7 # # #D7VD #@racamo sadrzaj 'legova #(ko nije postavljen ?J idemo na nas/ #ako jeste onda D7V" #1tampa se D7 #2raj

51