09_asemblerski_jezik_8085

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. Akumulator Akumulator 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 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

Upload: nelaseg

Post on 08-Aug-2018

214 views

Category:

Documents


0 download

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