Osoitus (tietokonearkkitehtuuri)

In ohjelmointi, käsitellään on määritelmä, joka operandien (esim. Datakentät ) kone komento viittaa. Operandit voidaan osoittaa eri tavoin ( osoitetyyppi tai osoitetila ), esimerkiksi määrittämällä ne suoraan komentoon tai viittaamalla muistiosoitteeseen . Operaatiokoodi ja vain komentokoneen sisältämät konekomennon tiedot operanteista ovat ratkaisevia käytetyn osoitetyypin suhteen .

In assembler ohjelmointi, ohjelmoija itse määrittää tyypin käsitellään valitsemalla tiettyjä operaatiokoodit (ja niihin liittyvät parametrit). Kun käytetään korkeampia ohjelmointikieliä, kääntäjät tuottavat konekomennot automaattisesti (ja siten myös niiden osoitetyypit määritetään), enimmäkseen ilman ohjelmoijan suoraa vaikutusta. Prosessori dekoodaa laitteen komentojen suorituksen aikana ja suorittaa vastaava osoite laskelmia sekä lastaus tietoja voidaan käyttää komento.

Eri osoitetyypit ovat yksi osa prosessorin suunnittelua. Ne määritellään tietyssä käskyjoukon arkkitehtuurissa ja ne määrittävät, kuinka sen operandien todellinen (fyysinen) muistiosoite määritetään / lasketaan konekielen jokaiselle käskylle, esimerkiksi konekäskyjen rekistereihin ja / tai vakioihin tallennettujen tietojen avulla. .

Jos komento liittyy useaan operandiin (lähde- ja / tai kohdekentät), osoitukseen tarvittavat tiedot vaaditaan / ovat saatavana erikseen jokaiselle operandille. Muita konekomennon sisältämiä parametreja (kuten tietoja operandien pituudesta, loogisten komentojen hyppymittareita, kuten yhtä suuri tai suurempi) ei käytetä osoitukseen kapeammassa merkityksessä.

Osoitetyyppeihin liittyvät erot

Eri nimet

Huomaa, että eri osoitetyypeille / -tavoille ei ole yleisesti voimassa olevaa nimeämiskäytäntöä. Erityisesti eri kirjoittajat tai laitevalmistajat käyttävät joskus eri nimiä samalle osoitetilalle tai samaa nimeä eri tiloille.

Seuraavat erot osoitetyyppien nimeämisessä ovat yleisiä. Perusteellinen ero on

  • toisaalta loogiset tai ohjelmapuolen osoitteet (ohjelmointitaso). Loogiset osoitteet on jaettu absoluuttisiin, suhteellisiin, epäsuoriin ja symbolisiin osoitteisiin, vaikka erilaisia ​​tarkkoja karakterisointeja, rajauksia ja päällekkäisyyksiä löytyy.
  • Koneosoitteet tai fyysiset osoitteet toisaalta (koneen komentotaso). Koneosoitteita kutsutaan myös todellisiksi osoitteiksi.

Eri nimien lisäksi, osoitetila, jota käsitellään yhtenä tilana yhdessä arkkitehtuurissa, voi tarkoittaa toimintoa, jonka kaksi tai useampi tila peittää toisessa arkkitehtuurissa.

Eri merkitykset yksityiskohtaisesti

"Osoittaminen" voi tarkoittaa yksityiskohtaisesti eri asioita:

  • Aktiivisuus mukana ohjelmoinnissa koneellisesti tason kielillä: valikoima komentoja, koodaus toimijoiden
  • Tiedot koneen komennon viitaten jotta operaattorit koodimuodossa
  • Toimivuus prosessorin, jolla se määrittää todellisen osoitteet

Operaattoreiden nimeäminen ylemmän tason ohjelmointikielellä (SIIRRÄ A - B), laajemmassa merkityksessä myös tietyntyyppinen osoite, ei lasketa tässä artikkelissa käsiteltyyn "osoite, osoitetila" merkitykseen .

Erot käskyjoukkojen välillä

Yksittäisten prosessorityyppien käskyjoukot eroavat paitsi suorituskyvyn myös osoitteen suhteen. Merkittäviä esimerkkejä on annettu alla:

  • Tietyissä käskyjoukoissa opkoodi sisältää rekisterinumeron - kun taas muissa tapauksissa rekisterinumero sijaitsee erillisessä parametrikentässä. Vastaavasti tällainen käskyjoukko sisältää paljon enemmän toimintakoodeja.
  • System / 390- prosessoriperheessä vain 1-numeroiset suorat arvot ('välittömät') voivat sisältyä koneen komentoon. 'Indeksoidun osoitteen' kohdalla osoitemäärityksen siirtymäarvo tallennetaan yhdessä rekisterinumeron kanssa 'puolisanaksi' (4-bittinen rekisterinumero, 12-bittinen offset / kokonaisluku).

