VIŠA TEHNIČKA ŠKOLA DOBOJ
SEMINARSKI RAD Način adresiranja mikroprocesora i8086
PROFESOR: Dr Zlatko Bundalo ASISTENT: Dipl. ing Gordana Jotanović
STUDENT: Stanišić Milana INDEKS: 949/01
SADRŽAJ
Mikroprocesor i8086................................. i8086.............................................. .......................... ......................... ................... ....... 2 Arhitektura i8086………………… i8086………………………………… …………………………...... …………............... ......... 3 Format instrukcija i način izvršavanja.......................... izvršavanja....................................... ......................... ............ 6 Načini adresiranja........................ adresiranja..................................... .......................... ......................... ......................... .................... ....... 7 Adresiranje podataka........................ podataka..................................... .......................... ......................... ...................... .......... 8
Registarsko adresiranje.......................... adresiranje...................................... ......................... .................... ....... 9
N eposredno eposredno
adresiranje. adresiranje..... ........ ........ ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ ...... .. 10
Direktno Direktno adresiranje. adresiranje..... ........ ......... ......... ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ ...... .. 11
Registarsko Registarsko-indire -indirektno ktno adresir adresiranje. anje...... ......... ........ ........ ......... ......... ........ ........ ........ .... 12
Bazno-relati Bazno-relativno vno adresiranje.. adresiranje...... ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ ...... .. 14
Direktno-ind Direktno-indeksno eksno adresiranje.. adresiranje...... ........ ......... ......... ........ ........ ......... ......... ........ ........ ...... .. 15
Bazno-indeksn Bazno-indeksno o adresiranje.. adresiranje...... ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ ...... .. 16
Skalarno-ind Skalarno-indeksno eksno adresiranje.. adresiranje...... ........ ......... ......... ........ ........ ......... ......... ........ ........ ...... .. 17
Adresiranje Adresiranje instrukcija instrukcija.... ........ ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ ...... 18
Direktno Direktno adresiranje. adresiranje..... ........ ........ ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ ......
Indirektno Indirektno adresiranje. adresiranje..... ........ ......... ......... ........ ........ ......... ......... ........ ........ ......... ......... ...... .. 19
Relativno Relativno adresiranje. adresiranje...... ......... ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ ....... ... 20
18
Adresiranje Adresiranje steka..... steka......... ......... ......... ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ .... 21 Peimjer Peimjer asamblerskog asamblerskog programa... programa....... ......... ......... ........ ........ ......... ......... ........ ........ ......... ......... ........ ........ .... 23 Literatura....................... Literatura.................................... .......................... .......................... ......................... ......................... .................... ....... 24
2
Mikroprocesor i8086 Mikroprocesor i8086 je prvi Intelov 16-bitni mikroprocesor, proizveden 1978. godine. On je omogućio kompatibilnost prethodne 8-bitne familije (Intel 8080/8085), ali i znatno bolje performanse koje su se ogledale u ubrzanju izvršavanja programa. Arhitektura je poboljšana i većim brojem radnih registara nego kod 8-bitnih mikroprocesora. Procesor koji vrši obradu podataka u mikroračunaru naziva se mikroprocesor. Jedna od osnovnih karakteristika mikroprocesora je dužina podatka kojeg obrađuje u jednom trenutku. Uobičajene dužine su 4, 8, 16, 32.... Prema ovome svi mikroprocesori se mogu podijeliti na četvorobitne, osmobitne, šesnaestobitne itd. . Ova podijela nije striktna. Postoje neki mikroprocesori koji po nekim karakteristikama pripadaju i osmobitnim i šesnaestobitnim, odnosno šesnaestobitnim i tridesetdvobitnim.
Intel 8086 realizovan je u jednom integrisanom sklopu sa 40 pinova. Posjeduje 16-bitnu magistralu podataka i 20-bitnu adresnu magistralu. Ovakav način realizovanja magistrale omogućava adresiranje od jednog miliona bajtova memorijskih lokacija. Takođe, znatno su proširene mogućnosti adresiranja ulazno/izlaznih uređaja za koje je namijenjen adresni prostor od 64 KB. Radi uštede broja spoljnih pinova izvršeno je mutipleksiranje magistrale podataka i adresne magistrale tj. ovaj mikroprocesor u jednom trenutku prenosi adrese i tada ne može prenositi podatke, a u drugom trenutku vrši prenos podataka. Intel 8086 nije imao mogućnost rada sa operacijama sa pokretnim zarezom, ali se mogao spojiti sa matematičkim koprocesorom da bi mu se omogućila ta sposobnost. Dio adresnog prostora memorije koristi se za posebne svrhe, kao što je to prikazano na slici. Gornjih 16 bajtova se koristi za smještanje informacije o inicijalnom automatskom puniocu, kao i informacije o adresi na kojoj započinje izvršavanje, nakon pojave RESET signala. Donji 1 KB se podijeli u 4-bajtne pokazivače (pointere) na rutine za obradu 256 mogućih tipova prekida. Od ukupno 32 bita ovih pokazivača, 16 se koristi za adresu segmenta, a 16 predstavljaju odsječak unutar segmenta. Svi ovi pokazivači moraju da budu inicijalizovani pre nego što
Adresni prostor memorije
se prekidi pojave. 3
Arhitektura i8086
Mikroprocesor i8086 sastoji se od dvije jedinice: izvršna jedinica i jedinica interfejsa magistrale. Ove dvije jedinice operišu asinhrono. Cjelokupna komunikacija sa perifernim jedinicama i osnovnom memorijom odvija se preko jedinice interfejsa magistrale. Izvršna jedinica sastoji se od opštih registara i aritmetičko – logičke jedinice, dok jedinicu interfejsa magistrale čine segmentni registri, unutrašnji komunikacioni registri i skup bajtova koji služe za uvođenje instrukcija. Sve ove komponente povezane su unutrašnjim magistralama širine od 16 do 20 bita.
Pokazivački i indeksni registri omogućavaju razne vrste adresiranja unutar segmenta. Sadržaj pokazivača se tretira kao odsječak u odnosu na tekuću vrednost pokazivača steka (SS), a
4
sadržaj indeksnih registara kao odsječak unutar tekućeg segmenta podataka. Ovi registri su BP - pokazivač baze, SP – pokazivač steka, SI – izvorni indeks i DI – indeks odredišta.
Važnu ulogu ima treća grupa registara: segmentni registri. Ovi registri učestvuju u svim izračunavanjima adresa, pa se sve instrukcije uzimaju relativno u odnosu na sadržaj segmentnog registra koda. Sličnu ulogu imaju i ostali registri koji služe za rad sa podacima. Programi koji ne mjenjaju sadržaj segmentnog registra su dinamički relokatibilni, te se mogu prekidati, premještati na druge lokacije i ponovo startovati sa novom vrijednošću segmentnog registra. Segmentni registri su CS – kodni segment, DS – segment podataka, SS – stek segment, ES – ekstra segment.
Adresni prostor memorije dijeli se na segmente dužine po 64 KB, a oni se mogu dodijeliti kodu, podacima i steku. Donja četiri bita segmentnih registara imaju vrijednost nula, tako da početak svakog segmenta može da bude samo na adresama koje su umnošci broja 16. Segmenti se mogu preklapati.
Fizička adresa se formira sabiranjem odsječka sa vrijednošću izabranog segmentnog registra. Na slici prikazan je način formiranja 20-bitne fizičke memorijske adrese. Iako se za pristup podacima iz instrukcije normalno koristi registar segmenta koda, ovo može da se uradi i sa drugim segmentnim registrima. Prilikom adresiranja ulaza/izlaza, segmentni registri ne učestvuju u formiranju efektivne adrese. U tom slučaju, fizička adresa jednaka je vrijednosti odsječka odgovarajućeg registra iz grupe pokazivača i indeksnih registara.
Formiranje fizičke adrese 5
Primjer: Pretpostavimo da je u segmentntnom registru broj 6020H i da je dodatak 4267. Fizička adresa se dobija na sledeći način.
Segment *10H ! + dodatak ! 20-bitna adresa
60200 H 1 4267 H 64467 H
Mikroprocesor i8086 ima četrnaest 16-bitnih registara, i to dvanaest registara za podatke i adrese, jedan pokazivač instrukcija i statusni registar. Registri adresa i podataka su podjeljeni u tri skupa sa po 4 registra: segmentni registri, registri podataka i pokazivački i indeksni registri.
Pored ove tri grupe imamo i fleg registar i IP.
6
IP – pokazivač instrukcija čuva dodatak koji treba dodati sadržaju registra kodnog segmenta da bi se formirala fizička adresa instrukcije koja treba sledeća da se izvrši.Statusni registar sadrži zastavice (flags) koje mogu biti podignute ili spuštene. Jednu zastavicu predstavlja jedna ćelija.
Ako je sadržaj ćelije 1, zastavica je podignuta, u suprotnom je spuštena. Flegovi kod i8086 su: CF – fleg prenosa, PF – fleg parnosti, AX – pomoćni fleg prenosa, ZF – nula fleg, SF – fleg znaka, TF – zamka-fleg, IF – fleg osposobljavanja prekida, DF – fleg pravca, OF – fleg prekoračenja.
Format instrukcija i način izvršavanja Programer pristupa mikroprocesoru preko instrukcija (komandi), koje izdaje mikroprocesoru. Instrukcije se u memoriji računara predstavljaju u binarnom obliku, tj. pomocu cifara 0 i 1. Jedino u ovom obliku one su prihvatljive za mikrokontroler. Preko magistrala podataka i adresnih magistrala, instrukcije se, u ovom obliku, dovode u mikroprocesor. U okviru svake instrukcije razlikuju se dva glavna dijela: operacioni kod (opkod) i adresni dio. Operacioni kod određuje vrstu operacije, koju treba da obavi mikroprocesor, a adresni dio ukazuje na adrese sa kojih treba uzeti podatke za operisanje ili na koje treba da se pređe tokom izvršavanja programa. Opkod mora postojati u svakoj instrukcij, dok adresni dio može da bude prazan.
Pošto binarni oblik instrukcija nije pogodan za čovjeka uvode se skraćenice za pregledniji zapis opkodova i adresnog dijela. Za opkodove se, skoro redovno, koriste skraćenice engleskih riječi, a adrese se zamjenjuju raznim simboličnim imenima. Za ovako zapisane instrukcije kaže se da su zapisane u simbiličnom obliku i nazivaju se asemblerskim instrukcijama. Između asemblerskih i mašinskih instrukcija postoji jednoznačna korespodencija. Asemblerske instrukcije za i8086 mogu biti bez adrese, sa jednom adresom ili sa dve adrese, tj. mogu imati jedan od oblika: 7
Opkod Opkod
Adresa
Opkod
Adresa 1,
Adresa 2
Adrese u instrukcijama mogu biti: adrese memorijskih lokacija, imena registara ili neposredni podaci.
Primejri instrukcija bez adresa: NOP
; Instrukcija bez dejstva, omogućava generisanje kratkih pauza
CLD
; Instrukcija za brisanje D flega.
Primjeri instrukcija sa jednom adresom su: INC
CX
; Uvećava sadržaj CX za 1
JMP
Labela
; Bezuslovni skok na Labela.
Primjeri instrukcija sa dvije adrese: MOV AX, Labela1 ; Premješta sadržaj lokacije Labela1 u AX ADD DX, Labela2 ; Sabira sadržaj lokacije Labela2 i DX i upisuje u DX
Primjeri instrukcija koje na mjestu druge adrese imaju neposredni podatak: MOV AL, 32
; Upisuje 32 u AL
MOV AX, 543
; Upisuje 534 u AX
Operandi u instrukcijama mogu biti dužine jednog bajta ili dužine jedne reči.
Načini adresiranja 8
Instrukcije i podaci čuvaju se u memoriji računara. Da bi instrukcija mogla da se izvrši, mora biti dovedena iz memorije u mikroprocesor. Položaj instrukcije u memoriji određen je sadržajem registara: CS i IP. Ukoliko u instrukciji treba operisati i sa nekim podacima, moguće je da su podaci sadržani u samoj instrukciji, da se nalaze u nekom registru mikroprocesora ili u memoriji računara. Ukoliko su podaci sadržani u instrukciji, ili se nalaze u nekom registru mikroprocesora, njima se lako pristupa jer su, praktično, u samom mikroprocesoru. Međutim, ako su podaci u memoriji (ili ih treba upisati u memoriju), mikroprocesor mora da se obrati nekoj memorijskoj lokaciji. Postoji više načina za obraćanje mikroprocesora nekoj memorijskoj lpkaciji. U zavisnosti od toga gdje se nalazi podatak i kako se vrši obraćanje memorijskoj lokaciji, adresni djelovi instrukcija pojavljuju se u različitim oblicima. Razlikujemo adresiranje podataka, instrukcija i steka.
Adresiranje podataka Intelova familija mikroprocesora raspolaže sa 8 načina adresiranja podataka. Za ilustraciju svakog pojedinačnog načina adresiranja pogodno je koristiti instrukciju MOV kojom se kopira sadržaj izvorišnog registra ili memorijske lokacije u odredišni registar ili memorijsku lokaciju, pri čemu sadržaj izvora ostaje nepromijenjen.
MOV odredište, izvor Kod adresiranja podataka razlikujemo sledeće načine adresiranja:
Registarsko
Neposredno
Direktno
Registarsko – indirektno
Bazno – relativno
Direktno – indeksno
Bazno – indeksno
Skalirano – indeksno
Registarsko i neposredno adresiranje razlikuju se od ostalih oblika adresiranja jer se ovde ne zahtjeva obraćanje memorijskim lokacijama. Kod ostalih oblika adresiranja neophodno je 9
obraćanje memorijskim lokacijama. U ovom slučaju, da bi se odredila efektivna adresa podatka, koristi se sadržaj nekog od segmentnih registara (DS, ES ili SS) i određen dodatak (pomjeranje). Sadržaj segmentnog registra se množi sa 16 i određuje početnu adresu segmenta u memoriji. Dodatak (pomjeranje) određuje položaj podataka unutar segmenta i on je definisan načinom adresiranja. Za svaki način adresiranja poznato je iz kog segmenta se uzimaju podaci.
Primer: MOV Labela, AL
Pomoću ove instrukcije vrši se upis sadržaja AL-registra u memorijsku lokaciju pod nazivom Labela. Ovde simboličko ime Labela predstavlja 16-bitnu adresu i određuje položaj podatka unutar segmenta podataka. Da bi mikroprocesor mogao da upiše sadržaj AQL-registra u memoriju, mora da odredi efektivnu adresu (apsolutnu adresu u memoriji) lokacije u kojoj se vrši upis. To postiže množeći sadržaj DS-registra sa 16 i dodsavanjem vrednosti simboličkog imena Labela.
Registarsko adresiranje
Ovo je jedna od najjednostavnijih metoda adresiranja i svodi se na preuzimanje sadržaja registra i njegovog smeštanja u odredište.Ograničenje ovog načina adresiranja je da oba registra moraju biti iste dužine, zatim da SЅ registar ne može biti odredište, kao i da nije dozvoljen transfer podataka između dva segmentna registra.
10
Primjeri:
instrukcija
dužina
MOV AL,BL
8 bita
kopira sadržaj BL u AL
MOV CH,CL
8 bita
kopira sadržaj CL u CH
MOV AX,CX
16 bita
kopira sadržaj CX u AX
MOV SP,BP
16 bita
kopira sadržaj BP u SP
MOV DS,AX
16 bita
kopira sadržaj AX u DS
MOV ECX,EBX
32 bita
kopira sadržaj EBX u ECX
MOV ESP,EDX
32 bita
kopira sadržaj EDX u ESP
MOV ES,DS
operacija
ne može iz segmentnog registra u segmentni registar
MOV BL,DX
ne može različita dužina registara
MOV CS,AX CS
ne može biti odredišni registar
Neposredno adresiranje
Ovo je najjednostavnija metoda adresiranja. Kao što joj ime kaže, radi se o neposrednoj dodjeli vrijednosti. Kada se instrukcija, koja koristi ovo adresiranje, prevede u mašinski oblik, neposredno iza koda operacije nalaziće se zadata konstanta. Koristi se za upisivanje konstanti (konkretnih vrijednosti) u registre programskog 11
modela MOV registar, konstanta
Heksadecimalne konstante praćene su oznakom "h", a ako počinju nekim od simbola A-F ispred se dodaje "0"
Konstante praćene su oznakom "b"
Decimalne konstante upisuju se bez ikakvih oznaka
Znakovne konstante (ASCII) ograničavaju se apostrofima
Direktno adresiranje
To je metoda adresiranja koja podrazumijeva da joj je parametar adresa na kojoj se nalazi vrijednost koju treba preuzeti. Postoji direktno i na bazi pomjeranja. U mašinskom formatu adresa lokacije se nalazi kao neposredni operand i uvijek je 16-bitna vrijednost. Pretpostavimo da je broj1 lokacija na kojoj se nalazi vrijednost A1h. Tada će instrukcija: 12
MOV AL, broj1
u AL upisati vrijednost A1h. Ovo je direktni način. Na bazi pomjeranja imamo slučaj da je adresa određena sadržajem odgovarajućeg registra.
Npr. neka imamo instrukciju:
MOV BX, [2000h].
Ovo [2000h] nam definiše vrijednost pomjeraja u odnosu na vrijednost početka segmenta podataka.
Primjeri : MOV AL, [8088h] MOV [1234h], AX
Stvarna adresa formira se na osnovu sadržaja DS registra pomnoženog sa 10h, na koji se dodaje pomenuta vrijednost pomjeraja. Treba reći da se kod ove metode adresiranja kao
13
segmentni registar podrazumijeva DS, ali je to moguće predefinisati kao u narednim primjerima :
MOV AL, ES:[0234h] MOV AX, CS:[0452h]
Registarsko – indirektno adresiranje
Sadržaj registra, koji je naveden između uglastih zagrada, tumači se kao adresa na kojoj se nalaze podaci. Registarsko-indirektno adresiranje omogućava adresiranje memorijske lokacije u okviru datog segmenta pomoću offset-a (pomjeraja) sadržanog u nekom od sledećih registara: BP, BX, DI i SI.
Registarsko-indirektno adresiranje
Primjeri: MOV AL, [BX] MOV AL, [BP] MOV AL, [SI] MOV AL, [DI]
Treba naglasiti da se prilikom upotrebe registara BX, SI i DI za računanje efektivne adrese koristi segmentni registar DS, dok se za BP koristi SS. Eksplicitnim navođenjem segmentnih registara moguće je uticati na računanje efektivne vrednosti, kao u sledećim primjerima :
MOV AL, CS:[BX] 14
MOV AL, DS:[BP] MOV AL, ES:[SI] MOV AL, SS:[DI]
Bazno – relativno adresiranje
Bazno – relativno adresiranje omogućava adresiranje memorijske lokacije u okviru datog segmenta pomoću offset-a sadržanog u nekom od registara uvećanog ili umanjenog za određenu konstantu. Ovdje se koriste BX i BP registri. Ako se koristi registar BP, podatak je u stek – segmentu, u suprotnom je u segmentu sa podacima.
15
Bazno-relativno adresiranje
Primjer: MOV AX, [BX+100h]
Efektivna adresa se formira sabiranjem vrijednosti registra i navedene konstante, pa se sa lokacije, koju određuje efektivna adresa, uzima podatak ili se on u nju smiješta.
Sledeći primjeri prikazuju dozvoljene načine zapisa instrucija:
MOV AL, 20h[BP]
ili
MOV AL, [BP+20h] ili MOV AL, [BP]+ 20h
MOV DL, 78 [BX]
ili
MOV DL, [BX+78]
ili
MOV DL, [BX]+ 78 16
Direktno-indeksno adresiranje
Direktno-indeksno adresiranje se koristi za indirektno adresiranje memorijske lokacije pomoću jednog od indeksnih registara (DI i SI).
Oblici adresa u ovom načinu adresiranja su sledeći:
[DI] + disp [SI] + disp
Dodatak se dobija sabiranjem sadržaja SI ili DI sa nekim brojem (disp).
Primjer: MOV SI, disp MOV AX, NIZ [SI]
U akumulator će biti upisan član niza NIZ na koji pokazuje SI (sadržaj SI je disp), s tim što je NIZ prvi član niza. Ovaj način adresiranja koristi se pri radu sa nizovima i tabelama.
Bazno-indeksno adresiranje
Bazno-indeksno adresiranje, slično je prethodnom načinu adresiranja, koristi se za indirektno adresiranje memorijske lokacije pomoću jednog od baznih registara u kombinaciji sa jednim od indeksnih registara (DI i SI), a po potrebi sve se sabira sa nekim dodatnim brojem.
17
Bazno-indeksno adresiranje
Primjer: MOD AL, disp [BX][SI] MOV AL, disp [BX + DI]
Za formiranje dodatka, u ovom slučaju koristi se DS – registar (operandi su u segmentu sa podacima).
MOV AL, [BP + SI + disp] MOV AL, [BP][DI] [disp]
U ovom slučaju koristi se SS – registar (stek – segment) za formiranje dodatka.
Npr. Neka je u BP 1000h, BX sadrži 2000h, SI 120h, I DI sadrži 5. Tada instrukcija MOV AL, 10h[BX + SI] učitava u AL sa adrese na koju pokazuje DS, a to je 2130; MOV CH, 125h[BP + DI] učitava u CH sa lokacije na koju pokazuje SS, a to je 112A.
Skalarano – indeksno adresiranje 18
Skalirano indeksno adresiranje je indeksno adresiranje kod kojeg se vrši skaliranje sadržaja indeksnog registra, tj. množenje sa 1, 2, 4 ili 8.
Primjer: MOV AX, [BX][2*CX+20h]
Adresiranje instrukcija Adresiranje instrukcija (programske memorije) pojavljuje se u tri oblika i to: −
Direktno
−
Indirektno
−
Relativno
Izvodi se korišćenjem JMP i CALL instrukcija.
Direktno adresiranje
Radi se o metodi adresiranja koja podrazumeva da joj je parametar adresa na kojoj se nalazi vrijednost koju treba preuzeti. U mašinskom formatu adresa lokacije se nalazi kao neposredni operand i uvek je 16-bitna vrednost. Direktno adresiranje u okviru instrukcija za skok (grananje) pored operacionog koda sadrži i adresu naredne instrukcije.
Primjer: JMP 1200h
19
Direktno adresiranje
•
rjeđe se koristi od indirektnog i relativnog adresiranja
•
instrukcije koje se koriste za direktno adresiranje pored opkoda (opcode) sadrže adresu na koju će se izvršiti grananje
•
ovaj način adresiranja omogućava tzv.
intersegmentne skokove (skok na bilo
koju lokaciju u memoriji)
Indirektno adresiranje
20
Adresiranje se vrši tako što se adresa dobija na osnovu sadržaja jednog od 16-bitnih registara ili relativnih registara.
• termin "relativno" podrazumijeva relativno u odnosu na pointer instrukcija (IP) • pomjeraj može biti jednobajtni ili dvobajtni • jednobajtni pomjeraj predstavlja kratki ( short ) skok • dvobajtni pomjeraj predstavlja bliski (near ) skok ili intrasegmentni skok (skok u okviru istog segmenta)
• za specifikaciju pomjeraja koriste se označeni brojevi
Primjer: JMP AX JMP NEAR PTR[BX]
Relativno adresiranje .
• termin "relativno" podrazumijeva relativno u odnosu na pointer instrukcija (IP) • pomjeraj može biti jednobajtni ili dvobajtni • jednobajtni pomjeraj predstavlja kratki ( short ) skok • dvobajtni pomjeraj predstavlja bliski (near ) skok ili intrasegmentni skok (skok u okviru istog segmenta)
• za specifikaciju pomjeraja koriste se označeni brojevi
21
Primjer: JMP [6h]
znači šest mjesta u odnosu na ono što bi pokazivao pokazivač instrukcije.
Adresiranje steka
• stek je LIFO (Last In First Out) memorijska struktura • stek se puni PUSH, a prazni POP instrukcijama • podaci na steku adresiranju se pomoću SS i SP registara • SP pokazuje na lokaciju na kojoj je raspoloživ podatak
• stavljanje podataka na stek
22
uvijek se stavlja riječ, prvo viši bajt (na SP-1), pa niži bajt (na SP-2)
• uzimanje podataka sa steka
uvijek se uzima riječ, prvo niži bajt (sa SP), pa viši bajt
• PUSH i POP uvijek barataju sa riječima, a ne bajtovima (8086-80286), a noviji mikroprocesori mogu i sa dvostrukim riječima
• na stek može biti ostavljen sadržaj bilo kojeg registra • sa steka se može uzeti podatak i staviti u bilo koji registar osim u CS
Primjeri: instrukcija PUSHF POPF PUSHFD POPFD PUSH AX
operacija kopira flegove na stek uzima riječ sa steka i puni registar FLAGS kopira EFLAGS na stek uzima dvostruku riječ sa steka i puni EFLAGS kopira sadržaj AX na stek 23
POP AX
uzima riječ sa steka i puni AX
PUSH DS
kopira sadržaj DS na stek
POP DS
uzima riječ sa steka i puni DS
PUSH 1234h
stavlja na stek konstantu 1234h
Primjer asamblerskog programa Primjer asemblerskog programa koji definiše odgovarajući niz, zatim puni registre
određenim
vrijednostima
i
manipuliše
sadržajem
registara
koristeći opisane načine adresiranja:
podaci segment 'data' niz db 96 dup (?) podaci ends kod segment 'code' assume ds:podaci, cs:kod start: mov ax, podaci mov ds, ax mov al, 65 mov cl, 10h mov di, 20 mov niz, al mov bx, offset niz mov [niz+10], cl mov di, 20 mov [bx][di], cl mov [bx][di+1], cl 24
mov ah, 4ch int 21h kod ends end star
LITERATURA: Dušan Tošić “Mikroprocesori sa elementima programiranja” Dr Zoran Salčić “ Mikroračunarski sistemi ” - 1982. god Gabro Smiljanić “Mikroračunala” - 1985.god www.intel.co
25