09_asemblerski_jezik_8085
TRANSCRIPT
8/22/2019 09_Asemblerski_jezik_8085
http://slidepdf.com/reader/full/09asemblerskijezik8085 1/5
9. Mikroprocesor 8085
9.1. Programski model mikroprocesora 8085 Programski model mikroprocesora 8085 uključuje šest registara, akumulator, i registar flegova,
kako je prikazano na slici. Pored toga, ima dva 16-bitna registra: stek pointer i programski brojač
.Ukratko ćemo opisati ove registre.
9.1.1. Registri
Mikroprocesor 8085 ima šest registara opšte namjene za čuvanje 8-bitnih podataka; oni se
identifikuju sa slovima B, C, D, E, H i L kao što je prikazano na slici. Ovi registri se mogu
kombinovati kao registarski parovi – BC, DE, i HL – da bi mogli vršiti operacije sa 16-bitnim
podacima. Programer može koristiti ove registre za čuvanje ili kopiranje podataka u registre
upotrebom instrukcija za kopiranje.
AkumulatorAkumulator je 8-bitni registar koji je dio aritmetičko-logičke jedinice (ALU). Ovaj registar se
koristi za čuvanje 8-bitnih podataka i za izvođenje aritmetičkih i logičkih operacija. Rezultat
operacije čuva se u akumulatoru. Akumulator se identifikuje kao registar A.
Registar bita stanja (flag-register)Aritmetičko-logička jedinica uključuje pet flip-flopova, koji se setuju ili resetuju poslije izvođenja
operacija u zavisnosti od dobijenog rezultata u akumulatoru i ostalim registrima. Ovi flip-flopovi se
nazivaju Zero (Z), Carry (CY), Sign (S), Parity (P) i Auxiliary Carry (AC) flegovi; njihove bit
pozicije u fleg-registru prikazane su na sljedećoj slici. Najčešće korišćeni flegovi su Z, CY i S.
Mikroprocesor koristi ove flegove za ispitivanje uslova podataka.
Na primjer, nakon sabiranja dva broja, ukoliko je zbir u akumulatoru veći nego što se može
predstaviti sa osam bita, flip-flop koji se koristi za indikaciju prenosa – koji zovemo Carry fleg
(CY) – postavlja se na jedinicu. Kada je rezultat aritmetičke operacije jednak nuli, flip-flop koji
nazivamo Zero (Z) fleg se postavlja na jedinicu. Prva slika prikazuje 8-bitni registar, koji se naziva
fleg-registar, i koji se nalazi odmah uz akumulator. Međutim, on se ne koristi kao registar; pet bit
pozicija od osam se koristi za čuvanje izlaza pet filp-flopova. Flegovi se čuvaju u 8-bitnom registru
tako da programmer može da ispituje vrijednosti ovih flegova (uslovi podataka) pristupajući ovom
registru upotrebom posebnih instrukcija.
AKUMULATOR A (8 bita) REGISTAR BITA STANJA
B (8 bita)
D (8 bita)
H (8 bita)
Stack Pointer (SP) (16 bita)
Program Counter (PC) (16 bita)
C (8 bita)
E (8 bita)
L (8 bita)
D7 D6 D5 D4 D3 D2 D1 D0
S Z AC P CY
8/22/2019 09_Asemblerski_jezik_8085
http://slidepdf.com/reader/full/09asemblerskijezik8085 2/5
Ovi flegovi imaju posebnu važnost pri procesu donošenja odluka u mikroprocesoru. Uslovi (set ili
reset) flegova se testiraju softverski pomoću odgovarajućih instrukcija. Na primjer, instrukcija JC
(Jump on Carry) je implementirana tako da promijeni tok izvršavanja programa ukoliko je fleg CY
postavljen. Razumijevanje funkcionisanja flegova predstavlja osnovu u pisanju programa u
asemblerskim jezicima.
Programski brojač (Program Counter – PC)Ovaj 16-bitni registar se koristi za upravljanje tokom izvršavanja instrukcija. To je u suštini registar
koji služi kao pokazivač memorije. Memorijske lokacije imaju 16-bitne adrese, i upravo zbog toga
je PC 16-bitni registar.
Uloga programskog brojača je da pokazuje na memorijsku adresu sa koje treba preuzeti bajt
sljedeće instrukcije. Kada se bajt (mašinski kod) preuzme, programski brojac se uvećava za jedan
(inkrementira) i pokazuje na sljedeću memorijsku lokaciju.
Pokazivač steka (Stack Pointer – SP)Stek pointer je takođe 16-bitni registar koji služi kao pokazivač memorije. On pokazuje na
memorijsku lokaciju u R/W memoriji, koju nazivamo stek. Početak steka definisan je upisivanjem
16-bitne adrese u stek pointer.
9.2. Načini adresiranja kod mikroprocesora 8085 Instrukcije MOV B,A ili MVI A,82H koriste se za kopiranje podataka iz izvora u odredište. Kod
ovih instrukcija izvor može biti registar, ulazni port, ili 8-bitni broj (00H do FFH). Slično, odredište
može biti registar ili izlazni port. Izvor i odredište su operandi. Različiti formati za specificiranje
operanada nazivaju se načini adresiranja. Za 8085, imamo sljedeće načine adresiranja:
1. Implicitno adresiranje ( Implicit addressing)
2. Neposredno adresiranje ( Immediate addressing)3. Direktno adresiranje ( Direct addressing)
4. Indirektno adresiranje ( Indirect addressing).
9.2.1. Implicitno adresiranje
U instrukciji je implicitno sadržana informacija o tome gdje se nalazi operand.
Primjer: ADD M
Poseban oblik implicitnog adresiranja je registarsko adresiranje, kod kojeg se kao operandi koriste
interni registri mikroprocesora.
9.2.2. Neposredno adresiranje
Podatak se nalazi u okviru instrukcije. Obezbjeđeno je neposredno upisivanje podatka na mjesto
odredišta. Koristi se za kopiranje konstantnih podatka u odredište (registar ili memoriju)
Primjer: MVI R, data
9.2.3. Direktno adresiranje
Najčešće se koristi za prihvatanje podataka od perifernih uređaja u akumulator ili za slanje
poadataka koji se nalaze u akumulatoru perifernim uređajima. Npr., trebamo preuzeti podatak sa
ulaznog porta 00H a zatim ga smjestiti u akumulator ili poslati podatak koji se nalazi u akumulatoruna izlazni port 01H. Takođe se može koristiti kod nekih instrukcija za direktan pristup memoriji
(primjer su instrukcije STA i LDA).
8/22/2019 09_Asemblerski_jezik_8085
http://slidepdf.com/reader/full/09asemblerskijezik8085 3/5
Primjer: IN 00H ili OUT 01H
9.2.4. Indirektno adresiranje
Kod ovog adresiranja se efektivna adresa računa od strane procesora. Adresa koja definiše gdje se u
memoriji nalazi operand nalazi se u nekom od internih registarskih parova mikroprocesora.
Primjer: STAX B
9.3. Asemblerski jezik mikroprocesora 8085 9.3.1. Asemblerske instrukcije
Asemblerski jezik mikroprocesora, kao i svaki drugi programski jezik, ima odgovarajuća pravila. U
osnovi, program napisan u asemblerskom jeziku se nalazi od niza instrukcija koje se nalaze jedna
iza druge, linija za linijom. Svaka linija asemblerskog koda se sastoji od sljedećih elemenata:
labela: <mnemonic> <operand(i)> ; komentar
gdje su: labela – simboličko ime adrese instrukcije, mnemonik – simboličko ime instrukcije (npr.
INR), operand(i) – operanadi sa kojima instrukcija radi (u zavisnosti od instrukcije može da bude
jedan ili dva operanda, ili čak da instrukcija nema operande; operand može da bude adresa lokacije
u memoriji, 8-bitna konstanta, adresa perifernog uređaja ili neki od internih registara), komentar –
obavezni počinje sa znakom ; i ignoriše se od strane programa prevodioca, a služi za
dokumentovanje programa.
9.2.4. Asemblerske direktive
Asemblerske direktive su ključne riječi koje koristi program prevodilac prilikom postupkaprevođenja asemblerskog programa. Takođe, služe u svrhu dokumentacije programa. Asemblerske
direktive nisu instrukcije mikroprocesora i on ih ne izvršava.
NAME – direktiva kojom se specificira naziv programa
ORG – direktiva koja određuje od koje adrese treba da počinje program (tj. na kojoj adresi treba da
se nalazi prva instrukcija)
END – direktiva kojom se završava asemblerski fajl.
9.4. Primjeri asemblerskog programa Zadatak 1. Napisati asemblerski program za sabiranje dva podatka koji se nalaze u registrima D i
C, a zatim rezultat poslati na izlazni port sa simboličkom adresom PORT1. Pretpostaviti da nema
prenosa pri sabiranju. Na početku programa izvršiti inicijalizaciju registara D i C.
Rješenje:
MVI D, 8BH ;inicijalizacija
МVI C, 6FH
MOV A, C
ADD D ;sabiranje (A) + (C)
OUT PORT1 ;rezultat iz ACC šaljemo na izlazni port
HLTEND
8/22/2019 09_Asemblerski_jezik_8085
http://slidepdf.com/reader/full/09asemblerskijezik8085 4/5
Zadatak 2. Napisati asemblerski program koji broj u akumulatoru množi sa 8, a zatim rezultat
množenja šalje na izlazni port sa simboličkom adresom PORT1. Na početku programa
inicijalizovati akumulator tako da pri množenju rezultat ne izađe van dozvoljenog opsega.
Rješenje:
MVI A, 10HRLC ;množenje sa 8
RLC ;pomjeranjem ulijevo
RLC ;tri puta
OUT PORT1
HLT
END
Zadatak 3. Napisati asemblerski program koji pronalazi veći od dva broja koja su smještena u
registrima B i C, a zatim ga šalje na izlazni port sa simboličkom adresom PORT1. Ukoliko su
brojevi jednaki na izlazni port treba poslati konstantu 01h. Na početku programa izvršiti
inicijalizaciju registara B i C.
Rješenje:
MVI B, 30H
MVI C, 40H
MOV A, B
CMP C ;poređenje oduzimanjem (A) – (C)
JZ EQU
JC GRT
OUT PORT1
HLT
EQU: MVI A, 01HOUT PORT1
HLT
GRT: MOV A, C
OUT PORT1
HLT
END
8/22/2019 09_Asemblerski_jezik_8085
http://slidepdf.com/reader/full/09asemblerskijezik8085 5/5
Zadatak 4. Kopirati niz od pet podataka tipa bajt koji su smješteni uzastopno u memoriji od adrese
1000h u novih pet uzastopnih memorijskih lokacija koje počinju od adrese 2000h. Program treba da
počinje od adrese 0B00h.
Rješenje:
NAME KOPIRANJEORG 0B00H
LXI H, 1000H ;(H,L) pokazuje na izvorni niz
LXI D, 2000H ;(D,E) pokazuje na odredišni niz
MVI B, 5 ;brojač kopiranih elemenata
NEXT: MOV A, M
STAX D
INX H
INX D
DCR B
JNZ NEXT
HLTEND