Tyypilliset suorittimen osoitetyypit

Kaavio vaihtoehtoisille konekomentojen osoitetyypeille

Yksinkertaisimmassa tapauksessa yksittäiset muistipaikat numeroidaan peräkkäin 0: sta ( lineaarinen osoiteavaruus ). Osoite sitten edustaa määrä tietyn muistipaikan. Rekisterit prosessorin yleensä myös numeroitu juoksevasti.

Erilaisten osoitetyyppien vuoksi konekomennoilla on erilaiset rakenteet, esimerkiksi yksi operandi kuuluu operaatiokoodiin ja useita operandeja muille komennon lähteenä tai kohteena. Katso esimerkkejä komennoista yksittäisistä osoitetyypeistä.

Koska prosessoreissa on yleensä vain muutama rekisteri, mutta monta muistipaikkaa, rekisteri-osoitteet ovat lyhyempiä kuin päämuistiosoitteet. Esimerkki: Järjestelmässä, jossa on prosessori, jossa on 16 rekisteriä ja 4 GiB-muistia, rekisteriosoite vaatii 4 bittiä, kun taas päämuistiosoite 32 bittiä. In konekieli , rekisteröi osoitteet ovat usein tallennetaan yhdessä käskykoodista muistiin sana - ne ovat näin ollen käytettävissä prosessorin ilman muistin kulkutiet, kun taas prosessori edellyttää lisäksi muistin sisäänkäyntien - ja siten suoritusaika - siirtoa varten kunkin tärkein muistiosoite.

Pelkästään ortogonaalisen komentojoukon avulla kutakin komentoa voidaan käyttää minkä tahansa tyyppisessä osoituksessa. Yleisissä prosessoriperheissä on kuitenkin monia rajoituksia, joten (kokoonpanija) ohjelmoijan on saatava selville prosessorin "ohjelmointimallista", minkä tyyppisiä osoitteita mihin ohjeisiin tosiasiallisesti on saatavilla.

Päämuistista päämuistiin toimivia osoitetyyppejä käytetään nykyään vain integroiduissa piireissä ja sulautetuissa järjestelmissä, joissa on vähän muistitilaa. Suuret suoritusnopeudet voidaan saavuttaa vain rekistereissä toimivilla komennoilla - tämän vuoksi suorituskykyyn optimoiduilla prosessoreilla on yleensä lataus- / tallennusarkkitehtuuri .

Rekisteröi osoite

Rekisterin osoituksella (englanniksi "register direct") käsky viittaa prosessorirekisterin sisältöön. Lukukomentojen tapauksessa operandi on jo käytettävissä rekisterissä, eikä sitä tarvitse enää ladata muistista. Epäsuoran rekisterin osoituksen tapauksessa käytetään opkoodille implisiittisesti määritettyä rekisteriä (esimerkki: opkoodi viittaa epäsuorasti akkuun). Rekisterin nimenomaisella osoituksella rekisterin numero syötetään konekomennon rekisterikenttään tai se on osa komentokoodia.

# Addiere den Inhalt von Register 1 mit dem Inhalt des Registers 2, speichere Ergebnis in Register 3
add_rrr R2, R1, R3
# Also drei Adressierungen:
# Quelle_1 .. Register,
# Quelle_2 .. Register,
# Ziel_1 .. Register

Välitön osoite

Operandi tai operandit (ei niiden osoite) ovat osa komentoa, joka on tallennettu itse komentokoodiin tai muistisanoihin, jotka seuraavat välittömästi muistissa olevaa komentokoodia . Käsky sisältää yleensä ylimääräisen operandin.

# Lade das Akkumulatorregister mit dem Wert 22 (101102) (nicht mit dem Inhalt von Speicherplatz 22)
load_direct acc, 10110
# Also zwei Adressierungen:
# Ziel_1 .. Register
# Quelle_1 .. unmittelbar angegebener Wert

Ehdottomat tai suorat osoitteet

Tämäntyyppisessä osoituksessa komento ei määritä suoraan ja täydellisesti operandia, vaan sen muistiosoitetta (josta todelliset tiedot löytyvät) (viitetaso 1).

# Addiere den Inhalt von Adresse 22 (= 101102) und Adresse 6 (= 001102)
 und speichere das Ergebnis in Adresse 1 (= 000012)
