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 ®istru, 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; < pritisnut2 Btrl pritisnut6 levi Shift pritisnut0 desni Shift pritisnut
A@
3it Bpis
H SDs@eQ pritisnut> Bapsock aktivanF Numock aktivan? Scrollock aktivan; desni < pritisnut2 desni Btrl pritisnut6 levi < 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 ®istru. 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%