Címzési módok


1 A PROGRAMOK VÉGREHAJTÁSA

A számítógépet a program működteti. A processzor közvetlenül csak a gépi kódú programokat képes értelmezni. A gépi kódú utasítás az elvégzendő művelet kódjából és a művelet operandusaiból áll. Maga az utasítás nem más, mint nullák és egyesek sorozata. Az utasítások műveletikód-része adja meg a processzor számára, hogy milyen műveleteket kell elvégezni. Az operandusrész tartalmazza azt az információt, hogy a műveletet mivel kell elvégezni. A processzor által értelmezhető műveletek összességét a processzor utasításkészletének nevezzük.


2 GÉPI KÓDÚ UTASÍTÁSOK

A gépi kódú utasítások egy műveleti részből és egy operandusrészből állnak. Az operandusrész általában összetett.

2.1. ábra: Utasításszerkezetek

A legteljesebb utasításszerkezet a műveleti kódon kívül négy címet tartalmaz:

Az utasítástól függően az első két cím helyett közvetlen adatok is szerepelhetnek, ekkor a műveletet a gép ezekkel végzi el. Általában nem célszerű közvetlen adatok használata a programokban, mert azokat nem tudjuk változtatni, míg a tárban az adatokat a programtól függően tetszés szerint változtathatjuk.
Az operatív táron kívül a vezérlőegységben van néhány speciális rendeltetésű tárolórekesz, ún. regiszter. A regisztereknek saját címük van, ezek is szerepelhetnek az utasítások operandusrészében.
A 4 címes és 3 címes utasításszerkezetek nagy hibája a helyfoglalás.
A korszerű számítógépek utasításai kétcímesek, azaz két operandushivatkozást tartalmaznak.
A kétcímes utasítások szerkezete:

A regisztereknek saját címük van, ezek is szerepelhetnek az utasítások operandusrészében.
Az eredmény címe lehet az operatív tár egyik rekeszének címe, de ha az eredményre a továbbiakban is szükség van, hagyhatjuk az ALU egy regiszterében is.
Ebben a rendszerben az utasítások nem jelölik ki a következő utasítást. Ehelyett a processzor egy speciális rekeszben (utasításszámláló) tárolja a következő végrehajtandó utasítás címét, és az aktuális művelet elvégzése után a következő utasítást az utasításszámlálóban lévő cím alapján választja ki. Ehhez egyrészt az szükséges, hogy egy program utasításai a memóriában egymás után, a végrehajtás sorrendjében helyezkedjenek el, másrészt a következő utasítás tárcímének kiszámításához a processzornak ismernie kell az aktuális utasítás hosszát.
Egyes utasításoknak az a célja, hogy megváltoztassák a programutasítások természetes, tárolási sorrend szerinti végrehajtási sorrendjét. Az erre a célra szolgáló utasításokat vezérlésátadó vagy ugró utasításoknak nevezzük. Ezek az utasítások a következő végrehajtandó utasítás címét töltik az utasításszámlálóba.
A kétcímes utasításokban nincs megadva az eredmény címe sem. A szokás az, hogy az eredmény az 1. operandus helyére kerül.
Egyes (pl. 8 bites) processzoroknál az utasítások egycímesek. Ilyenkor az egyik operandus az ALU egy speciális regiszterében (akkumulátor) található, a másik az operandusrészben megadott tárcímen, az eredmény pedig az akkumulátorba íródik.
A címregiszter és az adatregiszter is fontos szerepet játszik az utasítások végrehajtása során. Mindkét regiszter az ALU és az operatív tár közötti kommunikáció céljára szolgál. amikor a vezérlőegység egy adatot akar betölteni az aritmetikai és logikai egységbe, akkor a megfelelő tárrekesz címét előzetesen betölti a címregiszterbe, az olvasási művelet a címregiszter tartalmát használja a kívánt rekesz megkereséséhez.
Az olvasási művelet során az adat a tárrekeszből az adatregiszterbe kerül, majd a vezérlő innen írja át az aritmetikai és logikai egységbe. Amennyiben az ALU-ból kell adatot a tárba írni, a folyamat fordított irányban zajlik le, az adatregiszteren keresztül a címregiszter felhasználásával.


3 A CÍMZÉSI MÓDOK