add_AdrAdrAdr 10110, 00110, 00001

Indeksoitu ja suhteellinen osoite

Molemmat osoitetyypit käyttävät rekisteriä osoittaakseen päämuistin muistisolut. Kanssa indeksoitu käsitellään, sisällön ns indeksi rekisteri lisätään muodostettu osoite muita osoitetietoja. Esimerkki: On perusosoiterekisteri (esim. Erityinen rekisteri "indeksi"), johon annettu parametri lisätään offsetina . Usein myös negatiiviset siirtymät ovat mahdollisia. Osoitteen tulos on operandin osoite, ts. H. tämä viittaa operandiin (viitetaso 1)

# Addiere den Inhalt der Adressen (Index+002 =22) und (Index+012 =23)
 und speichere das Ergebnis in Adresse (Index+102 =24)
load_direct index, 10110     # lade (Basis-)Adresse 22 ins Indexregister
add_iii 00, 01, 10

Usein näillä suhteellisilla osoitteilla on vähemmän numeroita (esimerkiksi 8 bittiä, ts. 8 binäärilukua; 8-bittisellä opkoodilla kokonaiskomento on silloin 8 + 3 * 8 = 32-bittinen), mikä toisaalta säästää tilaa ja mahdollisesti "tallentaa koko komennon, mukaan lukien osoitetiedot, kun lataus on valmis" tekee; toisaalta tämä rajoittaa osoiteavaruutta (esimerkissä vain indeksi + 00000000 2 .. indeksi + 11111111 2 on mahdollinen).

Tämän tyyppistä pääsyä käytetään pääasiassa matriiseihin tai yhdistettyihin tietotyyppeihin.

Koska tietokoneella on yleensä useampia kuin yksi rekisteri, käskyssä on oltava maininta siitä, mitä rekisteriä käytetään perusrekisterinä. Esimerkissä oletetaan, että rekisteri "indeksi" on kiinteä tätä tarkoitusta varten.

Suhteellinen käsitellään on samanlainen, mutta komennolla laskuri ( ohjelma laskuri , PC) käytetään sen sijaan indeksirekisterin . Osoite ei tapahdu indeksirekisterissä määritetyn osoitteen suhteen, vaan suhteessa komentolaskuriin, ts. H. sijainti, joka sisältää komennon.

Joskus offset voidaan antaa myös rekisterissä, erityisesti ns. Segmentoidun osoitteen avulla . Perusosoiterekisteriä kutsutaan silloin usein “segmenttirekisteriksi”.

Epäsuora osoite

Käsky osoittaa rekisteriin tai muistiosoitteeseen päämuistissa ( nollasivulla olevan 6502 : n tapauksessa ). Operaation tehokas osoite johtuu vastaavan rekisterin tai vastaavan muistisolun (solujen) sisällöstä (viitetaso 2). Tarvittaessa lisärekisterin (hakemistorekisterin) sisältö lisätään tällä tavalla määritettyyn osoitteeseen (epäsuorasti indeksoitu osoite).

Epäsuoran osoitteen patentoi Heinz Schecher vuonna 1953 .

Virtuaalinen osoite

Käyttöjärjestelmän tarjoamat osoitetyökalut kuvataan tässä.

Käyttöjärjestelmät käyttävät virtuaalista osoitetta voidakseen suorittaa ohjelmia, jotka vaativat enemmän tallennustilaa kuin mitä RAM- muistissa on tosiasiallisesti käytettävissä. Koko käytettävissä olevaa muistitilaa kutsutaan virtuaaliseksi osoitetilaksi, ja pääsyä siinä oleviin osoitteisiin kutsutaan virtuaaliseksi osoitteeksi. Kyseinen käyttöjärjestelmä käyttää virtuaalimuistin hallintaa, joka käyttää muistinhallintayksikköä ohjelman osien siirtämiseen kiintolevylle ja tarvittaessa lataamaan ne päämuistiin, jos valittu osoite on RAM- muistissa olevan osoiteavaruuden ulkopuolella . Osoitteet määritetään joko suoraan, suhteellisen, indeksoituina tai symbolisesti.

kirjallisuus

  • Hans Liebig: Tietokoneorganisaatio: Periaatteet . Springer-Verlag, 3. painos, 2003, ISBN 978-3-540-00027-3
  • Toimittanut Thomas Beierlein, Olaf Hagenbruch: Taskukirja mikroprosessoritekniikasta . Carl Hanser Verlag, 4. painos, 2010, ISBN 978-3-446-42331-2