5 - nacini adresiranja

15
5-1 5. NAČINI ADRESIRANJA Referenca operanda u instrukciji sadrži ili stvarnu vrednost operanda (neposrednu) ili referencu na adresu operanda. U raznim skupovima instrukcija koristi se širok spektar različitih načina adresiranja. Načini adresiranja obuhvataju direktno (adresa operanda je u polju adrese), indirektno (polje adrese pokazuje na lokaciju koja sadrži adresu operanda), registarsko, registarsko indirektno i razne oblike adresiranja sa pomerajem, u kojima se vrednost u registru dodaje vrednosti adrese da bi se proizvela adresa operanda. Format instrukcije definiše raspored polja u instrukciji. Dizajn formata instrukcije je složen zadatak, koji obuhvata razmatranja kao što su dužina instrukcije, fiksna ili promenljiva dužina, broj bitova dodeljenih kodu operacije i svakoj referenci operanda i kako se određuje način adresiranja. Adresno polje, ili polja, u tipičnom formatu instrukcije su relativno mala. Željeni cilj je da se referencira širok opseg lokacija u glavnoj ili virtuelnoj memoriji. Da bi se postigao taj cilj, primenjuju se razne tehnike adresiranja. Sve one podrazumevaju neki kompromis između opsega adresa, sa jedne strane, i/ili fleksibilnosti izračunavanja adrese, sa druge strane. Najzastupljenije tehnike adresiranja su: - Neposredno, - Memorijski direktno, - Memorijski indirektno, - Registarsko, - Registarsko indirektno, - Adresiranje sa pomerajem, - Adresiranje pomoću steka. Ovi načini adresiranja su ilustrovani na slici 1. Notacija podrazumeva sledeće: A sadržaj polja adrese u instrukciji, R sadržaj polja adrese u instrukciji koji referencira (upućuje na) registar

Upload: mirko-mirkovic

Post on 17-Dec-2015

124 views

Category:

Documents


8 download

DESCRIPTION

k