3.1 A közvetlen adathivatkozás
Az operandus helyén nem egy adat címe, hanem maga az adat áll:

3.1. ábra: Utasításformátum közvetlen adathivatkozás esetén

Azt, hogy a 2. operandus helyén nem cím, hanem adat áll, a vezérlőegység a műveleti kódból tudja meg. Kétoperandusos műveletek esetén az első operandus nem lehet közvetlen adat, csak tárcím vagy regiszterhivatkozás.

3.2 A közvetlen címzés
Az operandus itt egy közvetlen tárcím, azaz egy bináris szám.

3.2. ábra: A közvetlen címzés

A közvetlen cím a regiszterbe kerül, a vezérlő megcímzi a kívánt rekeszt, a címzési mód hátránya, hogy a címrész nehezen módosítható, ezen kívül hosszú. Az utasítás mindig ugyanarra a tárrekeszre vonatkozik.

3.3 A regiszteres címzés
A regiszteres címzésnél az operandus nem az operatív tárban van, hanem a processzor egyik regiszterében, így az adatért nem kell a tárhoz fordulni.

3.3. ábra: A regiszteres címzés

3.4 A regiszteres indirekt címzés
A indirekt címzés azt jelenti, hogy az utasítás operandusa egy olyan címre való hivatkozás, amelyen a tényleges adat címe található.
A regiszteres indirekt címzésnél az operandus annak a regiszternek a címe, amelyben az adat tárbeli címe található.

3.4. ábra: Regiszteres indirekt címzés

3.5 Az indirekt címzés
Ennél a címzési módnál az operandus olyan tárcímre mutat, amelyen az adat címe található. Itt egy adat eléréséhez kétszer kell a tárhoz fordulni. Ez az utasítástípus akkor használatos, ha a gép olyan, hogy az utasítás operandusrésze nem elég hosszú a teljes tár címzésére.

3.5. ábra: Indirekt címzés

3.6 A bázisregiszteres címzés
A bázisregiszteres címzési módnál az adat tárcíme két címkomponens összege. Az egyik a vezérlőegység egy regiszterében, a bázisregiszterben található címkonstans, az ún. báziscím, a másik az ún. eltolási cím. Az utasításban a bázisregiszteres címzést alkalmazó operandus két részre oszlik. Az első részben található a bázisregiszter címe, a másikban az eltolási érték. A tényleges cím kialakításához az ALU összeadja a báziscímet és az eltolási értéket.
A bázisregiszteres címzés az alapja a programok áthelyezhetőségének. A programok áthelyezhetősége, azaz a lehetőség, hogy a programok a tár bármely részében azonosan működhetnek, a feltétele annak, hogy a gépet egyszerre több program használhassa. A programozó minden utasításban egy bázisregiszterre hivatkozik, az operandusok címét pedig a program első utasításától való távolságuk adja meg (relatív cím). A program betöltésekor a gép a bázisregiszterbe tölti az első utasítás címét, ezután az abszolút tárcím minden bázisregiszteres címzési utasításnál a bázisregiszter tartalmának és a relatív címnek az összege.

3.6. ábra: A bázisregiszteres címzés

3.7 Az indexregiszteres címzés
Az indexregiszteres címzés során az abszolút cím a vezérlő egy regiszterében, az ún. indexregiszterben lévő cím és az operandusban lévő cím összege. Az indexregiszter címe szintén ugyanabban az operandusban van, ahol az adat tárcíme.
A különbség a bázisregiszteres és az indexregiszteres címzés között az, hogy az indexregiszter tartalmát a program saját maga is megváltoztathatja. Az indexregiszteres címzésnél a relatív cím vagy index az adattömb elejétől számított távolság.

3.7. ábra: Az indexregiszteres címzés

3.8 Utasítástípusok

3.8. ábra: Utasítástípusok

RR - mindkét operandus egy-egy regiszterben van. A gépen összesen 16 regiszter van, ezek 4 biten címezhetők. Az utasítás végrehajtása után az eredmény R1-be kerül.

RX - az első operandus az R1 regiszterben van, a másik a tárban. A második operandus címzése bázisregiszteres, a címet indexregiszter módosítja. B tartalmazza a báziscímet, D az eltolást, X2 az indexet. Így a 2. operandus címe = (X2)+(B2)+D2, ahol (X2) az X2 tartalmát, (B2) a B2 tartalmát jelenti. Az X2 és a B2 általános célú regiszter, amelyből 16 van. Az eltolási mező 12 bites, azaz 4 kbyte-ot címezhet meg.

