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