TRANSCRIPT

  • 5-1

    5.

    NAINI ADRESIRANJA

    Referenca operanda u instrukciji sadri ili stvarnu vrednost operanda (neposrednu) ili

    referencu na adresu operanda. U raznim skupovima instrukcija koristi se irok spektar

    razliitih naina adresiranja. Naini adresiranja obuhvataju direktno (adresa operanda je u

    polju adrese), indirektno (polje adrese pokazuje na lokaciju koja sadri adresu operanda),

    registarsko, registarsko indirektno i razne oblike adresiranja sa pomerajem, u kojima se

    vrednost u registru dodaje vrednosti adrese da bi se proizvela adresa operanda.

    Format instrukcije definie raspored polja u instrukciji. Dizajn formata instrukcije je

    sloen zadatak, koji obuhvata razmatranja kao to su duina instrukcije, fiksna ili promenljiva

    duina, broj bitova dodeljenih kodu operacije i svakoj referenci operanda i kako se odreuje

    nain adresiranja.

    Adresno polje, ili polja, u tipinom formatu instrukcije su relativno mala. eljeni cilj je

    da se referencira irok opseg lokacija u glavnoj ili virtuelnoj memoriji. Da bi se postigao taj

    cilj, primenjuju se razne tehnike adresiranja. Sve one podrazumevaju neki kompromis izmeu

    opsega adresa, sa jedne strane, i/ili fleksibilnosti izraunavanja adrese, sa druge strane.

    Najzastupljenije tehnike adresiranja su:

    - Neposredno,

    - Memorijski direktno,

    - Memorijski indirektno,

    - Registarsko,

    - Registarsko indirektno,

    - Adresiranje sa pomerajem,

    - Adresiranje pomou steka.

    Ovi naini adresiranja su ilustrovani na slici 1. Notacija podrazumeva sledee:

    A sadraj polja adrese u instrukciji,

    R sadraj polja adrese u instrukciji koji referencira (upuuje na) registar

  • 5-2

    EA stvarna (efektivna) adresa lokacije koja sadri referencirani operand,

    (X) sadraj memorijske lokacije X ili registra X.

    Slika 1. Naini adresiranja

    U tabeli 1 su prikazani naini dobijanja adrese operanda za svaki od naina adresiranja.

    Tabela 1. Naini dobijanja adrese operanda za svaki od naina adresiranja

    Nain adresiranja

    Algoritam Glavna

    prednost

    Glavni nedostatak

    Neposredno Operand = A Nema reference

    memorije

    Ograniena veliina operanda

    Memorijski

    direktno

    EA = A Jednostavno Ogranien adresni prostor

    Memorijski

    indirektno

    EA = (A) Veliki adresni

    prostor

    Viestruke reference memorije

    Registarsko

    direktno

    EA = R Nema reference

    memorije

    Ogranien adresni prostor

  • 5-3

    Registarsko

    indirektno

    EA = (R) Veliki adresni

    prostor

    Dodatna memorijska

    referenca

    Sa

    pomerajem

    EA = A + (R) Fleksibilnost Sloenost

    Pomou steka

    EA = vrh

    steka

    Nema reference

    memorije

    Ograniena primenljivost

    Skoro sve arhitekture raunara obezbeuju vie od jednog od tih naina adresiranja.

    Postavlja se pitanje kako procesor moe da odredi koji nain adresiranja se koristi u odreenoj

    instrukciji. Preduzima se vie pristupa. esto e razliiti kodovi operacije koristiti razliite

    naina adresiranja. Takoe, jedan ili vie bitova u formatu instrukcije mogu da se upotrebe

    kao polje za nain adresiranja. Vrednost polja za nain adresiranja odreuje koji se nain

    koristi.

    U sistemu bez virtuelne memorije, efektivna adresa e biti ili adresa u glavnoj memoriji

    ili registar. Stvarno preslikavanje na fiziku adresu je funkcija mehanizma stranienja i

    nevidljivo je za programera.

    Nain adresiranja se moe specificirati kao poseban deo instrukcije, u okviru koda

    operacije, ili kao zasebno polje (slika 2). Takoe, veliina prenosa (bajt, polure, re,) se

    moe specificirati u instrukciji.

    Slika 2. Specificiranje naina adresiranja kao dela instrukcije

    5.1 Neposredno adresiranje

    Najjednostavniji oblik adresiranja je neposredno adresiranje, u kome je vrednost

    operanda prisutna u instrukciji (slika 3).

    Operand = A

    Slika 3. Neposredno adresiranje

    Taj nain moe da se upotrebi da definie i koristi konstante ili da postavlja poetne

    vrednosti promenljivih. Tipino, broj e biti uskladiten u obliku komplementa dvojke; krajnji

  • 5-4

    levi bit polja za operand se koristi kao bit predznaka. Kada se operand uita u registar za

    podatke, bit predznaka se proiruje nalevo do potpune veliine rei podatka.

    Primer.

    Prednost neposrednog adresiranja je to nema drugih referenci memorije sem donoenja

    instrukcije koje se zahteva da bi se dobio operand, pa se prema tome tedi jedan ciklus

    memorije ili kea u ciklusu instrukcije. Nedostatak je to je veliina broja ograniena

    dimenzijom polja za adresu, koja je, u veini skupova instrukcija, mala u poreenju sa

    duinom rei.

    5.2 Memorijski direktno adresiranje

    Memorijski direktno adresiranje je veoma jednostavan oblik adresiranja, u kome polje

    za adresu sadri efektivnu adresu operanda (slika 4):

    EA = A

    Slika 4. Memorijski direktno adresiranje

  • 5-5

    Ta tehnika je bila uobiajena u ranijim generacijama raunara, ali se ne sree esto u

    savremenim arhitekturama. Zahteva samo jednu referencu memorije i nema posebnih

    izraunavanja. Oigledno ogranienje je to to obezbeuje samo ogranien adresni prostor.

    Primer.

    5.3 Memorijski indirektno adresiranje

    Kod memorijski direktnog adresiranja, duina polja za adrese je obino manja od duine

    rei, to ograniava adresni opseg. Jedno reenje je da se u adresnom polju referencira na

    adresu rei u memoriji, koja sa svoje strane sadri adresu operanda potpune duine. To je

    poznato kao memorijski indirektno adresiranje (slika 5):

    EA = (A)

    Slika 5. Memorijski indirektno adresiranje

  • 5-6

    Kao to je ranije definisano, zagrade se tumae kao znaenje sadraja. Oigledna

    prednost tog pristupa je da je sada, za duinu rei od N, na raspolaganju prostor od 2N.

    Nedostatak je to izvrenje instrukcije zahteva dve reference memorije da bi se dobio

    operand: jednu da se dobije njegova adresa i drugu da se dobije njegova vrednost.

    Mada je broj rei koje mogu da se adresiraju sada jednak 2N, broj razliitih efektivnih

    adresa koje mogu da se referenciraju u bilo kom trenutku je ogranien na 2k gde je k duina

    polja za adrese. Tipino, to nije toliko neugodno ogranienje kao to bi se moglo pomisliti i

    ak moe da bude prednost.

    Retko koriena varijanta memorijski indirektnog adresiranja je adresiranje u vie nivoa

    ili kaskadno indirektno adresiranje:

    EA = (...(A)...)

    U tom sluaju, jedan od bitova adrese pune rei je indirektni marker (I). Ako je bit I

    jednak 0, onda re sadri EA. Ako je bit I jednak 1, onda se poziva drugi nivo indirektnosti.

    Izgleda da nema neke naroite prednosti tog pristupa, a njegov nedostatak je to to bi se

    zahtevalo tri ili vie memorijskih referenci da bi se dobio operand.

    5.4 Registarsko direktno adresiranje

    Registarsko adresiranje je slino memorijski direktnom adresiranju. Jedina razlika je to

    to adresno polje referencira registar, a ne adresu u glavnoj memoriji (slika 6):

    EA = R

    Slika 6. Registarsko direktno adresiranje

    Radi razjanjenja, ako je sadraj registarskog adresnog polja u instrukciji 5, onda je

    registar R5 nameravana adresa, a vrednost operanda se nalazi u R5. Tipino, adresno polje

    koje referencira adrese imae od 3 do 5 bitova, tako da moe da se referencira od 8 do 32

    registra opte namene.

    Prednosti registarskog adresiranja su to se (1) zahteva samo malo adresno polje u

    instrukciji i (2) to se ne zahtevaju nikakve memorijske reference koje troe vreme. Vreme

    pristupa memoriji za registar koji se nalazi unutar procesora je mnogo manje od onoga za

  • 5-7

    pristup glavnoj memoriji. Nedostatak registarskog adresiranja je to je adresni prostor veoma

    ogranien.

    Primer.

    Ako se u skupu instrukcija mnogo koristi registarsko adresiranje, to nagovetava da e

    se mnogo koristiti registri procesora. Zbog strogog ogranienja broja registara (u poreenju sa

    lokacijama glavne memorije), njihova upotreba na taj nain ima smisla samo ako se koriste

    efikasno. Ako se svaki operand donosi u registar iz glavne memorije, jednom izvri operacija

    i zatim vraa u glavnu memoriju, tada se dodaje nepotreban meukorak. Ako, umesto toga,

    operand u registru ostaje u upotrebi za vie operacija, onda se postie stvarna uteda. Primer

    je meurezultat u proraunu. Posebno, pretpostavite da algoritam za mnoenje u

    komplementu dvojke treba da se implementira u softveru.

    Na programeru je da odlui koje vrednosti bi trebalo da ostanu u registrima, a koje bi

    trebalo skladititi u glavnoj memoriji. Veina savremenih procesora ima registre opte

    namene, to teret efikasnog izvrenja prebacuje na programera u asemblerskom jeziku

    (odnosno, programera kompajlera).

    5.5 Registarsko indirektno adresiranje

    Ba kao to je registarsko direktno adresiranje analogno memorijski direktnom

    adresiranju, registarsko indirektno adresiranje je analogno memorijski indirektnom

  • 5-8

    adresiranju. U oba sluaja, jedina razlika je da li adresno polje referencira memorijsku

    lokaciju ili registar. Prema tome, za registarsku indirektnu adresu (slika 7),

    EA = (R)

    Slika 7. Registarsko indirektno adresiranje

    Prednosti i ogranienja registarskog indirektnog adresiranja su u osnovi ista kao za

    indirektno adresiranje. U oba sluaja, ogranienje adresnog prostora (ogranien opseg adresa)

    polja za adrese prevazilazi se poljem kojim se obraa na lokaciju duine rei u kojoj se nalazi

    adresa. Pored toga, registarsko indirektno adresiranje koristi jednu memorijsku referencu

    manje od indirektnog adresiranja.

    Primer.

  • 5-9

    5.6 Adresiranje sa pomerajem

    Veoma moan nain adresiranja kombinuje sposobnosti direktnog i registarskog indi-

    rektnog adresiranja. On je poznat pod raznim nazivima koji zavise od konteksta njegove

    upotrebe, ali osnovni mehanizam je isti. Mi emo se na njega pozivati kao na adresiranje sa

    pomerajem (engl. displacement addressing, slika 8):

    EA = A + (R)

    Slika 8. Adresiranje sa pomerajem

    Adresiranje sa pomerajem zahteva da instrukcija ima dva adresna polja, od kojih je

    najmanje jedno eksplicitno. Vrednost koja se sadri u jednom adresnom polju (vrednost A)

    koristi se direktno. Drugo adresno polje, ili implicitna referenca zasnovana na kodu operacije,

    odnosi se na registar iji sadraj se dodaje A da bi se proizvela efektivna adresa.

    Primer.

    Opisaemo tri najee upotrebe adresiranja sa pomerajem:

    - relativno adresiranje;

    - adresiranje sa baznim registrom;

    - indeksiranje.

    Relativno adresiranje. Za relativno adresiranje, koje se takoe zove i adresiranje relativno

    prema PC, implicitno referencirani registar je programski broja (PC). Odnosno, adresa

  • 5-10

    sledee instrukcije dodaje se adresnom polju da bi se proizvela EA. Tipino, sa adresnim

    poljem se za ovu operaciju postupa kao sa brojem u komplementu dvojke. Prema tome,

    efektivna adresa je pomeraj relativan u odnosu na adresu instrukcije.

    Relativno adresiranje koristi koncept lokalnosti. Ako je veina referenci memorije

    relativno bliska instrukciji koja se izvrava, onda upotreba relativnog adresiranja tedi adresne

    bitove u instrukciji.

    Adresiranje sa baznim registrom. Za adresiranje sa baznim registrom postoji sledee

    tumaenje: referencirani registar sadri adresu u glavnoj memoriji, a adresno polje sadri

    pomeraj (obino u predstavljanju neoznaenog celog broja) od te adrese. Referenca registra

    moe biti eksplicitna ili implicitna.

    Adresiranje sa osnovnim registrom takoe koristi lokalnost memorijskih referenci. U

    nekim implementacijama, koristi se jedan segmentni osnovni registar da dri osnovnu adresu

    segmenta, a instrukcije moraju eksplicitno da ga referenciraju. U tom poslednjem sluaju, ako

    je duina adresnog polja K, a broj moguih registara N, onda jedna instrukcija moe da

    referencira bilo koju od N oblasti od po 2K rei.

    Indeksiranje. Za indeksiranje, tipino tumaenje je sledee: adresno polje referencira adresu

    u glavnoj memoriji, a referencirani registar sadri pozitivan pomeraj od te adrese. Obratite

    panju na to da je ta upotreba upravo suprotna od tumaenja za adresiranje sa baznim

    registrom. Naravno, to je vie nego samo stvar korisnikovog tumaenja. Zbog toga to se

    adresno polje smatra memorijskom adresom u indeksiranju, ono obino sadri vie bitova od

    adresnog polja u uporedivoj instrukciji sa osnovnim registrom. Svejedno, metoda prorauna

    EA je ista i za adresiranje sa osnovnim registrom i za indeksiranje, a u oba sluaja referenca

    registra je ponekad eksplicitna, a ponekad implicitna (za razliite vrste procesora).

    Slika 9. Primena indeksiranja u radu sa nizovima

  • 5-11

    Znaajna upotreba indeksiranja je da obezbedi efikasan mehanizam za izvoenje

    iterativnih operacija (slika 9). Razmotrite, na primer, listu brojeva koji su uskladiteni poevi

    od lokacije A. Pretpostavite da bismo eleli da dodamo 1 svakom elementu na listi. Treba da

    donesemo svaku vrednost, dodamo joj 1 i opet je uskladitimo nazad. Sekvenca efektivnih

    adresa koje su nam potrebne je A, A + 1, A + 2,..., sve do poslednje lokacije na listi. Sa

    indeksiranjem, to se lako uradi. Vrednost A se uskladiti u adresno polje instrukcije, a

    izabrani registar, koji se zove indeksni registar, inicijalizuje se na 0. Posle svake operacije,

    indeksni registar se poveava za 1.

    Zbog toga to se indeksni registar obino koristi za takve iterativne zadatke, tipino je

    da postoji potreba za poveavanjem ili smanjivanjem indeksnog registra posle svake reference

    na njega. Imajui u vidu da je to esta operacija, neki sistemi je rade automatski, kao deo istog

    instrukcijskog ciklusa. To je poznato kao autoindeksiranje. Ako su izvesni registri posveeni

    iskljuivo indeksiranju, onda se autoindeksiranje moe pozvati implicitno i automatski. Ako

    se koriste registri opte namene, moe biti potrebno da se operacija autoindeksiranja

    signalizira pomou jednog bita u instrukciji. Autoindeksiranje koje koristi poveavanje moe

    da se opie na sledei nain:

    EA = A + (R)

    (R) (R) + 1

    U nekim mainama, obezbeeni su i indirektno adresiranje i indeksiranje, a mogue je

    primeniti i oba u istoj instrukciji. Postoje dve mogunosti: indeksiranje se izvodi pre ili posle

    indirekcije.

    Ako se indeksiranje izvodi posle indirekcije, to se zove postindeksiranje:

    EA = (A) + (R)

    Prvo se koristi sadraj adresnog polja da bi se pristupilo memorijskoj lokaciji koja

    sadri direktnu adresu. Ta adresa se onda indeksira vrednou registra. Ta tehnika je korisna

    za pristupanje jednom od izvesnog broja blokova podataka fiksnog formata. Operacije koje se

    izvode su iste, bez obzira na to kojim blokom se manipulie. Prema tome, adrese instrukcija

    koje referenciraju blok bi mogle da pokau na lokaciju (vrednost A) koja sadri promenljivi

    pokaziva na poetak bloka za upravljanje procesom. Indeksni registar sadri pomeraj unutar

    bloka.

    Kod preindeksiranja, indeksiranje se izvodi pre indirekcije:

    EA = (A + (R))

    Adresa se proraunava kao kod jednostavnog indeksiranja. Meutim, u ovom sluaju,

    izraunata adresa ne sadri operand, nego adresu operanda. Primer upotrebe te tehnike je kada

  • 5-12

    se konstruie tabela grananja na vie putanja. U odreenoj taki u programu, moe postojati

    grananje na jednu od nekoliko lokacija, zavisno od uslova. Moe da se uspostavi tabela koja

    poinje na lokaciji A. Indeksiranjem u toj tabeli, moe da se pronae zahtevana lokacija.

    Skup instrukcija tipino ne sadri i preindeksiranje i postindeksiranje.

    5.7 Adresiranje pomou steka

    Poslednji nain adresiranja koji razmatramo je adresiranje pomou steka. Stek je

    rezervisan blok lokacija. Stavke se dodaju na vrh steka tako da je, u svakom datom trenutku,

    blok delimino popunjen. Steku je pridruen pokaziva, ija vrednost je adresa vrha steka.

    Alternativno, dva gornja elementa steka mogu da budu u registrima procesora, u kom sluaju

    pokaziva steka referencira trei element steka. Pokaziva steka se odrava u registru. Prema

    tome, reference na lokacije steka u memoriji su, ustvari, registarske indirektne adrese.

    Nain adresiranja pomou steka je oblik implicitnog adresiranja. Mainske instrukcije

    ne ukljuuju memorijsku referencu, nego implicitno rade na vrhu steka.

  • 5-13

    Zadatak 1. Na slici je prikazan sadraj registara procesora i dela memorije neposredno pre

    izvravanja neke instrukcije. Odrediti sadraj registara i memorije posle sukcesivnog

    izvravanja tri instrukcije. Instrukcije su jednoadresne i duine dva bajta, gde prvi bajt

    oznaava kod operacije i nain adresiranja, dok drugi bajt predstavlja operand, osim

    instrukcije POP koja je bezadresna i duine jedan bajt. Adrese i operandi su osmobitni i

    prikazani u heksadecimalnom formatu u komplementu dvojke. Pokaziva steka SP pokazuje

    na adresu memorijske lokacije koja se nalazi na vrhu steka. itanjem podatka sa steka SP se

    inkrementira, a upisom na stek SP se dekrementira.

    Procesor

    PC 4A

    Acc 07

    SP 8B

    Instrukcija Komentar Sadraj registara procesora nakon instrukcije

    Sadraj memorije nakon instrukcije

    POP (Acc) 1C (PC) = 4B (uveava se za jedan bajt)

    (Acc) = 1C

    (SP) = 8C

    Isti

    SUB #2F (Acc) (Acc) 2F = ED

    (PC) = 4D (uveava se za dva bajta)

    (Acc) = ED

    (SP) = 8C

    Isti

    STORE [69] (Mem:69) =

    (Acc) = ED

    (PC) = 4F

    (Acc) = ED

    (SP) = 8C

    Sadraj lokacije 69 je ED

    Adresa Sadraj memorije

    48 LOAD Memorijski indirektno

    49 6A

    4A POP Bezadresna

    4B SUB Neposredno

    4C 2F

    4D STORE Memorijski direktno

    4F 69

    69 3F

    6A 78

    8B 1C

  • 5-14

    Zadatak 2. Na slici je prikazan sadraj registara procesora i dela memorije neposredno pre

    izvravanja neke instrukcije. Odrediti sadraj registara i memorije posle sukcesivnog

    izvravanja etiri instrukcije. Instrukcije su jednoadresne i duine dva bajta, gde prvi bajt

    oznaava kod operacije i nain adresiranja, dok drugi bajt predstavlja operand, osim

    instrukcija PUSH i POP koje su bezadresne i duine jedan bajt. Adrese i operandi su

    osmobitni i prikazani u heksadecimalnom formatu u komplementu dvojke. Pokaziva steka

    SP pokazuje na adresu memorijske lokacije koja se nalazi na vrhu steka. itanjem podatka sa

    steka SP se dekrementira, a upisom na stek SP se inkrementira.

    Procesor

    PC 48

    Acc 07

    SP 8B

    R1 A4

    BR 69

    Instrukcija Komentar Sadraj registara procesora nakon

    instrukcije

    Sadraj memorije nakon

    instrukcije

    LOAD [[6A]] (Acc) 25 (PC) = 4A (Acc) = 25

    (SP) = 8B

    Isti

    ADD R1 (Acc) (Acc) + A4 = C9 (PC) = 4C (Acc) = C9

    (SP) = 8B

    Isti

    PUSH (stek) (Acc) = C9 (PC) = 4D (Acc) = C9

    Sadraj lokacije 8C je C9

    Adresa Sadraj memorije

    48 LOAD Memorijski indirektno

    49 6A

    4A ADD Registarsko direktno

    4B R1

    4C PUSH Bezadresna

    4D STORE Bazno sa pomerajem

    02

    4F POP Bezadresna

    69 3F

    6A 78

    6B 4C

    78 25

    8B 1C

    8C 23

  • 5-15

    (SP) = 8C

    STORE 02[BR] (Mem:69 + 02) = (Mem:6B) =

    (Acc) = C9

    (PC) = 4F

    (Acc) = C9

    (SP) = 8C

    Sadraj lokacije 8C je C9

    Sadraj lokacije 6B je C9