Pri Ruc Nik 8086

download Pri Ruc Nik 8086

of 46

Transcript of Pri Ruc Nik 8086

  • 5/24/2018 Pri Ruc Nik 8086

    1/46

    Prirunik za asemblersko programiranje naprocesorima iz familije Intel 80x86

    - osnovni kurs -

    Autor:

    io!rag ilanovi"

    Novi Sad, 2000

  • 5/24/2018 Pri Ruc Nik 8086

    2/46

    #$ %vo!

    Za razvoj asemblerskih programa potrebnealatke su asembler, linker i dibager. U ovom

    poglavlju su navedene osnovne informacijepotrebne za kori!enje turbo asemblera, turbo

    linkera i turbo dibagera "proizvodi firme#orland$.

    #$#$#$ Asembler

    %urbo &ssembler se poziva iz komandnelinije operativnog sistema komandom' &A'ime(!atoteke. (odrazumevana ekstenzijadatoteke je asm. Na ovaj na)in smo startovali

    prevodilac, koji je generisao datoteku saimenom ime*datoteke.obj. +vako kreiraneobjektne datoteke ne sadre informacijeneophodne za rad sa dibagerom. -a bi setakve datoteke dobile potrebno je prevodilac

    pozvati komandom &A' )zi ime(!atoteke.

    #$#$*$ +inker

    %urbo inker se poziva komandom' &+I,)v ime(!atoteke. U komandi se moe navestii ve!i broj objektnih datoteka. (odrazumevanaekstenzija je obj. +pcija koja je navedena uzime programa, slui da se u generisanojizvrnoj datoteci nalaze i infomacije potrebneza rad dibagera. /enerisana izvrna datoteka!e dobiti ime po prvoj navedenoj objektnojdatoteci i ima!e ekstenziju 1. ao rezultat

    se formira jo jedna datoteka, sa ekstenzijom3&(, u kojoj se nalaze informacije o veli)ini

    pojedinih segmenata.#$#$.$ /ibager

    Startovanje %urbo -ebugger4a se izvodinaredbom &/, a uz nju se moe i navestinaziv izvrne datoteke koju elimo analizirati.

    %urbo dibager ima puno opcija. U ovompriru)niku nave!emo samo one komande,koje su nam naj)e!e potrebne u naem radu, ikoje !emo redovno koristiti. +pise preostalihkomandi korisnik moe dobiti pritiskom na

    taster 56, kada do7e do odgovaraju!e opcije umeniju.

    Na predhodnoj skici se nalazi izgled ekranakoji se dobija prilikom startovanja dibagera, ito bez parametara. Ukoliko se navede imeizvrne datoteke, a mi se nalazimo udirektorijumu u kome se nalazi izvornadatoteka programa, tada !e ona biti u)itana.

    Njen prozor se tada moe dobiti odabiromopcije P%iz 1ie2menija ao to se na skici moe videti, radni

    prostor je podeljen na pet manjih celina,izme7u njih se prelazi tasterom &A3. (rvi deo sadri uporedni ispis asemblerskihinstrukcija i njihovih heksadecimalnihmainskih kodova. roz taj deo je mogu!ekretati se strelicama, a direktnim unoenjemsa tastature asemblerskih naredbi mogu!e jemenjati program 8u letu9. :zvravanje

    programa se moe vriti instrukciju poinstrukciju, to se )ini tasterom 45, ili doozna)ene linije, pomo!u tastera 4, ili

    kompletnog programa sa 47. Ukoliko prilikomizvrenja instrukciju po instrukciju, ne eliteda ulazite u procedure, tada koristite 48.(ostoje naravno i mnoge druge komande, alinam one nisu za po)etak toliko interesantne. -rugi deo sadri informacije vezane zaregistre procesora, kroz )iju listu se kre!emokursorskim tasterima. Naravno, postojekomande za izmenu sadraja registara, koje se

    postiu kombinacijama tastera. trl-omogu!uje da se pojavi dijalog za unos novevrednosti registra. trl-I uve!ava sadrajregistra za jedan, dok ga trl-/umanjuje za

    jedan. (oto je dovo7enje registra na nulu)esta operacija, postoji i kombinacija za njenoaktiviranje' trl-. 5unkcija i zna)enjesvakog registra ponaosob bi!e objanjeni unarednom poglavlju. %u su naravno i bitovi status registra, kojesadri tre!i deo prozora. roz njihovu listu setako7e kre!emo kursorskim tasterima, a

    pritiskom na 9,&9 menjamo njihovostanje. + tome koja je funkcija svakog od

    bitova status registra bi!e vie re)i unarednom poglavlju. (oto procesor ima internu podrku za stek,u )etvrtom delu moemo pratiti trenutnostanje steka, i eventualno vriti njegoveizmene pomo!u kombinacije trl-. U preostalom petom delu nalazi se prikazsadraja memorije. 3ogu!e je prikazati bilokoji blok memorije, ali je nama naravnonajvaniji segment podataka. (omo!u trl-;unosimo adresu od koje elimo da zapo)neispis. %u !emo naj)e!e upisivati -S'0. (rikaz

    je za po)etak u bajtovima, mada se pomo!utrl-/ moe promeniti na bilo kojistandardan zapis celoih ili brojeva u

    pokretnom zarezu, koji se koriste u asembleru. +d interesantnih opcija koje nudi ovaj

    dibager, a i ve!ina drugih, je postavljanjeprekidnih ta)aka. +vde se to )ini tasterom 4*,a linija na kojoj je postavljena !e biti ozna)ena

    # * .

    <

    2

  • 5/24/2018 Pri Ruc Nik 8086

    3/46

    crvenom bojom. 3i moemo, naravno,postaviti ve!i broj prekidnih ta)aka a kada,prilikom izvravanja, procesor nai7e naobeleene instrukcije, izvravanje !e bitizaustavljeno. Uklanjanje prekidnih ta)aka sevri na isti na)in kao i njihovo postavljanje.

    %urbo dibager je simboli)ki dibager.Ukoliko su programi prevedeni na predhodnonavedeni na)in, tada turbo dibager omogu!uje

    pra!enje stanja svih promenljivih pod onimimenima koje smo im dali prilikom pisanjaizvornog koda. +va mogu!nost dalekoolakava testiranje programa, i nalaenjegreaka u njemu. (omo!u opcije 1ariables iz1ie2smenija, mogu!e je dobiti pregled svih

    promenljivih, i obaviti njihove izmene. Sli)notome je uz pomo! opcije =atc>es, iz istogmenija, mogu!e menjati i pratiti vrednostionih promenljivih koje mi odaberemo. (reporuka je da se )italac zadri u

    ispitivanju mogu!nosti ovog dibagera jednovreme, jer bolje poznavanje njegovihmogu!nosti u mnogome olakava razvojasemblerskih programa.

    ;

  • 5/24/2018 Pri Ruc Nik 8086

    4/46

    *$ Procesor 8086

    *$#$ %vo!

    5amiliju procesora :ntel

  • 5/24/2018 Pri Ruc Nik 8086

    5/46

    desi prekid i kada procesor prelazi naizvrenje prekidne rutine.

    *$*$

  • 5/24/2018 Pri Ruc Nik 8086

    6/46

    %reba naglasiti da se prilikom upotreberegistara #1, S: i -: za ra)unanje efektivneadrese koristi segmentni registar -S, dok seza #( koristi SS. ksplicitnim navi7enjemsegmentnih registara mogu!e je uticati nara)unanje efektivne vrednosti, kao u slede!im

    primerima.mov al,cs:[bx]mov al,ds:[bp]mov al,es:[si]mov al,ss:[di]

    *$.$$ /irektno a!resiranje

    @adi se o metodi adresiranja kojapodrazumeva da joj je parametar adresa nakojoj se nalazi vrednost koju treba preuzeti. Umainskom formatu adresa lokacije se nalazikao neposredni operand i uvek je 6>4bitna

    vrednost. (rimeri 'mov al,[0234h]mov [0045h],ax

    %reba re!i da se kod ove metode adresiranjakao segmentni registar podrazumeva -S, ali jeto mogu!e predefinisati kao u narednim

    primerima.

    mov al,es:[0234h]mov ax,cs:[3452h]

    *$.$

  • 5/24/2018 Pri Ruc Nik 8086

    7/46

    preneti. 3ogu!e je vriti prenos izme7uregistara, memorijskih lokacija, a i dodelitivrednost konstante, ali sve kombinacije nisumogu!e. :nstrukcija +9A, predstavlja specifi)nuinstrukciju prenosa. +na slui za u)itavanje

    efektivne adrese drugog operanda, tj. njeneadrese unutar podrazumevanog segmenta. (rvioperand ove instrukcije mora biti neki od 6>4

    bitnih registara izuzev segmentnih. U)itavanje pointera se vri uz pomo!instrukcija +/' i +9'. -rugi operand

    predstavlja adresu na kojoj se nalazi zabeleen;24bitni pointer. (rvi operand predstavljaregistar u koji !e biti smeten ofset na koji

    pokazuje pointer, dok se segment smeta ujedan od segmentnih registara "/', kodinstrukcije +/', odnosno u 9', kod +9'$. 3ogu!a je i razmena sadraja sa statusregistrom, i to pomo!u instrukcija +A@4 i'A@4. +ve instrukcije nemaju operanada, pase podrazumeva A@kao prvi, a niih 4bitni registar, ilimemorijska lokacija. (ostoje i instrukcije P%'@4 i PBP4, zakoje se podrazumeva da je njihov operandstatus registar.

    Stek se implicitno koristi i u nekim drugiminstrukcijama, to !e kasnije biti navedeno.

    *$$#$.$ Instrukcije konverzije

    :nstrukcije ove grupe nemaju operande, aimplicitno menjaju neke od registara. onverzija iz bajta u re) se obavljainstrukcijom 3=, pri )emu se vodi ra)una io znaku datog broja. :ntrukcija podrazumevada se ulazni podatak nalazi u A+, dok izlaz

    predstavlja kompletan registar A. Sli)no tome imamo instrukciju =/, kojaslui za konverziju iz re)i u duplu re), pri)emu se podrazumeva da je ulaz registar A,a izlaz registarski par /:A. (rilikomkonverzije se o)uvava znak.

    onverzija, uz upotrebu posebne tabelekonverzije, moe se izvriti pomo!uinstrukcije +A&. (odrazumeva se da seoperand konverzije nalazi u registru A+, dok3 sadri adresu po)etka tabele konverzije.:nstrukcija kao izlaz vra!a u registru A+vrednost pro)itanu na lokaciji dobijenojsabiranjem vrednosti registara 3 i A+.

    %abela konverzije je tabela uzastopnihvrednosti, )iji indeksi odgovaraju vrednostimakoje se konvertuju u vrednosti navedene utabeli.

    *$$#$$ Instrukcije za rukovanjeperiferijom

    (ristup periferijama se vri isklju)ivo prekoinstrukcija iz ove grupe, osim ako nemamora)unarski sistem sa memorijski preslikanimulazom4izlazom, u kom slu)aju se mogukoristiti i ostale instrukcije prenosa podataka.

    (eriferijama korenspondiraju posebnememorijske lokavijeE nazvane portovi. Zao)itavanje vrednosti na nekom portu koristimoinstrukciju I,. Grednost se smeta isklju)ivo uakumulator, to je i prvi operand, dok drugioperand moe biti 4bitnu adresu porta kojeg )itamo.%reba re!i da prvi operand govori i koja jeirina podatka koji se prenosi, A+4bitna. Sli)na je i instrukcija B%&, koja slui zaslanje podatka na odgovaraju!i port. +perandisu isti, s tom razlikom da su im zamenjenamesta, tj. prvo adresa porta, a zatim podatak.Gae ista ograni)enja.

    *$$*$ Aritmetike instrukcije

    &ritmeti)ke operacije su upravo one za )ijeje izvravanje, u osnovi, namenjen ra)unar.&ritmeti)ko logi)ka jedinica je 6>4bitna. (osebnu oblast )ini #B- aritmetika. +na se

    pojavila kao posledica potrebe izra)unavanjavrednosti izraza sa svim ta)nim ciframa, to senajvie koristilo prilikom ra)unanja

    bankovnog salda. #B- brojevi se predstavljaju

    u formi u kojoj svaka )etiri bita predstavljajubinarni kod jedne decimalne cifre. (ostoje tzv.otpakovani i spakovani format. +tpakovani

    H

  • 5/24/2018 Pri Ruc Nik 8086

    8/46

    format ima za pretpostavku da se u jednom

  • 5/24/2018 Pri Ruc Nik 8086

    9/46

    Nakon izvrenog mnoenja potrebno jepopraviti rezultat instrukcijom AA, kojanema operanada, a podrazumevani jeakumulator, to se poklapa sa izlaznimregistrom instrukcije mnoenja.

    *$$*$6$ Instrukcije za !elenje

    Za delenje neozna)enih bojeva koristimoinstrukciju /I1. +na podrazumeva da se uakumulatoru nalazi deljenik, i zahteva da sekao eksplicitni operand navede samo delilac.&ko je operand duine bajta, tada je sevrednost registra A deli sa operandom,rezultat smeta u A+, a ostatak delenja u [email protected] je operand duine re)i, tada se /:Adeli operandom, rezultat smeta u A, aostatak u /. Sli)no tome imamo instrukciju za delenje

    ozna)enih brojeva, I/I1, za koju su operandii njihovo tuma)enje identni)ni. -elenje #B- brojeva u otpakovanomformatu je tako7e mogu!e, ali je nakon njega

    potrebno instrukcijom AA/ prilagoditirezultat delenja. :mlicitni operand oveinstrukcije je akumulator, u kome se, ujedno,nalazi rezultat delenja.

    *$$.$ +ogike instrukcije i instrukcijepomeranja i rotiranja

    *$$.$#$ +ogike instrukcije

    :nstrukcijom A,/ izvravamo logi)kuoperaciju : nad operandima, a rezultatoperacije se smeta u prvi od njih. -a

    podsetimo, rezultat ima jedinice na onimbinarnim pozicijama na kojima ih istovremenoimaju i oba operanda, dok se na ostalim

    pozicijama nalaze nule. -ozvoljenekombinacije operanada su iste kao i kodaritmeti)kih instrukcija. ogi)ko :: se postie instrukcijom B,koja ima isti oblik kao i predhodna, ali se ovdeu rezultatu jedinica nalazi na onim binarnim

    pozicijama na kojima ih ima bar jedan odoperanada, dok se na ostalim nalaze nule. +peracija 8logi)ko ekskluzivno ::9 sedobija upotrebom instrukcije B, a na)inupotrebe je identi)an kao kod predhodnih. Urezultatu ove instrukcije se jedinica nalazi naonim binarnim mestima gde isklju)ivo jedanod operanada ima jedinicu, dok se na ostalim

    pozicijama nalaze nule. ogi)ko N, odnosno negacija, se postieinstrukcijom ,B&i, za razliku od predhodnihinstrukcija, ima jedan operand, koji ujednoslui i kao izlaz operacije. Njeno dejstvo sesvodi na prostu zamenu jednica nulama i

    obratno.

    *$$.$*$ Instrukcija za rukovanje bitovima

    Iesto imamo potrebu da proverimo vrednostnekog bita, a da tom prilikom ne izmenimosadraj registra, ili memorijske lokacije u

    kojoj se on nalazi. %aj problem se reavainstrukcijom &9'&, koja, zapravo, vrioperaciju logi)ko : i samo postavlja bitovestatus registra. (osle ove instrukcije obi)noslede instrukcije uslovnog skoka.

    *$$.$.$ Instrukcije za pomeranje

    (ostoje dve vrste pomeranjaE logi)ko iaritmeti)ko. @azlika je u tome to instrukcijearitmeti)kog pomeranja )uvaju znakoperanda, dok kod logi)kog pomeranja to nijeslu)aj. :nstrukcije logi)kog i aritmeti)kog

    pomeranja u levo su identi)ne. Njihovi nazivisu '@+ i 'A+ respektivno. +ve instrukcijekao prvi operand sadre vrednost koju treba

    pomeriti, a drugi operand je broj 6, ili registar+, koji sadri podatak o zahtevanom broju

    pomeranja sadraja prvog operanda. %rebare!i da asembler omogu!uje da se umesto

    broja jedan na7e bilo koji broj, jer se onpobrine da se izvri odgovaraju!i brojpomeranja. (omeranje u levo je ekvivalentmnoenju sa dva. (rilikom pomeranja ubacujuse nula na najniu poziciju, a bit sa najvie

    pozicije odlazi u bit prenosa status registra.

    od pomeranja u desno se razlikujuoperacije logi)kog i aritmeti)kog pomeranja.+ve operacije su ekvivalentne operacijamadelenja sa dva. Za operaciju logi)kog pomeranja u desnoinstrukcija je '@. (rilikom pomeranja bit sanajnie pozicije odlazi u bit prenosa statusregistra, dok na najviu poziciju dolazi nula. :nstrukcija 'A, koja omogu!ujearitmeti)ko pomeranje u desno se razlikuje odinstrukcije '@, u tome to se na najvioj

    poziciji zadrava predhodna vrednost, tj, znakoperanda.

    *$$.$$ Instrukcije za rotiranje

    @otacija u levo se obavlja instrukcijom+, uz preuzimanje zate)enog bita prenosa,i instrukcijom B+, bez preuzimanjazate)enog bita prenosa. od obe instrukcije sevrednost sa najvie pozicije smeta u bit

    prenosa, s tom razlikom da se kod +, unajnii bit upisuje zate)ena vrednost iz bita

    prenosa, a kod B+ vrednost sa najviepozicije. od rotacije u desnu stranu situacija jesli)na. :nstrukcija omogu!uje rotiranje u

    desno uz preuzimanje zate)enog bita prenosa,i B bez preuzimanja zate)enog bita

    prenosa. (rilikom rotacije u desno, bit sa

    J

  • 5/24/2018 Pri Ruc Nik 8086

    10/46

    najnie pozicije odlazi u bit prenosa statusregistra, me7utim, instrukciju na najviu

    poziciju dolazi zate)ena vrednost bita prenosa,dok kod B instrukcije na to mesto dolazivrednost sa najnie pozicije.

    *$$$ %pravljake instrukcije

    Upravlja)ke instrukcije omogu!ujubezuslovnu i uslovnu izmenu redosledaizvravanja instrukcija, obrazovanje

    programskih petlji i pozive potprograma.

    *$$$#$ Instrukcije bezuslovnog skoka

    ao osnovna instrukcija skoka, postojiinstrukcija bezuslovnog skoka EP. +na

    poseduje jedan operand koji predstavlja adresuna koju !e se izvriti skok. @azlikujemo trirazli)ita oblika instrukcije bezuslovnog skoka,

    kratki skok "s>ort$ koji obuhvata raspon od462< do 62H bajta, skok u blizini "near$ koji seodnosi na lokacije iz istog segmenta, i dalekiskok "far$ koji dozvoljava skok van teku!egsegmenta. Za kratki skok raspon se ra)una uodnosu na instrukciju skoka. (rilikom

    prevo7enja asembler sam otkriva da li je skokunutar istog segmenta ili izme7u dvasegmenta. ada je re) o kratkom skoku, totreba eksplicitno navesti stavljanjem klju)nere)i s>ort ispred imena labele.

    *$$$*$ Instrukcije uslovnog skoka

    :nstrukcije uslovnog skoka se koriste nakoninstrukcija koje uti)u na sadraj statusregistra. +bi)no se radi o aritmeti)kiminstrukcijama, naj)e!e pore7enju, ili pak onekoj iz grupe logi)kih instrukcija. Njihov

    jedini operand omogu!uje kratki skok urasponu 462< do 62H bajta. :nstrukcija E9 omogu!uje utvr7ivanjevaenja relacije jednako. +na vai za

    pore7enje i ozna)enih i neozna)enih brojeva.:nstrukcija E,9 omogu!uje utvr7ivanjerelacije razli)ito. : ona vai i za ozna)ene i zaneozna)ene brojeve. :nstrukcija EA, odnosno E,39, se odnosi naneozna)ene brojeve. +na omogu!ujeutvr7ivanje relacije ve!i, odnosno nije manjiili jednak. :nstrukcija E39, odnosno E,A, se odnosi naneozna)ene brojeve. +na omogu!ujeutvr7ivanje vaenja relacije manje ili jednako,odnosno nije ve!e. Za utvr7ivanje vaenja relacije ve!e ili

    jednako, odnosno nije manje, koristimoinstrukciju EA9, odnosno E,3. : ovainstrukcija vai za neozna)ene brojeve. Za utvr7ivanje vaenja relacije manje,

    odnosno nije ve!e ili jednako slui instrukcijaE3, odnosno instrukcija E,A9. : ovainstrukcija vai za neozna)ene brojeve.

    Za utvr7ivanje vaenja relacije ve!e,odnosno nije manje i jednako,za ozna)ene

    brojeve slui instrukcija E;, odnosno E,+9.Za utvr7ivanje vaenja relacije manje ili

    jednako, odnosno nije ve!e, za ozna)enebrojeve slue instrukcije E+9, odnosno E,;.

    Za utvr7ivanje vaenja relacije ve!e ilijednako, slui instrukcija E;9, a relacije nijemanje instrukcija E,+. +be se odnose naozna)ene brojeve. Za utvr7ivanje vaenja relacije manje zaozna)ene brojeve slui instrukcija E+,odnosno E,;9. (oto se broja)ka konstanta obi)no smeta uregistar , procesor podrava i instrukcijaskoka ako je registar jednak nuli. %o jeinstrukcija E.

    (reostale instrukcije uslovnog skokaomogu!uju skok ako je odgovaraju!i bit statusregistra jednak nuli odnosno jedinici.

    :nstrukcija E omogu!uje skok ako je bit postavljen, a instrukcija E,omogu!uje skokako ovaj bit nije postavljen. Sli)no, instrukcijaEomogu!uje skok kada je bit postavljen, ainstrukcija E,omogu!uje skok ako ovaj bitnije postavljen. Kto se ti)e bita pariteta, instrukcija EP,odnosno EP9 omogu!uje skok kada je bit

    postavljen, a instrukcija EPB, odnosno E,P,kada on nije postavljen.

    Sli)no za bit prekora)enja instrukcija EBomogu!uje skok kada je bit B postavljen, ainstrukcija E,Bkada on nije postavljen.

    Za bit predznaka instrukcija E' omogu!ujeskok kada je bit ' postavljen, a instrukcijaE,'kada on nije postavljen.*$$$.$ Instrukcije za rukovanjepotprogramima

    (ozivanje podprograma omogu!ujeinstrukcija A++, )iji operand sadri adresu

    potprograma. +va instrukcija implicitnokoristi stek za smetanje povratne adrese

    (ovratak iz potprograma omogu!ujeinstrukcija 9&.

    *$$$$ Instrukcije za obrazovanjeprogramski> petlji

    :nstrukcije za obrazovanje programskihpetlji podrazumevaju da se broja)ka konstantanalazi u registru i da se njena vrednost usvakoj iteraciji smanjuje za jedan. :zlazak iz

    petlje se deava onda kada registar postane jednak nuli, i on podrazumevaobavljenje skratkog skoka. :nstrukcija +BBP

    je osnovna iz ove grupe, a tu su i +BBP9 i+BBP, kao i +BBP,9 i +BBP,, kodkoji dolazi do izlaska iz petlje i ako je

    postavljen bit status registra, odnosno akoon nije postavljen.

    60

  • 5/24/2018 Pri Ruc Nik 8086

    11/46

    *$$$

  • 5/24/2018 Pri Ruc Nik 8086

    12/46

    .$ Asemblerski jezik

    .$#$ 4ormat asemblerske linije

    Svaka asemblerska instrukcija ili direktivazauzima jednu asemblersku liniju. : instrukciji

    i direktivi moe da predhodi labela. abela odinstrukcije, pored razmaka, razdvaja idvota)ka. U asemblerskoj liniji se moenalaziti i komentar, koga najavljuje ta)kazarez.

    .$*$ 'egmenti

    Za definisanje segmenata uvedene suposebne pretprocesorske direktive.

    .$*$#$ Programski mo!eli

    -efinicija programskog modela saoptavaasembleru veli)inu i broj segmenata koji !e

    biti koriteni. 3odel definie direktiva$B/9+koja uvodi naziv modela ' &I,Fmodel sadri jedan segment od >?

    b u kome su i podaci i kod. 'A++model sadri dva segmenta od

    po >? b, jedan za podatke, a drugi zakod.

    BPA&model sadri dva segmenta.Aedan od 6 3b je namenjen za podatke, adrugi od >? b je namenjen za kod.

    9/I% model sadri dva segmenta.

    Aedan od >? b je namenjen za podatke, adrugi od 6 3b za kod. +A;9model sadri dva segmenta od

    po 6 3b, jedan za podatke, a drugi zakod.

    @%;9 model se razlikuje od +A;9modela po tome to dozvoljava definisanjenizova duih od >?b.

    U ovom priru)niku !e se koristiti 'A++model.

    .$*$*$ raj programa

    raju svakog programa ozna)ava direktiva9,/. Nakon ove direktive moe slediti labelakoja ukazuje na lokaciju od koje zapo)injeizvravanje programa. &sembler ignorie tekst koji sledi iza ovedirektive.

    .$*$.$ 'egment ko!a

    -irektiva $B/9 ozna)ava po)etaksegmenta koda, u kome se nalazi izvrni kodnaeg programa. (osle ove direktive sledeinstrukcije asemblerskog jezika.

    .$*$$ 'egment po!ataka

    (ostoji vie vrsta segmenata podataka. Svakiod njih najavljuje posebna direktiva' $/A&A 4 ozna)ava po)etak segmenta

    podataka sa inicijalizovanim podacima,odnosno onim podacima )ija po)etna

    vrednost je prilikom prevo7enja poznata. $/A&AG 4 ozna)ava po)etak segmenta

    podataka sa neinicijalizovanim podacima.Za ove podatke znamo samo kolikumemoriju zauzimaju, a po)etne vrednostinisu bitne.

    $B,'& 4 definie po)etak segmentakonstantnih podataka.

    Segmenti $/A&A, $/A&AG, $B,'&spadaju u grupu /;B%P, odnosno grupusegmenata podataka. U nastavku sledi primer kori!enja

    direktiva..model small.data.code

    mov ax,datamov ds,ax

    e!d

    Aedine dve instrukcije iz predhodnogprimera pune adresu segmenta podataka, kojuozna)ava ime H!ata, u /'registar. :me H!ata ozna)ava segment koji )ine)lanovi /;B%P. &dresa nije smetenadirektno u segmentni registar, zbogograni)enja procesora pa se dodeljivanje vri

    preko akumulatora.

    .$*$

  • 5/24/2018 Pri Ruc Nik 8086

    13/46

    Leksadecimalne konstante ozna)ava postfiks>, odnosno @. (ri tome, konstanta zapo)injecifrom od 0do 7, dok ostale cifre mogu biti od0do 4. +ktalne konstante ozna)ava postifks ,odnosno o. -ozvoljene cifare su od 0do 5.

    #inarne konstante se sastoje od cifara 0i #,iza kojih sledi znak b. Stringovi "znakovne konstante$ se navodeizme7u jednostrukih ili dvostrukih znakovanavoda. -irektiva 9J%omogu!uje davanje imenakonstantama. :spred direktive se navodi imekonstante, a nakon nje konstanta "broj ilistring$.

    .$.$*$ Pre!efinisane konstante

    (ored imena H!ata za adresu segmentapodataka predefinisane su i slede!e konstante' K4 adresa teku!e linije koda Hco!e4 adresa segmenta koda Hcurseg4 adresa aktuelnog segmenta GG!ate4 teku!i datum H4ile,ame 4 ili GGfilename string sa

    nazivom asemblirane datoteke. H'tartup4 adresa po)etka koda. GGtime4 string teku!eg vremena.

    .$.$ auzimanje memorije za promenljive

    .$.$#$ 'kalarne promenljive

    -irektiva /3omogu!uje zauzimanje jednogbajta za promenljivu )ije ime se navodi ispreddirektive, a iza nje se po potrebi navodi

    po)etna vrednost promenljive. &ko se po)etnavrednost ne navodi, iza direktive sledi znak

    pitanja. U nastavku slede primeri direktive/3'

    ....

    .datax db 5" db 2# db $

    ....

    U predhodnom primeru se u segmentupodataka zauzimaju tri uzastopna bajta, ukojima !e se nalaziti nae promenljive "=,D iz$. :mena =,D i z predstavljaju adrese

    promenljivih. -irektiva /= omoguMuje zauzimanje dva

    bajta, a direktiva //omogu!uje zauzimanje ?bajta.

    .$.$*$ Pokazivai

    Zauzeta memorijska lokacija moe da sadripokaziva). %o se opisuje oznakom P& izakoje sledi opis pokazivane lokacije. %ako ' x

    dw ptr word ozna)ava zauzimanjememorijske lokacije od dva bajta koja sadriadresu lokacije od dva bajta.

    .$.$.$ ,izovi

    -o zauzimanja niza lokacija dolazi ako seiza direktive za zauzimanje jedne navede brojelemenata niza, a zatim re) /%P iza koje uzagradi sledi vrednost na koju se inicijalizujuelementi niza '

    ....

    .data!i# db 100 d%p&$'....

    U predhodnom primeru nam je definisanjedan niz od 600 bajtova, bez inicijalizacije. (ristupanje elementu niza se ozna)ava kao

    ime(nizaLin!eksM..$$ %slovno asembliranje

    U nastavku su navedene direktive za uslovnoasembliranje'

    I4 4 programski blok se asemblira uslu)aju da je navedeni uslov ispunjen.

    I4/944 programski blok se asemblira uslu)aju da je navedeni simbol definisan.

    I4,/94 4 asembliranje programskogbloka se vri ako vrednost simbola nije

    definisana. Nakon navo7enja programskog bloka koji !ese asemblirati ako je neki od uslova ispunjen,moe slediti i programski blok, koji seasemblira u suprotnom slu)aju. %o ozna)avadirektiva 9+'9. Svaki programski blok za uslovnoasembliranje se zavrava direktivom 9,/I4'

    .datax d( 2" d( 3# d( $

    .code i)de) sabe*i mov ax,x add ax," mov #,ax else mov #,0 e!di)

    U prethodnom primeru bi!e asembliran prviprogramski blok "u kome se zbir promenljivihx i N smeta u z$, ako je definisan simbolsaberi. :na)e !e biti asembliran drugi

    programski blok "u kome se anulira z$.

    .$

  • 5/24/2018 Pri Ruc Nik 8086

    14/46

    3akro definicija se nalazi izme7u direktivaAB i 9,/. (re prve direktive je

    potrebno navesti jedinstveni naziv makroa, anakon nje listu parametara koji !e se u samommakrou koristiti. -ruga direktiva ozna)avakraj makro definicije i ograni)ava samo telo

    makroa. Sledi primer kori!enja ovihdirektiva'

    .datax d( 2" d( 3# d( $.code

    sabe*i mac*o a,b,c mov ax,a add ax,b mov c,ax e!dm

    ...

    sabe*i x,",#

    Nakon asembliranja predhodnog primerapoziv makroa saberi xONOz !e biti zamenjeninstrukcijama'

    mov ax,xadd ax,"mov #,ax

    Zna)i poziv makroa je zamenjen telommakroa u kome su parametri zamenjeniargumentima. -irektiva +BA+ omogu!uje uvo7enjelokalnih labela u telu makroa. Aedan primernjene upotrebe je dat u slede!em primeru'

    pa%#a mac*o a local %ma!i

    mov cx,a%ma!i: dec cx !# %ma!i e!dm

    ...

    pa%#a 100 pa%#a 20

    U predhodnom primeru labela umanji jeproglaena lokalnom, pa viestruki pozivimakroa pauza neizazivaju probleme uasembliranju..$6$ Potprogrami

    -efinicija prtprograma otpo)inje direktivomPB pre koje sledi njeno ime. Nakon ovedirektive moe da sledi lista parametara.

    (otprogrami se pozivaju instrukcijomA++.

    istu parametara najavljuje direktiva A;.Nakon nje slede imena parametara. Za njih sepodrazumeva da zauzimaju dva bajta. :zaparametra se moe navesti njegov opis, koganajavljuje dvota)ka. -efinicija potprograma se zavrava

    direktivom 9,/P, kojoj predhodi nazivpotprograma )iji kraj ozna)ava ova direktiva. U nastavku sledi potpun primerasemblerskog programa sa definicijom i

    pozivom potprograma saberi'

    .model small

    .stac

    .datax d( 2" d( 3# d( $.codesabe*i -/

    a,b,c : - / 9

    p%sh bp mov bp,sp

    mov ax,a add ax,b mov bx,c mov [bx],ax

    pop bp

    *et 9

    sabe*i -

    sta*t: mov ax,data

    mov ds,ax

    lea ax,# p%sh ax mov ax," p%sh ax mov ax,x p%sh ax call sabe*i

    mov ax,4c00h i!t 21he!d sta*t

    U potprogramu saberise podrazumeva da se

    argumenti prenose posredstvom steka. Zbogtoga je potrebno kori!enje 3Pregistra. Za svatri parametra se podrazumeva da se odnose nalokacije steka velike po dva bajta. Za tre!i

    parametar je navedeno da sadri adresulokacije velike dva bajta. A;+9,ozna)ava

    broj bajta potreban za smetanje argumenatana stek. +n se koristi kao operand instrukcije9&da bi se stek ispraznio za pomenuti broj

    bajta. (oslednje dve instrukcije uasemblerskom programu omogu!uju da se, pozavretku izvravanja asemblerskog programa,nastavi izvravanje operativnog sistema.

    6?

  • 5/24/2018 Pri Ruc Nik 8086

    15/46

    $ Primeri programa

    $#$ /o!ela vre!nosti

    (rilikom ra)unanja matemati)kih izraza zaprivremeno )uvanje vrednosti obi)no

    koristimo neki od registara opte namene, anaj)e!e akumulator. -a bi se vrednostregistra inicijalizovala, odnosno postavila nanulu, koristi se slede!i izraz, konkretno zaakumulator.

    mov ax,0

    3e7utim, to i nije najsre!nije reenje.ksplicitno dodeljivanje brojne vrednostinekom registru zahteva postojanjeneposrednog operanda u okviru mainske re)i.od dodeljivanja vrednosti razli)ite od nula,to je neizbeno, me7utim, ako je vrednost

    jednaka nuli to se moe izvesti i upotrebomoperacije 8ekskluzivno ili9 nad registrom, dok

    je i drugi parametar isti taj registar. Zaakumulator to izgleda ovako.

    xo* ax,ax

    ao to se moe odmah primetiti, ovainstrukcija ne zahteva nikakvu brojnuvrednost te je samim tim njen mainski kodkra!i. +na se zbog svojih osobina mnogo)e!e sre!e nego instrukcija pre nje. (re ili kasnije moramo pristupiti nekoj

    promenljivoj koja se nalazi u segmentupodataka. Naravno od toga kog je tipa podatakzavisi kako !emo mu pristupiti. %reba obratiti

    panju na to da oba operanda moraju biti isteduine. Grednost skalarnoj promenljivoj sedodeljuje instrukcijom u slede!oj formi.

    mov imep*ome!live, v*ed!ost

    +perand, koji sadri ime promenljive, se,prilikom asembliranja, zamenjuje adresomdate promenljive unutar segmenta podataka"offset$. -odela vrednosti jednom elementu niza ima

    slede!u formu'

    mov ime!i#a[i!des], v*ed!ost

    -odelu vrednosti svim elementima nizaopisuje slede!i asemblerski program '

    .model small

    .stac

    .data!i# db 100 d%p&$'.codesta*t: mov ax,data

    mov ds,ax

    mov al,5

    xo* bx,bxsledeci: mov !i#[bx],al i!c bx cmp bx,9; !i# !e sledeci

    mov ax,4c00h i!t 21he!d sta*t

    U primeru smo sve elemente niza od stoelemenata inicijalizovali na vrednost F, koja senalazi u akumulatoru. ao to se moglo

    primetiti pristup svakom elementu je zahtevora)unanje nove vrednosti indeksa niza,smetenog u registru #1. -a smo imalielemente duine dva bajta registar #1, bimorali uve!avati za dva. +znaku +9,;&@

    pre imena niza u asembliranju zamenjuje

    duina niza. Naravno, ovo nije jedini na)in zainicijalizaciju niza. (ostoji i posebna grupainstrukcija za rad sa nizovima, koju smo imali

    prilike ranije da upoznamo, a naredni primerpredstavlja ekvivalent predhodnog.

    .model small

    .stac

    .data!i# db 100 d%p&$'.codesta*t: mov ax,data mov ds,ax

    mov es,ax

    mov al,5

    cld mov cx,9; !i# mov di,o))set !i# *ep stosb

    mov ax,4c00h i!t 21he!d sta*t

    (oto instrukcija '&B' pie na pozicijuozna)enu registarskim parom S'-: morali

    smo pre po)etka inicijalizacije postavitivrednost datog segmentnog registra da

    pokazuje na na segment podataka. ori!enjeprefiksa 9P pre instrukcije '&B' uzrokujenekoliko stvari. %ako registar B1 koristimo za

    brojanje, jer je on implicitni parametaroperacije repeticije. +sim to se vrednost

    broja)kog registra smanjuje, menja se ivrednost indeksnog registra odredita, tj. -:, ito u onom smeru koji je odre7en stanjem bitasmera status registra. -a bi brojanje bilo kaviim adresama morali smo postaviti taj bit nanulu. (ri tome se podrazumeva da se za

    instrukciju '&B'3 vrednost /I registraumanjuje za jedan.

    6F

  • 5/24/2018 Pri Ruc Nik 8086

    16/46

    $*$ opiranje vre!nosti

    opiranje vrednosti se vri u slede!oj formi'

    mov ax, imep*om1 ilimov imep*om2, ax

    %o naravno vai za slu)aj kada se radi oskalaru duine dva bajta, me7utim, kada je u

    pitanju bajt potrebno je koristi neki od

  • 5/24/2018 Pri Ruc Nik 8086

    17/46

    add ax, 1adc dx, 0

    Sabiranje sa nulom, navedeno kao drugainstrukcija, ima smisla jer se radi o sabiranju ukome se uzima vrednost bita prenosa iz niegdela.

    +duzimanje u duploj preciznosti li)i nasabiranje u duploj preciznosti'

    s%b ax, !i#ideosbb dx, visideo

    -ekrementiranje, odnosno umanjenje zajedan, sli)no inkrementiranju, u osnovinemenja bit prenosa, pa se mora izvesti prekooperacija oduzimanja. Za instrukciju /9imamo slede!u implementaciju.

    s%b ax, 1sbb dx, 0

    omplementiranje u duploj preciznosti seoslanja na instrukciju ,9;, odnosnonegaciju. Za ovo postoje dva na)ina na koji semoe izvesti. (rvi predstavlja traenje drugogkomplementa po definiciji, to podrazumevatraenje prvog komplementa, odnosno logi)kone, a zatim uve!anje vrednosti za jedan.

    !ot ax!ot dxadd ax, 1adc dx, 0

    3e7utim, postoji i druga varijanta koja sezasniva na tome da instrukcija ,9;menja bit

    prenosa ukoliko je potrebna pozajmica.

    !e= dx!e= axsbb dx, 0

    $$ Asemblerski oblik I4-&@9,-9+'9

    iskaza

    Za slede!u sekvencu iskaza B programskogjezika '

    i) &&x+4 > "?2' @@ &x A 10'' # x + #Belse # 0B

    ekvivalentan asemblerski program moe daizgleda ovako'

    .model small

    .stac

    .datax d( 2" d( 6

    # d( $.codesta*t: mov ax,data mov ds,ax

    mov ax,x

    add ax,4 mov bx," shl bx,1 cmp ax,bx e !etac!o mov ax,x cmp ax,10 =e !etac!otac!o: mov ax,x add ax," mov #,ax mp sho*t *a!etac!o: mov #,0*a:

    mov ax,4c00h i!t 21he!d sta*t

    $

  • 5/24/2018 Pri Ruc Nik 8086

    18/46

    mov #,0*a:

    mov ax,4c00h i!t 21he!d sta*t

    $6$ Asemblerski oblik 4B iskaza

    Za slede!u sekvencu u B programskomjeziku'

    )o* &a0Ba++Ba A10'# x++B

    ekvivalentni asemblerski program moe daizgleda'

    .model small

    .stac

    .data

    x d( 3# d( $.codesta*t: mov ax,data mov ds,ax

    mov cx,0 mp sho*t p*ove*a

    telo: mov ax,x mov #,ax i!c x

    i!c cxp*ove*a:

    cmp cx,10 l telo

    mov ax,4c00h i!t 21he!d sta*t

    (redhodni asemblerski program moe seskratiti ako se koristi instrukcija +BBP "kojakao broja) iteracija koristi registar B1, a )ijioperand je labela po)etka tela petlje$'

    .model small

    .stac.datax d( 3.codesta*t: mov ax,data mov ds,ax

    mov cx,10telo: i!c x

    loop telo

    mov ax,4c00h i!t 21h

    e!d sta*t

    &ko se broja) iteracija ne smesti u registar,prethodni asemblerski program moe daizgleda'

    .model small

    .stac

    .data

    x d( 3# d( $a d( $.codesta*t: mov ax,data mov ds,ax

    mov a,0 mp sho*t p*ove*a

    telo: mov ax,x mov #,ax i!c x

    i!c ap*ove*a: mov ax,a cmp ax,10 l telo

    mov ax,4c00h i!t 21he!d sta*t

    $5$ Asemblerski oblik =@I+9 iskaza

    Za slede!u sekvencu iskaza B programskogjezika'

    (hile &xA#' x++B

    ekvivalentni asemblerski program moe daizgleda'

    .model small

    .stac

    .datax d( 3# d( 6.codesta*t: mov ax,data mov ds,ax

    p*ove*a: mov ax,x cmp ax,# =e *a

    telo: i!c x mp sho*t p*ove*a

    *a: mov ax,4c00h i!t 21he!d sta*t

    $8$ Asemblerski oblik 9P9A&-%,&I+iskaza

    6

  • 5/24/2018 Pri Ruc Nik 8086

    19/46

    Za slede!u sekvencu iskaza B programskogjezika'do C x++BD (hile &xA#'B

    ekvivalentni asemblerski program moe da

    izgleda'

    .model small

    .stac

    .datax d( 3# d( 6.codesta*t: mov ax,data mov ds,ax

    telo: i!c x

    p*ove*a:

    mov ax,x cmp ax,# =e *a mp sho*t telo

    mov ax,4c00h i!t 21he!d sta*t

    $7$ Prenos argumenata preko registara

    &rgumenti se mogu slati preko registara upotprogram samo ako ima dovoljno registara.U primeru koji sledi argumenti potprograma

    se prosle7uju preko registara'.model small.stac.codepa%#a -/p : dec cx !# p *etpa%#a -

    sta*t: mov cx,1000 call pa%#a

    mov ax,4c00h

    i!t 21he!d sta*t

    $#0$ 1ra"anje rezultata potprogramapreko registara

    U primeru asemblerskog programa koji sledinaveden je potprogram saberi koji uakumulatoru vra!a sumu "koja je rezultatizvravanja ovog potprograma$.

    .model small

    .stac

    .data

    x d( 2" d( 6# d( $

    .codesabe*i -/ a : /,b : / 9

    p%sh bp mov bp,sp

    mov ax,a add ax,b

    pop bp *etsabe*i -

    sta*t: mov ax,data mov ds,ax

    mov ax," p%sh ax mov ax,x p%sh ax call sabe*i

    mov #,ax

    mov ax,4c00h i!t 21he!d sta*t

    $##$ Preki!ne rutine

    (rekidne rutine ili, kako se )e!e nazivaju,interapti "engl. interrupt$, predstavljaju jednu

    posebnu vrstu potprograma. (ostoje dve vrsteprekidnih rutina.

    (rva, po kojoj su i dobile ime, predstavljarutine koje se pozivaju u slu)aju nekog

    hardverskog doga7aja. %akve rutine senazivaju i obra7iva)i prekida.

    -rugu grupu )ine tzv. servisi, odnosnosistemski podprogrami, koji su napisani kako

    bi se olakala komunikacija izme7uprogramera i operativnog sistema. od njih sekomunikacija odvija preko registara, kojisadre ili vrednosti potrebnih argumenata, ili

    pak adrese memorijskih zona gde bi servistrebao da vrati rezultat. +ve rutine se nepozivaju po imenu, ve! porednom broju, za to slui instrukcija :N%,nakon koje se navodi broj prekidne rutine.

    Svaki servis moe posedovati vie razli)itihfunkcija, a one se biraju, naj)e!e, na osnovusadraja vieg dela akumulatora.

    Na samom po)etku adresnog prostora ovogprocesora se nalazi tabela prekida sa adresamaprekidnih rutina. Svaka adresa zauzima ?bajta, dva za ofset, a dva za segment.

    6J

  • 5/24/2018 Pri Ruc Nik 8086

    20/46

    - 'erial port B# ) B.

    +vaj prekid se deava kada do7e do prijema,

    odnosno slanja znaka preko serijskog portaB+36OB+3;.

  • 5/24/2018 Pri Ruc Nik 8086

    21/46

    kako bi bio u stanju da prua neke odosnovnih servisa za pristup hardveru ra)unara. #ez upotrebe ovih servisa rad sa ra)unarom

    bi bio veoma komplikovan i mukotrpan, aprogrami razvijeni za jednu konfiguracijura)unara se ne bi mogli izvravati na drugoj.

    +vom prilikom !emo navesti samo oneprekide koji se naj)e!e koriste i postoje usvim varijantama #:+S4a. Naravno, kako setehnologija menja tako se menja i sadraj#:+S4a, i dodaju se dodatni servisi za

    podravanje novih mogu!nosti.

    tekst02h sivih tekst

    0;h tekst0?h ;20=200 ? grafika0Fh ;20=200 ? sive grafika0>h >?0=200 2 grafika0Hh grafika

    0h >?0=200 6> grafika05h >?0=;F0 mono grafika60h >?0=;F0 6> grafika66h >?0=??0=? grafika6;h ;20=200 2F> grafika

    ao to ste primetili ovde nema nekih ve!ihrezolucija, razlog za to je to su ti modovinestandardni i kod svakog proizvo7a)a senalaze na drugom mestu. 3e7utim postoji iGS& standard, koji propisuje na)inkori!enja takvih modova, bez obzira na

    proizvo7a)a. Kto se ti)e tekstualnih modova treba re!i dakod njih za svaki karakter ispisan na ekranu

    postoji i atribut, koji definie njegovu boju, iboju pozadine na kojoj je ispisan. U memorijise po)etak tekstualnog ekrana nalazi u

    segmenu # - 'et cursor tNpe

    (onekad je u aplikacijama korisno izmenitioblik tekstualnog kursora, ili ga potpunoisklju)iti. +vo je upravo funkcija koja nam tonudi. /de u BL registru navodimo po)etnulinuju kursora unutar karaktera, a u Bkrajnju. U gornjem delu BL se nalazi i atributvidljivosti koji je 0 za vidljiv, a preostali zanevidljiv kursor, mada se zbogkompatibilnosti uzima 2.

    vo procedura koje vre izmenu oblikatekstualnog kursora, i odgovaraju radu u

    26

  • 5/24/2018 Pri Ruc Nik 8086

    22/46

    tekstualnoj rezoluciji - 'et cursor position

    %ekst je potrebno ispisati na neku konkretnupoziciju, to se postie ovom funkcijom. +nana ulazu zahteva da se vrsta nalazi u -L, akolona u - U #L se o)ekuje broj tekstualnestranice, obi)no se postavlja na nulu.

    Slede!a procedura postavlja kursor naodgovaraju!u poziciju, koju predhodnomoramo staviti na stek.

    =otox" -/ E : FG,G : FG 9

    p%sh bp mov bp,sp

    mov ah,2 xo* bh,bh mov dh,G mov dl,E i!t 10h pop bp

    *et 9=otox" -

    A@ 0.> - ea! cursor position

    +va funkcija vra!a podeavanja odpredhodne dve procedure. %ako da na osnovuregistara BL i B moemo utvrditi teku!iizgled kursora, a na osnovu -L i - pozicijukursora na ekranu.

    =etx -/ mov ah,3

    i!t 10h xo* ax,ax mov al,dl

    *et=etx -

    =et" -/ mov ah,3 i!t 10h xo* ax,ax

    mov al,dh *et=et" -

    +ve dve funkcije vra!aju u akumulatorupoziciju kursora, i to prva kolonu, a drugavrstu.

    A@ 0 - 'elect active !isplaN page

    U pojedinim modovima, zavisno od koli)inememorije na video kartici, postoji mogu!nost

    paralelnog kori!enja vie grafi)kih strana. (riradu u tekstualnom reimu ovo i nije bitno,tako da se ne!emo previe zadravati. %rebare!i samo da broj stranice na koju elimo da

    pre7emo treba sa se nalazi u & registru.

    A@ 06> - 'croll up 2in!o2

    ada radimo u tekstualnom reimu,moemo definisati veli)inu prozora kojielimo skrolovati, u ovom slu)aju na gore.+va funkcija se ponajpre koristi za brisanjeekrana. +na o)ekuje da na ulazu dobije u & brojlinija koliko treba skrolovati dati prozor, ako

    je nula, zna)i da se trai brisanje. & prozor sedefinie pomo!u dve ta)ke, gde su BL,Bkoordinate gornjeg levog ugla, a -L,-donjeg desnog ugla. U #L se stavlja atributkoji treba da se postavlja u prazne linije.

    cl*sc* -/ mov ax,0600h mov bh,07h xo* cx,cx mov dh,24 mov dl,7H i!t 10h mov ah,2

    xo* bh,bh xo* dx,dx i!t 10h *etcl*sc* -

    Navedena procedura brie sadrajtekstualnog ekrana u standardnoj rezoluciji - 'croll !o2n 2in!o2

    Sli)no predhodnoj funkciji, s tom razlikomda se sada skrolovanje radraja vri prema

    22

  • 5/24/2018 Pri Ruc Nik 8086

    23/46

    dole. (arametri poziva su identi)ni predhodnojfunkciji.

    A@ 08> - ea! c>aracter an! attribute

    +)itava znak na trenutnoj poziciji kursora,

    kao i njegov atribut. ao parametar pozivapotrebno je postaviti u #L registru stranicu zakoju se trai o)itavanje karaktera. ao izlazdobijamo u & karakter, a u &L atribut. &tribut moe se sastoji od dva dela, vii deo

    bajta je boja pozadine, a nii deo boja teksta.

    3roj 3oja

    0h crna6h plava2h zelena;h plavo4zelena?h crvena

    Fh ljubi)asta>h braonHh svetlo siva - =rite c>aracter an! attribute

    Naravno postoji i funkcija koja omogu!avaispis znaka na ekranu i to sa odre7enimatributom. +vaj put se karakter nalazi u &registru, u #L broj tekstualne strane, a u #atribut, koji formiramo kako je to ranijenavedeno. U registar B1 se stavlja broj

    ponavljanja ispisa datog karaktera.Svi znakovi se prikazuju uklju)uju!i i

    kontrolne.p%tcc -/ c : FG,boa : FG 9 p%sh bp mov bp,sp

    mov ah,0Hh mov al,c mov bl,boa xo* bh,bh mov cx,1 i!t 10h

    pop bp *et 9p%tcc -

    A@ 0A> - =rite c>aracter onlN

    :spisuje znak, sli)no prethodnom, s tomrazlikom da se ne navodi atribut znaka koji seispisuje. Svi preostali parametri su isti.

    A@ 09> - =rite text in teletNpe mo!e

    :spisuje znak, ali tako da se kontrolniznakovi interpretiraju na odgovaraju!i na)in.U & je znak a u #L broj stranice.

    p%tc -/ c : FG 9 p%sh bp mov bp,sp

    mov ah,0h mov al,c i!t 10h

    pop bp *et 9p%tc -

    (rocedura koju smo naveli na ekran ispisujeznak koji joj je prosle7en kao ulazni

    parametar.

    A@ 04> - ;et current vi!eo state

    (ozivom ove funkcije dobijamo u registru& redni broj video moda u kome se trenutno

    nalazimo, u #L aktivnu stranicu, a u &L brojkolona teksta koji se moe prikazati u datomvideo modu.

    A@ #.> - =rite string

    :spisuje niz znakova koji se nalaze od adresedefinisanoj registarskim parom S'#(, i to nakoordinate -L,-. -uinu stringa stavljamou B1, a u & se nalazi mod ispisa. Grednost 0

    je za niz koji se sastoji samo od znakova, a u# je atribut i ne vri se pomeranje kursora, 6za isto samo sa pomeranjem kursora. -ok

    vrednost 2 i ; ozna)avaju da se string sastojiod para znak, atribut, a kursor se ne pomeraza 2, a pomera za ;.

    +vim smo obradili sve funkcije ovog servisakoje su nam potrebne da bi smo mogli raditi utekstualnom reimu rada i imati ispis naekranu pod punom kontrolom.

    Slede!i primer slui za demonstracijupredhodno napisanih rutina, i potrebno je svenjih ubaciti u primer koji sledi, i to posleodmah direktive za zapo)injanje kodnogsegmenta.

    .model small

    .stac

    .data

    2;

  • 5/24/2018 Pri Ruc Nik 8086

    24/46

    .codesta*t :

    call cl*sc* mov ax,II p%sh ax call p%tc mov ax,74h

    p%sh ax mov ax,IFI p%sh ax call p%tcc mov ax,10 p%sh ax p%sh ax call =otox" mov ax,II p%sh ax call p%tc

    mov ax,4c00h i!t 21he!d sta*t

    ao to ste verovatno i primetili, teloprimera se sastoji samo od poziva predhodnonapisanih procedura, koje moete slobodnokoristiti i proirivati u svojim narednim

    programima.

    - eNboar! services

    -a bi smo naim programima omogu!ilikomunikaciju sa korisnikom, moramodozvoliti da neke od podataka korisnik unosi

    preko tastature.

    A@ 00> - =ait for keNstroke an! rea!

    A@ #0> - =ait for keNstroke an! rea!ext$

    +ve funkcije !e zaustaviti izvrenjeprograma dogod se ne pritisne neki taster, a

    zatim !e kao izlaz dati u registru & &SB::kod pritisnutog tastera, a u &L registru !e senalaziti tzv. scan kod, )iju tabelu moete na!iu dodacima na kraju priru)nika. -ruga funkcija se odnosi na tastature sa

    proirenim setom tastera, takva je ve!inadananjih tastatura.

    A@ 0#> - ;et keNstroke status

    A@ ##> - ;et keNstroke status ext$

    +ve funkcije !e nam u bitu nule statusregistra vratiti jedinicu ako taster nije

    pritisnut, ili nulu ako jeste pritisnut i u

    akumulatoru !e se nalaziti sadraj kao i pripozivu predhodnih funkcija. @azlika je u tometo ove funkcije ne smatraju znak o)itanim, isamim tim ga ne uklanjaju iz bafera. -ruga funkcija se odnosi na tastature sa

    proirenim setom tastera.

    A@ 0*> - ;et keNboar! status

    A@ #*> - ;et keNboar! status ext$

    (onekad nam je potrebno da proverimostatus kontrolnih tastera na tastaturi. Upravoza to nam slue ove funkcije. +na u registru& vra!a status u zapakovanom formatu.

    -ruga po redu funkcija je i ovde zaduenaza rad sa tastaturana sa proirenim setomtastera, i kao povratnu informaciju vra!a i

    podatak u registru &L.

    A+

    3it Bpis

    H :nsert aktivan> Bapsock aktivanF Numock aktivan? Scrollock aktivan; &lt pritisnut2 Btrl pritisnut6 levi Shift pritisnut0 desni Shift pritisnut

    A@

    3it Bpis

    H SDs@eQ pritisnut> Bapsock aktivanF Numock aktivan? Scrollock aktivan; desni &lt pritisnut2 desni Btrl pritisnut6 levi &lt pritisnut

    0 levi Btrl pritisnut

  • 5/24/2018 Pri Ruc Nik 8086

    25/46

  • 5/24/2018 Pri Ruc Nik 8086

    26/46

    elimo ispisati smetamo u - registar.Ktampanje je mogu!e prekinuti kombinacijomBtrl4#reak.

    A@ 06> - /irect console I)B

    5unkcije direktnog pristupa konzoli, topodrazumeva nemogu!nost prekida,objedinjene su u ovoj -+S funkciji. Ukoliko prilikom poziva u - registarsmestimo vrednost 55h, vri!e se o)itavanjeulaza, i ukoliko je bit nule status registra nanuli u registru & !e nam se nalaziti o)itaniznak.

    U slu)aju da se prilikom poziva u -registru nalazi neka druga vrednost, taj znak!e biti prosle7en na standardni izlaz.

    A@ 07> - Print string

    #ilo bi nam veoma nezgodno kada bismoduga)ke poruke morali prikazivati znak poznak. %o bi pre svega oduzimalo dosta

    procesorskog vremena, a veoma bi zamaraloprogramera. +va funkcija upravo reava takavproblem. (re poziva je potrebno u registarskipar -S'-1 postaviti adresu stringa kojielimo ispisati. 3oramo naglasiti da se stringmora zavriti karakterom 9R9. vo jednog

    primera koji to demonstrira.

    .model small

    .stac.datapo*%a db J/vo e ispis st*i!=a >>>J,13,10,JKJ.codesta*t : mov ax,data mov ds,ax

    mov ah,H mov dx,/LLM po*%a i!t 21h

    mov ax,4c00h i!t 21he!d sta*t

    A@ 0A> - 3uffere! keNboar! input

    %ako7e nam je potrebna i funkcija koja binam omogu!ila unoenje odgovora duih od

    jednog znaka. +na zahteva da se navedeadresa bafera u memoriji gde !e uneeni

    podaci biti smeteni. (rvi bajt u baferu, prepoziva mora sadravati maksimalan brojznakova koji se u bafer mogu smestiti, dok !edrugi bajt po povratku sadravati broj unetihznakova do pritiskanja tastera N%@.(reostali bajtovi bafera !e sadravati uneteznakove. vo jednog primera upotrebe ove funkcije.

    .model small

    .stac

    .datapo*%a db JN!esite st*i!= : KJpo*%a2 db 10,13,JN!eli ste : KJba)e* db 20,0,21 d%p&$'.codesta*t : mov ax,data

    mov ds,ax

    mov ah,H mov dx,/LLM po*%a i!t 21h

    mov ah,0h mov dx,/LLM ba)e* i!t 21h

    mov ah,H mov dx,/LLM po*%a2 i!t 21h

    xo* bx,bx mov bl,ba)e*[1]

    mov ba)e*[bx+2],JKJ

    mov ah,H mov dx,/LLM ba)e*+2 i!t 21h

    mov ax,4c00h i!t 21he!d sta*t

    A@ 03> - >eck stan!ar! input status

    Ukoliko elimo da proverimo da li je dolodo pritiskanja nekog tastera na tastaturi, to

    moemo u)initi pozivom ove funkcije. +na !enam kao odgovor dati u registru & nulaukoliko nijedan taster nije pritisnut, a 055hukoliko jeste pritisnut.

    A@ 0> - lear keNboar! buffer

    Ukoliko pre unosa elimo isprazniti bafertastature od nepro)itanih podataka, recimokada se unosi neka ifra, to !emo u)initi

    pozivom ove funkcije, tako to !emo joj kaoparametar proslediti , recimo, 0=55L u &registru. Ukoliko u njega smestimo broj neke

    od funkcija unosa, ona !e biti pozvana popranjenju bafera.

  • 5/24/2018 Pri Ruc Nik 8086

    27/46

    A 00> - ouse reset

    (re po)etka upotrebe drajvera mia,potrebno ga je inicijalizovati, to se )inipozivom ove funkcije. &ko ovaj drajver nepostoji u &1 !e nam biti vra!ena vrednostnula, a ukoliko postoji &1 !e sadrati 5555h,a u #1 registru !e se nalaziti 0002h ili 5555hako mi ima dva tastera, 0000h ili 000;hukoliko ima tri.

    A 0#> - '>o2 mouse cursor

    (rikazuje pokaziva) mia na ekranu. &kosmo u tekstualnom reimu, bi!e u oblikukvadrati!a, a ukoliko smo u nekom odstandardnih grafi)kih modova, bi!e prikazanastrelica.

    A@ 0*> - @i!e mouse cursor

    (rilikom ispisa, je potrebno uklonit kursorsa ekrana, jer ukoliko se to neu)ini a do7e doskrolovanja teksta na ekranu, ima!emo ostatke

    pokaziva)a mia na ekranu. +vom funkcijomse pokaziva) privremeno uklanja sa ekrana.

    A 0.> - ;et position an! button status

    -a bi na program reagovao na pozicijupokaziva)a mia, moramo biti i u mogu!nostida o)itamo trenutnu poziciju i status tastera. +va funkcija kao rezultat vra!a u registruB1 kolonu, a u -1 vrstu u kojoj se nalazi

    pokaziva). %reba obratiti panju na to da se utekstualnim reimima rada vra!a pozicija u

    pikselima, a ne u pozicijama karaktera, te jestoga te veli)ine potrebno podeliti sa - 'et mouse cursor position

    (ozicioniranje pokaziva)a mia moe bitikorisno kada elimo da korisniku predo)imokoja od navedenih opcija se podrazumeva, iliza simulaciju kretanja pokaziva)a mia poekranu. (ozicija se navodi u registrima B1, kolona,i -1, vrsta, i to u pikselima, tako da je utekstualnim modovima potrebno koordinateekranske pozicije pomnoiti sa - ;et mouse button release

    3oe se detektovati i otputanje tastera, aova funkcija se koristi identi)no kao i

    predhodna, jedina razlika je u tome to se u#1 registru vra!a broj otputanja datog tasteraod prolog pozivanja ove funkcije, kao ikoordinate na kojima je tada bio pokaziva).

    A 05> - /efine >orizontal cursor range

    +grani)avanje kretanja pokaziva)a miamoe biti od koristi, kada je potrebno navestikorisnika da koristi samo odre7ene opcije naekranu. -efinisanje opsega promenekoordinata se vri zasebno za svakukoordinatu. +va funkcija ograni)ava kretanje

    pokaziva)a mia po horizontalnoj osi, i to naopseg od B1 do -1, izraenom u pikselima.

    A 08> - /efine vertical cursor range

    Sli)no tome ova funkija ograni)ava kretanjepokoaziva)a po vertikalnoj osi, gde je u B1minimalna vrednost, a u -1 maksimalnavrednost. Slede!i primer demonstrira upotrebu nekihod dosad navedenih funkcija. :z primera seizlazi pritiskom na oba tastera miaistovremeno.

    .model small

    .stac

    .data

    .codesta*t : xo* ax,ax i!t 33h o* ax,ax # *a

    mov ax,1 i!t 33h

    mov ax,7

    mov cx,10?8 mov dx,70?8 i!t 33h

    2H

  • 5/24/2018 Pri Ruc Nik 8086

    28/46

    mov ax,8 mov cx,5?8 mov dx,20?8 i!t 33hpo!ovo: mov ax,3

    i!t 33h cmp bx,3 !e po!ovo

    *a: mov ax,2 i!t 33h

    mov ax,4c00h i!t 21he!d sta*t

  • 5/24/2018 Pri Ruc Nik 8086

    29/46

    A$ 'pisak instrukcija

    (re nego to po)nemo sa predstavljanjempojedina)nih instrukcija procesora

  • 5/24/2018 Pri Ruc Nik 8086

    30/46

    IF &&9 @0)h' O 0Hh' OR&L 1' THEN 9 AP &9 P 6' @ 0)h ; AP &; P 1' @ 0)h L AP 1 L AP 1ELSE

    9 AP 9 @ 0)h L AP 0 L AP 0ENDIF

    A/ A!! 2it> arrN

    ori?"enje &-B registar,registar&-B registar,konstanta&-B akumulator,konstanta&-B registar,memorija&-B memorija,registar&-B memorija,konstanta

    B / I & ' A P

    1 1 1 1 1 1

    dest AP dest + so%*ce + L

    A// A!!ition

    ori?"enje &-- registar,registar&-- registar,konstanta&-- akumulator,konstanta&-- registar,memorija&-- memorija,registar

    &-- memorija,konstanta

    B / I & ' A P

    1 1 1 1 1 1

    dest AP dest + so%*ce

    A,/ +ogical A,/

    ori?"enje &N- registar,registar&N- registar,konstanta&N- akumulator,konstanta

    &N- registar,memorija&N- memorija,registar&N- memorija,konstanta

    B / I & ' A P

    0 1 1 1 0

    dest AP dest @ so%*ce

    A++ all Proce!ure

    ori?"enje B& near*proc

    B& far*procB& mem*pointer*6>B& reg*pointer*6>B& mem*pointer*;2

    B / I & ' A P

    IF Lpoi!te* THEN PUSHM M AP destse=me!tENDIFPUSHR-R- AP desto))set

    3= onvert 3Nte to =or!

    ori?"enje B#

    B / I & ' A P

    IF&9 A 80h' THEN ; AP 00hELSE

    ; AP ))hENDIF

    + lear arrN 4lag

    ori?"enje BB

    B / I & ' A P

    0

    L AP 0

    +/ lear /irection 4lag

    ;0

  • 5/24/2018 Pri Ruc Nik 8086

    31/46

    ori?"enje B-

    B / I & ' A P

    0

    L AP 0

    +I lear Interrupt-9nable 4lag

    ori?"enje B:

    B / I & ' A P

    0

    RL AP 0

    omplement arrN 4lag

    ori?"enje B3B

    B / I & ' A P

    1

    L AP PL

    P ompare

    ori?"enje B3( registar,registarB3( registar,konstantaB3( akumulator,konstantaB3( registar,memorija

    B3( memorija,registarB3( memorija,konstanta

    B / I & ' A P

    1 1 1 1 1 1SET_FLAGS_FROM_RESULT&dest P so%*ce'

    P'3 ompare 'tring bN 3Nte

    ori?"enje B3(S#

    B / I & ' A P 1 1 1 1 1 1CMP&M:MR',&M:R'IF&L 0' MR AP MR + 1 R AP R + 1ELSE MR AP MR P 1 R AP R P 1ENDIF

    P'= ompare 'tring bN =or!

    ori?"enje B3(S

    B / I & ' A P

    1 1 1 1 1 1CMP&M:MR',&M:R'IF&L 0' MR AP MR + 2 R AP R + 2ELSE

    MR AP MR P 2 R AP R P 2ENDIF

    =/ onvert =or! to /ouble2or!

    ori?"enje B-

    B / I & ' A P

    IF &E A 8000h' THEN E AP 0000hELSE E AP ))))hENDIF

    /AA /ecimal A!just after A!!ition

    ori?"enje -&&

    B / I & ' A P

    1 1 1 1 1IF &9 @ 0)h' O H OR&L 1' THEN 9 AP 9 + 6 L AP 1ELSE L AP 0ENDIFIF&9 O H)h' OR&L 1' THEN 9 AP 9 + 60h L AP 1ELSE

    L AP 0ENDIF

    ;6

  • 5/24/2018 Pri Ruc Nik 8086

    32/46

    /A' /ecimal A!just after 'ubstraction

    ori?"enje -&S

    B / I & ' A P

    1 1 1 1 1

    IF &&9 @ 0)h' O H' OR&L 1' THEN 9 AP 9 P 6 L AP 1ELSE

    L AP 0ENDIFIF&9 O H)h' OR&L 1' THEN 9 AP 9 P 60h L AP 1ELSE

    L AP 0ENDIF

    /9 /ecrement

    ori?"enje -B registar*-B memorija

    B / I & ' A P

    1 1 1 1 1

    dest AP dest P 1

    /I1 /ivi!eO %nsigne!

    ori?"enje -:G registar*-:G memorija*

    B / I & ' A P

    IFFGMRS THEN 9 AP E Q so%*ce ; AP E modso%*ceELSE

    E AP E:E Q so%*ce E AP E:E mod so%*ceENDIF

    @+& @alt t>e Processor

    ori?"enje L%

    B / I & ' A P

    I/I1 Integer /ivi!eO 'igne!

    ori?"enje :-:G registar*:-:G memorija*

    B / I & ' A P

    IFFGMRS THEN 9 AP E Q so%*ce ; AP E modso%*ceELSEE AP E:E Q so%*ce

    E AP E:E mod so%*ceENDIF

    I%+ Integer ultiplNO 'igne!

    ori?"enje :3U registar*:3U memorija*

    B / I & ' A P

    1 1

    IFFGMRS THEN E AP 9 ? so%*ce

    ELSEE:E AP E ? so%*ceENDIF

    I, Input 3Nte or =or!

    ori?"enje :N akumulator, konstanta*, memorija

    B / I & ' A P

    *e= AP &so%*ce'M AP &so%*ce + 2'

    +B/'3 +oa! 'tring bN 3Nte

    ori?"enje +-S#

    B / I & ' A P

    9 AP &M:MR'IF&L 0' THEN MR AP MR + 1ELSE

    MR AP MR P 1ENDIF

    +B/'= +oa! 'tring bN =or!

    ori?"enje +-S

    B / I & ' A P

    9 AP &M:MR'IF&L 0' THEN MR AP MR + 2ELSE

    MR AP MR P 2ENDIF

    +BBP +oop on ount

    ori?"enje ++( pomeraj

    B / I & ' A P

    E AP E P 1IF&E AO 0' THEN JMPsho*tlabelENDIF

    +BBP9 +oop 2>ile 9ual

    +BBP +oop 2>ile ero

    ori?"enje ++( pomeraj++(Z pomeraj

    B / I & ' A P

    E AP E P 1IF&E AO 0' AND&SL 1' THEN

    JMPsho*tlabelENDIF

    +BBP,9 +oop 2>ile ,ot 9ual

    +BBP, +oop 2>ile ,ot ero

    ori?"enje ++(N pomeraj++(NZ pomeraj

    B / I & ' A P

    E AP E P 1IF&E AO 0' AND&SL 0' THEN

    JMPsho*tlabelENDIF

    ;>

  • 5/24/2018 Pri Ruc Nik 8086

    37/46

    B1 ove

    ori?"enje 3+G registar, registar3+G memorija, akumulator3+G akumulator, memorija

    3+G memorija, registar3+G registar, memorija3+G registar, konstanta3+G memorija, konstanta3+G seg*registar, registar*6>3+G seg*registar, memorija3+G registar*6>, seg*registar3+G memorija, seg*registar

    B / I & ' A P

    dest AP so%*ce

    B1'3 ove 'tring bN 3Nte

    ori?"enje 3+GS#

    B / I & ' A P

    &M:R' AP &M:MR'IF&L 0' THEN MR AP MR + 1 R AP R + 1ELSE

    MR AP MR P 1 R AP R P 1ENDIF

    B1'= ove 'tring bN =or!

    ori?"enje 3+GS

    B / I & ' A P

    &M:R' AP &M:MR'IF&L 0' THEN MR AP MR + 2 R AP R + 2ELSE

    MR AP MR P 2 R AP R P 2ENDIF

    %+ ultiplNO %nsigne!

    ori?"enje 3U registar*3U memorija*

    B / I & ' A P

    1 1

    IFFGMRS THEN E AP 9 ? so%*ceELSEE:E AP E ? so%*ce

    ENDIF

    ,9; ,egate

    ori?"enje N/ registarN/ memorija

    B / I & ' A P

    1 1 1 1 1 1

    dest AP P dest

    ,BP ,o Bperation

    ori?"enje N+(

    B / I & ' A P

    XCHGax,ax

    ,B& +ogical ,B&

    ori?"enje N+% registarN+% memorija

    B / I & ' A P

    dest AP NOTdest

    ;H

  • 5/24/2018 Pri Ruc Nik 8086

    38/46

    B +ogical B

    ori?"enje +@ registar,registar+@ registar,konstanta+@ akumulator,konstanta+@ registar,memorija+@ memorija,registar+@ memorija,konstanta

    B / I & ' A P

    0 1 1 1 0

    dest AP dest V so%*ce

    B%& Butput to Port

    ori?"enje +U% konstanta* arrN +eft

    ori?"enje @B registar, 6@B registar, B@B memorija, 6@B memorija, B

    B / I & ' A P

    1 1

    ;

  • 5/24/2018 Pri Ruc Nik 8086

    39/46

    otate troug> arrN ig>t

    ori?"enje @B@ registar, 6@B@ registar, B@B@ memorija, 6@B@ memorija, B

    B / I & ' A P

    1 1

    9P epeat

    9P9 epeat 2>ile 9ual

    9P epeat 2>ile ero

    ori?"enje @(@(@(Z

    B / I & ' A P

    WHILE&E AO 0'

    tr!"#$op%r&t!o" E AP E P 1 IF&SL 0' t%rm!"&t%_'oopEND WHILE

    9P,9 epeat 2>ile ,ot 9ual

    9P, epeat 2>ile ,ot ero

    ori?"enje @(N@(NZ

    B / I & ' A P

    WHILE&E AO 0' tr!"#$op%r&t!o" E AP E P 1 IF&SL AO 0' t%rm!"&t%_'oopEND WHILE

    9& eturn from Proce!ure

    ori?"enje @%@% konstanta*6>

    B / I & ' A P

    POPR-IF L N POPMENDIFIF&o!sta!ta16AO0' M- AP M- + o!sta!ta16ENDIF

    B+ otate +eft

    ori?"enje @+ registar, 6@+ registar, B@+ memorija, 6@+ memorija, B

    B / I & ' A P

    1 1

    B otate ig>t

    ori?"enje @+@ registar, 6@+@ registar, B@+@ memorija, 6@+@ memorija, B

    B / I & ' A P

    1 1

    'A@4 'tore egister A@ into 4lags

    ori?"enje S&L5

    B / I & ' A P

    1 1 1 1 1

    L AP ;0-L AP ;2L AP ;4SL AP ;6ML AP ;7

    ;J

    4 Sadraj

    4 Sadraj

    4Sadraj

    4Sadraj

  • 5/24/2018 Pri Ruc Nik 8086

    40/46

    'A+ '>ift Arit>metric +eft

    ori?"enje S& registar, 6S& registar, BS& memorija, 6

    S& memorija, B

    B / I & ' A P

    1 1 1 1 1

    'A '>ift Arit>metric ig>t

    ori?"enje S&@ registar, 6S&@ registar, B

    S&@ memorija, 6S&@ memorija, B

    B / I & ' A P

    1 1 1 1 1

    '33 'ub 2it> 3orro2

    ori?"enje S## registar, registarS## registar, konstantaS## akumulator, konstantaS## registar, memorijaS## memorija, registarS## memorija, konstanta

    B / I & ' A P

    1 1 1 1 1 1

    dest AP dest P so%*ce P L

    'A'3 'can 'tring bN 3Nte

    ori?"enje SB&S#

    B / I & ' A P

    CMP9,&M:R'IF&L 0'THEN R AP R + 1ELSE R AP R P 1ENDIF

    'A'= 'can 'tring bN =or!

    ori?"enje SB&S

    B / I & ' A P

    CMP9,&M:R'IF&L 0'THEN R AP R + 2ELSE

    R AP R P 2ENDIF

    '@+ '>ift +ogical +eft

    ori?"enje SL registar, 6

    SL registar, BSL memorija, 6SL memorija, B

    B / I & ' A P

    1 1 1 1 1

    '@ '>ift +ogical ig>t

    ori?"enje SL@ registar, 6SL@ registar, BSL@ memorija, 6SL@ memorija, B

    B / I & ' A P

    1 1 1 1 1

    '& 'et arrN 4lagori?"enje S%B

    B / I & ' A P

    6

    L AP 1

    ?0

    4 Sadraj 0

    '4 Sadraj 44 Sadraj 0

    0 Sadraj 4

  • 5/24/2018 Pri Ruc Nik 8086

    41/46

    '&/ 'et /irection 4lag

    ori?"enje S%-

    B / I & ' A P

    6

    L AP 1

    '&I 'et Interrupt-9nable 4lag

    ori?"enje S%:

    B / I & ' A P

    6

    RL AP 1

    '&B'3 'tore 'tring bN 3Nte

    ori?"enje S%+S#

    B / I & ' A P

    &M:R' AP 9IF&L 0' THEN R AP R + 1

    ELSER AP R P 1

    ENDIF

    '&B'= 'tore 'tring bN =or!

    ori?"enje S%+S

    B / I & ' A P

    &M:R' AP 9

    IF&L 0' THEN R AP R + 2ELSE

    R AP R P 2ENDIF

    '%3 'ubstract

    ori?"enje SU# registar, registarSU# registar, konstantaSU# akumulator, konstantaSU# registar, memorijaSU# memorija, registarSU# memorija, konstanta

    B / I & ' A P

    1 1 1 1 1 1

    dest AP dest P so%*ce

    &9'& &est

    ori?"enje %S% registar, registar

    %S% registar, konstanta%S% akumulator, konstanta%S% registar, memorija%S% memorija, konstanta

    B / I & ' A P

    0 1 1 1 0

    SET_FLAGS_FROM_RESULT&dest @ so%*ce'L AP 0/L AP 0

    =AI& =ait

    ori?"enje &:%

    B / I & ' A P

    @; 9xc>ange egisters

    ori?"enje 1BL/ akumulator, registar*6>1BL/ registar, registar1BL/ memorija, registar

    B / I & ' A P

    dest APO so%*ce

    ?6

  • 5/24/2018 Pri Ruc Nik 8086

    42/46

    +A& &ranslate

    ori?"enje 1&%

    B / I & ' A P

    9 AP &FE + 9'

    B +ogical B

    ori?"enje 1+@ registar,registar1+@ registar,konstanta1+@ akumulator,konstanta1+@ registar,memorija1+@ memorija,registar1+@ memorija,konstanta

    B / I & ' A P

    0 1 1 1 0

    dest AP dest T so%*ce

    ?2

  • 5/24/2018 Pri Ruc Nik 8086

    43/46

    3$ A'II tabela

    +vde je data &SB:: tabela, u kojoj se nalazeparalelno ispisane vrednosti u decimalnom,oktalnom, heksadecimalnom formatu, kao isam prikaz &SB:: karaktera, odnosno njegov

    naziv, ukoliko se radi o kontrolnom karakteru.

    /ec Bctal @ex A'II

    0 000 00 NU 6 006 06 S+L 2 002 02 S%1 ; 00; 0; %1 ? 00? 0? +% F 00F 0F NP > 00> 0> &B H 00H 0H #

    < 060 0< #S J 066 0J L%60 062 0& 566 06; 0# G%62 06? 0B 556; 06F 0- B@6? 06> 0 S+6F 06H 05 S:6> 020 60 -6H 026 66 -B6

    6< 022 62 -B26J 02; 6; -B;20 02? 6? -B?26 02F 6F N&22 02> 6> SWN2; 02H 6H %#2? 0;0 6< B&N2F 0;6 6J 32> 0;2 6& SU#2H 0;; 6# SB2< 0;? 6B 5S

    2J 0;F 6- /S;0 0;> 6 @S;6 0;H 65 US;2 0?0 20 S(;; 0?6 26 X;? 0?2 22 T;F 0?; 2; Y;> 0?? 2? R;H 0?F 2F ;< 0?> 2> [

    /ec Bctal @ex A'II;J 0?H 2H \

    ?0 0F0 2< "?6 0F6 2J $?2 0F2 2& ]?; 0F; 2# ^?? 0F? 2B ,

    ?F 0FF 2- 4?> 0F> 2 .?H 0FH 25 O?< 0>0 ;0 0?J 0>6 ;6 6F0 0>2 ;2 2F6 0>; ;; ;F2 0>? ;? ?F; 0>F ;F FF? 0>> ;> >

    FF 0>H ;H HF> 0H0 ;< ,#:+S podrkom za tastaturu. (odeli!emo ih uvie grupa radi lakeg kori!enja.

    $#$ Abece!aeN ,orm$ Q '>ift Q trl Q Alt

    & 6>6 6?6 606 600 # ;0>2 ;0?2 ;002 ;000 B 2>; 2?2 20; 200 - 20>? 20?? 200? 2000 62>F 62?F 620F 6200 5 26>> 26?> 260> 2600 / 22>H 22?H 220H 2200 L 2;>< 2;?< 2;0< 2;00 : 6H>J 6H?J 6H0J 6H00 A 2?>& 2??& 2?0& 2?00

    2F># 2F?# 2F0# 2F00 2>>B 2>?B 2>0B 2>00 3 ;2>- ;2?- ;20- ;200 N ;6> ;6? ;60 ;600 + 65 6

  • 5/24/2018 Pri Ruc Nik 8086

    46/46

    +iteratura

    8:N%