7
31 NAČINI ADRESIRANJA UVOD Prilikom izvođenja programa upravljačka jedinica mora znati gde se nalaze instrukcije i operandi nad kojima će se izvoditi operacije. Načini na koje se pribavljaju instrukcije i određeni operandi za vreme izvođenja instrukcijskog ciklusa nazivaju se načini adresiranja. Instrukcijska reč se sastoji od tri dela (Sl.42): -polja operacijskog koda, -polja načina adresiranja, -adresnog polja. Dužina instrukcijske reči zavisi od računara i operacije koju treba izvesti. Osmobitna reč mikroprocesora, međutim, omogućava samo 2 8 =256 kombinacija za operacijski kod i adresu. To je, očito, premalo da bi se mogao dosegnuti čitav adresni prostor (npr. 64KB memorije). Zbog toga se u mikroprocesorima upotrebljavaju instrukcijske reči sastavljene od dva ili tri bajta. U većini slučajeva prvi bajt se upotrebljava za predstavljanje operacijskog koda i koda načina adresiranja, dok preostali bajt (ili preostala dva bajta) služi kao adresa ili kao osnova za određivanje stvarne adrese operanda. Operacijski kod Način adresiranja Polje adrese n-1 0 Sl.41 - Organizacija n-bitne instrukcijske reči Više načina adresiranja prisutno u mikroprocesorskoj arhitekturi omogućava efikasnije rukovanje različitim strukturama podataka, a time i efikasnije izvođenje programa. NAČINI ADRESIRANJA ZA MIKROPROCESOR M6800 Za ilustraciju različitih načina adresiranja upotrebićemo programski model mikroračunara, uz pridodan instrukcijski registar. Programski model mikroprocesora čini skup registara koji su “vidljivi” i dostupni programeru, memorija podataka, te programska memorija. Sl.42 prikazuje programski model za mikroračunar M6800. Programabilni registri su: akumulatori A i B, 6-bitni registar uslova (CCR), 16-bitno programsko brojilo (PB), 16-bitni pokazivač steka (SP) i 16-bitni indeksni registar (IX). Na slici je registar podataka (DC) izostavljen. Programeru moraju biti na raspolaganju načini adresiranja internih registara mikroprocesora i adresiranja svih memorijskih lokacija.

VI-3 (PDF)

Embed Size (px)

Citation preview

31

NAČINI ADRESIRANJA UVOD Prilikom izvođenja programa upravljačka jedinica mora znati gde se nalaze instrukcije i operandi nad kojima će se izvoditi operacije. Načini na koje se pribavljaju instrukcije i određeni operandi za vreme izvođenja instrukcijskog ciklusa nazivaju se načini adresiranja. Instrukcijska reč se sastoji od tri dela (Sl.42): -polja operacijskog koda, -polja načina adresiranja, -adresnog polja. Dužina instrukcijske reči zavisi od računara i operacije koju treba izvesti. Osmobitna reč mikroprocesora, međutim, omogućava samo 28=256 kombinacija za operacijski kod i adresu. To je, očito, premalo da bi se mogao dosegnuti čitav adresni prostor (npr. 64KB memorije). Zbog toga se u mikroprocesorima upotrebljavaju instrukcijske reči sastavljene od dva ili tri bajta. U većini slučajeva prvi bajt se upotrebljava za predstavljanje operacijskog koda i koda načina adresiranja, dok preostali bajt (ili preostala dva bajta) služi kao adresa ili kao osnova za određivanje stvarne adrese operanda. Operacijski kod Način adresiranja Polje adrese n-1 0

Sl.41 - Organizacija n-bitne instrukcijske reči Više načina adresiranja prisutno u mikroprocesorskoj arhitekturi omogućava efikasnije rukovanje različitim strukturama podataka, a time i efikasnije izvođenje programa.

NAČINI ADRESIRANJA ZA MIKROPROCESOR M6800 Za ilustraciju različitih načina adresiranja upotrebićemo programski model mikroračunara, uz pridodan instrukcijski registar. Programski model mikroprocesora čini skup registara koji su “vidljivi” i dostupni programeru, memorija podataka, te programska memorija. Sl.42 prikazuje programski model za mikroračunar M6800. Programabilni registri su: akumulatori A i B, 6-bitni registar uslova (CCR), 16-bitno programsko brojilo (PB), 16-bitni pokazivač steka (SP) i 16-bitni indeksni registar (IX). Na slici je registar podataka (DC) izostavljen. Programeru moraju biti na raspolaganju načini adresiranja internih registara mikroprocesora i adresiranja svih memorijskih lokacija.