RS - R1 és R3 általános célú regiszter, B2 és D2 a második operandus tárcímét állítja elő bázisregiszteres címzéssel. Ez három címes utasítás.

SI - Az első operandus bázisregiszteres címzéssel megadott tárcím, a második pedig egy byte-os közvetlen adat.

SS1 és Mindkét operandus a tárban van, címüket bázisregiszteres címzéssel állítjuk elő.

SS2 - SS1-nél az érték az operandusok byte-ban kifejezett hossza mínusz 1. Az SS1 utasítást csak azonos hosszúságú operandusoknál használhatjuk. Az SS2 típusnál az operandusok eltérő hosszúságúak is lehetnek.

3.9 Az IBM PC utasításszerkezete
Az INTEL 8088 16 bites, 4 különböző típusú regiszterekkel rendelkezik.

Általános regiszterek:

Címzési regiszterek: Vezérlő regiszterek: Szegmensregiszterek:

Az általános regiszterek különböző funkciók ellátására alkalmasak, általában adatok tárolására használjuk őket. A BX bázisregiszteres utasítások bázisregisztere lehet, a CX számolóként működhet.
Az SI és DI indexregiszterek használhatók indexregiszterként, illetve adattömbben mutatóként (indexként), a BP egy speciális rendeltetésű tárolórész, bázisregiszterként használható.
Az SP regiszter a verem elemeinek mutatója, IP az utasításszámláló. A flag 16 bitből áll, a bitek aritmetikai és egyéb műveletek végrehajtásánál használt jelzők.
Az IBM PC utasításformátuma:

3.9. ábra: Az IBM PC utasításformátuma

Az utasításkészlet igen rugalmas, hiszen a második operandus címét a veremmutató, a bázisregiszter, valamint az indexregiszterek együttes felhasználásával lehet kialakítani. Azt, hogy a második operandus tartalmából hogyan kell kiszámítani a tárcímet, azt a "mod" két bitje és az r/m három bitje dönti el.
Az utasítás első operandusa csak regiszterben lehet. A regiszter címét adja meg a három "reg" bit. A "d" bit azt mutatja, hogy az operandust a regiszterből veszi-e ki az utasítás (d=0), vagy oda teszi be (d=1). A "w" bit az operandus hosszát jelöli, w=0 nyolcbites, w=1 pedig 16 bites operandust jelöl.


4 A SZÁMÍTÓGÉP MEGSZAKÍTÁSI RENDSZERE

A számítógép a program igényeinek megfelelően használja a különböző berendezéseket, a be/kiviteli eszközöket, a processzort, a tárolókat, a gép ún. erőforrásait. Ha a gépen egyszerre több program fut, az egyszerre egy erőforrást tud használni, a gép többi része kihasználatlanul áll. Ez a probléma csökkenthető, ha az egyszerre futó programok más és más erőforrásokat igényelnek ugyanabban az időpontban. A másik gond viszont az, hogy hogyan lehet megakadályozni, hogy a programok összeakadjanak, azaz egyszerre használják ugyanazt a berendezést. A megoldás: az éppen futó programokat megszakítják a processzoron, ha a processzort valamely okból egy fontosabb (erősebb) program igényli. Amikor a futó program visszakapja a vezérlést, ugyanonnan kell tudni indulnia, ahol befejezte működését. Tárolni kell tehát a program állapotának leírását. Ez a vezérlőegység egyik regiszterében történik meg. Ez a regiszter az ún. programállapotszó (Program Status Word - PSW) regiszter.
Egy nagyobb számítógépen akár több száz program futását is koordinálnia kell a megszakítási rendszernek. A vezérlés visszaadása mindig akkor történik, amikor az "erősebb" program processzorigénye megszűnt.
A programok "erősségét" prioritásnak nevezzük.
A megszakítást más célra is lehet használni, például a futó program a gép operációs rendszerének egy programját veszi igénybe, vagy áramkimaradás, esetleg hardver- vagy szoftverhiba miatt meg kell állnia, helyét a hibakezelő programnak kell átadnia.

Egy szintet vissza, vagy vissza a főmenübe.