32

Sl.42 - Programski model za mikroračunar na bazi mikroprocesora M6800

Mikroprocesor M6800 ima sedam načina adresiranja: - uključno (Inherent, Implied), - adresiranje akumulatora, - usputno (Immediate), - direktno (Direct), - direktno prošireno (Extended), - indeksno (Indexed), - odnosno tj. relativno (Relative). Tako raznolik izbor načina adresiranja omogućava efikasno programiranje u pogledu brzine izvođenja programa i iskorištenja memorijskog prostora.

Uključno adresiranje i adresiranje akumulatora Ovim načinom adresiranja operand se određuje implicitno u samoj instrukciji. Uključnim se adresiranjem koristimo pri adresiranju registra kao što su indeksni (IX) ili pokazivač steka (SP). Adresiranjem akumulatora ili akumulatorskim adresiranjem označava se akumulator (ili dva akumulatora). Takve instrukcije (tipa uključnog i akumulatorskog adresiranja) imaju mnemonički kod koji određuje jedan ili dva registra (akumulatora) - kao izvor i/ili odredište. Drugim rečima, u mnemoničkom kodu same instrukcije uključena je i adresa operanda. Primeri takvih instrukcija: ABA Zbroji sadržaje akumulatora A i B, te rezultat skladišti u A. TSTB Ispitaj sadržaj akumulatora B. CLRA Izbri{i sadržaj akumulatora A. DES Umanji sadržaj kazala stoga za 1. INX Povećaj sadržaj indeksnog registra za 1. PULA Sadržaj iz steka prenesi u akumulator A Sl.43 prikazuje primer izvođenja instrukcije PULA na programskom modelu (heksadekadni broj 32 je kod instrukcije PULA). Sl.43a prikazuje pribavljanje operacijskog koda instrukcije PULA. Sl.43b prikazuje stanje nakon izvođenja instrukcije PULA. Sl.44 prikazuje organizaciju jednobajtne instrukcije PUL. Instrukcije tipa uključnog i akumulatorskog adresiranja su dužine jednog bajta.

33

Sl.43 - Primer izvođenja instrukcije PULA na programskom modelu: a) faza PRIBAVI; b) faza IZVRŠI

Sl.44 - Organizacija jednobajtne instrukcije PUL (A ili B)

Usputno adresiranje Kod ovog načina adresiranja operand je prisutan u instrukcijskoj reči. On je sadržan u bajtu koji sledi bajt operacijskog koda. Instrukcijska reč ovog tipa adresiranja je dužine dva bajta, ako je operand dužine 8 bita. Ukoliko je operand 16-bitni (kod instrukcija LDX i LDS), tada se instrukcijska reč sastoji od tri bajta. Sl.45a, Sl.45b, Sl.46a i Sl.46b prikazuju oba slučaja na primeru instrukcija ADDA #$3F i LDX #$012A. Oznaka # određuje usputno adresiranje, a znak $ označava heksadekadni broj. Sl.47 prikazuje organizaciju instrukcijske reči ADDA #$3F.

Sl.45 - Primer izvođenja instrukcije ADD A #$3F (pribroji sadržaju akumulatora A3F) a) početak faze PRIBAVI, b) završetak faze IZVRŠI

34

Sl.46 - Primer izvođenja 3-bajtne instrukcije LDX # $012A (pohrani 012A u indeksni registar) a) početak faze PRIBAVI, b) završetak faze IZVRŠI

Sl.47 - Organizacija 2-bajtne instrukcije ADDA # $3F

Direktno i direktno prošireno adresiranje Kod ovog načina adresiranja operand se nalazi u memorijskoj lokaciji, čija je adresa direktno zadata u adresnom delu instrukcijske reči. Instrukcijska se reč sastoji od dva ili tri bajta. Instrukcija koja se sastoji od dva bajta omogućava adresiranje samo 256 reči (adresiranje memorijskih lokacija 0000-00FF). Direktni način adresiranja često se naziva i adresiranje nulte stranice (zero-page addressing). Upotrebom tih lokacija i skladištenjem u njih postiže se ušteda u vremenu izvođenja instrukcija. Na primer, instrukcija LDAA $A0 (direktno adresiranje ili adresiranje nulte stranice) se izvodi u tri ciklusa, dok su istoj instrukciji LDAA $00A0 (direktno prošireno adresiranje) potrebna četiri ciklusa. Sl.48 prikazuje primer direktnog načina adresiranja (instrukcija ADDA $30 - pribroji operand s adrese 0030 sadržaju akumulatora).

35

Sl.48 - Primer direktnog adresiranja ADD A $30 (pribroji sadržaju akumulatora A operand sa adrese 0030) a) početak faze PRIBAVI, b) završetak faze IZVRŠI

Da bi se dosegao celi memorijski prostor od 64KB reči, koristi se direktno prošireno adresiranje. Instrukcijska reč se sastoji od tri bajta, s tim da su zadnja dva 16-bitna adresa operanda. Sl.49 prikazuje primer direktno proširenog načina adresiranja (STAA $1FA0 - skladišti sadržaj akumulatora A na memorijsku lokaciju 1FA0).

Sl.49 - Primer direktno proširenog adresiranja instrukcije STAA $1FA0 (pohrani sadržaj akumulatora A na memorijsku

lokaciju 1FA0): a) početak faze PRIBAVI, b) završetak faze IZVRŠI

Indeksno adresiranje Instrukcijska reč se kod ovog načina adresiranja sastoji od dva bajta (drugi bajt je adresni deo). Adresni deo instrukcijske reči (0-255) pribraja se manje značajnom bajtu indeksnog registra, dok se eventualni prenos kod spomenutog zbrajanja pribraja značajnijem bajtu indeksnog registra. Rezultat je adresa operanda. Pri tome se sadržaj indeksnog registra ne menja. Sl.50 prikazuje izvođenje instrukcije ADDA 2, X. Oznaka X upotrebljava se za označavanje indeksnog načina adresiranja.

36

Sl.50 - Primer indeksnog adresiranja instrukcije ADDA 2, X: a) početak faze PRIBAVI, b) završetak faze IZVRŠI Sadržaj indeksnog registra se često povećava (izvođenjem instrukcije INX) ili smanjuje (DEX) prilikom izvođenja programske petlje u cilju pristupa do podataka skladištenih u memoriji u obliku tablica. Program koji sledi je primer korištenja indeksnog načina adresiranja, uz promenu sadržaja indeksnog registra s instrukcijom INX. Program izvodi zbrajanje niza od šest brojeva. CLRA OBRIŠI AKUMULATOR A LDAB #06 U AKUMULATOR B POSTAVI BROJ REČI. LDX #$0040 U IX ADRESA PRVOG BROJA. OPET ADDA 0,X PRIBROJI SADRŽAJU AKUMULATORA A SADRŽAJ ODREĐEN SADRŽAJEM INDEKSNOG REGISTRA. INX POVEĆAJ SADRŽAJ INDEKSNOG REGISTRA. DECB SMANJI BROJILO ZA 1. BNE OPET GRANAJ AKO BROJILO NIJE=0 STAA $A2 SKLADIŠTI SUMU NA 00A2. SWI PROGRAMSKI PREKID.

Odnosno (relativno) adresiranje Instrukcije grananja i uslovnog grananja upotrbljavaju odnosno (relativno) adresiranje. Ove se instrukcije sastoje od dva bajta, s tim da je drugi bajt binarni broj s predznakom u notaciji dvojnog komplementa koji se pribraja sadržaju programskog brojila i omogućava grananje u dva smera. To znači da je obim relativnog adresiranja ±127 u odnosu na lokaciju same instrukcije grananja. Međutim, kako se obim računa u odnosu na sledeću instrukciju koja bi bila izvršena kada uslov grananja ne bi bio ispunjen, odredišna adresa D je u obimu:

(PC+2) − 127 < D < (PC+2) + 127 PC − 125 < D < PC + 129

37

Sl.51 prikazuje izvođenje BRA (bezuslovno grananje) za mikroprocesor M6800. Odnos između relativne adrese i apsolutne adrese dat je izrazom:

D = (PC + 2) + R, gde su: R - 8-bitna reč u notaciji dvojnog komplementa, skladištena u drugom bajtu instrukcije grananja; PC - tekući sadržaj programskog brojila; D - odredišna adresa.

Sl.51 - Primer odnosnog adresiranja (instrukcija BRA $06): a) početak faze PRIBAVI, b) završetak faze IZVRŠI