Utasítás-végrehajtás Művelet-végrehajtás Processzorok II. Utasítás-végrehajtás Művelet-végrehajtás
CISC processzorok RISC processzorok 1 Az utasítások összetettek, több gépi ciklust igényelnek Egy gépi ciklus alatt végrehajtható egyszerű utasítások 2 Több utasítás is igénybe veheti a tárolót Csak a LOAD/STORE utasítások használhatják a tárat 3 A pipelining feldolgozás kismértékű Jelentős pipelining feldolgozás 4 Mikroprogram által vezérelt utasítás-végrehajtás Huzalozott utasítás-végrehajtás 5 Változó hosszúságú utasítások Rögzített hosszúságú utasítások 6 Sokféle utasítás és címzési mód Kevés utasítás és címzési mód 7 Bonyolult mikroprogram Bonyolult fordítóprogram 8 Kevés regiszter Nagyméretű regisztertár
Utasítás-végrehajtás
Utasítások szerkezete A számítógépek utasításainak hossza processzoronként változó. utasítások hossza rögzített, (fix hosszúságú utasítás a csökkentett utasításkészletű (RISC) processzorokra jellemző) változó CISC processzorok esetében változó, gyakran igen hosszú utasításokat alkalmaznak.
Az utasítás szerkezete megszabja, hogy a processzornak az utasítást hogyan kell értelmeznie. műveleti részből operandusból áll, illetve az operandus memóriacímét tartalmazza.
Az utasítások három fő részre bonthatók: operációs kód (struktúrált ), amely az elvégzendő feladat fajtáját mondja meg, a műveleti jelrész további részekre osztható az egyes részek meghatározzák a művelet típusát, azaz, hogy mely utasításcsoportba tartozik információt szolgáltatnak az utasítást követő operanduszt illetően is. címrész, amely a művelethez szükséges adatok memóriacímét mutatja meg, (négy),-három-, két-, egy- és nullacímes (a proc.-nak hány címre van szüksége a végrehajtáshoz módosító rész - a pontos címmeghatározáshoz ad előírást
Négycímes utasításszerkezet viszonylag kevés utasításból álló programot lehet előállítani A négycímes utasításszerkezet áll: egy műveleti jelből, tartalmazza két műveleti operandus címét, az eredmény címét és a következő utasítás címét. A keletkező utasítások igen hosszúak lesznek, ezért ez az utasításszerkezetet visszaszorult
Háromcímes utasításszerkezet Az utasításszámláló regiszter (PC) bevezetésével a soron következő utasítás címe elhagyható. Minden egyes utasítás végrehajtásakor a processzor eggyel növeli a PC tartalmát, de ez csak akkor lehetséges, ha az utasítások a végrehajtás sorrendjében vannak eltárolva a memóriában. Az így kapott utasításszerkezet a háromcímes utasításszerkezet.
Kétcímes utasításszerkezet az eredmény elhagyására kétféle módszer van a processzor az eredményt automatikusan visszaírja az operandus helyére, az eredmény tárolására egy külön regisztert tart fenn. Ez általában az aritmetikai egységhez tartozó akkumulátor regiszter (AC).
Egycímes utasításszerkezet A második operanduscím elhagyásával jutunk az egycímes utasításszerkezethez, amelyhez feltétlenül szükséges az AC regiszter, mint második cím. Így egy művelet mindig az utasításban megcímzett tárolóhely és az AC tartalma között kerül végrehajtásra és az eredményt a processzor visszaírja az akkumulátorba. A memóriában való adatmozgatás is az akkumulátort használja második operandusként.
Nullacímes utasításszerkezet szükséges az úgynevezett veremtároló alkalmazása Ez egy speciális tároló, amely a LIFO (Last in First out. Az utolsónak bekerült adat kerül ki először) elven működik, adatokat csak a verem tetejére lehet elhelyezni és csak onnét lehet levenni is. A veremtároló általában a főmemóriában van kialakítva és a veremmutató regiszter (SP) segítségével kezelhető. Az SP arra a tárolócímre mutat, ahonnét a processzor a következő adatot leveszi (pop), vagy ahová a következő adatot beteszi (push).
A RISC processzorok háromcímes, A CISC processzorok általában két, vagy egycímes utasításszerkezettel dolgoznak. Az Intel processzoroknál az utasítások műveleti része egy (i8086/i80286) vagy kétbyte-os (i80386/i80486) amelyhez két bit kapcsolódik. Az egyik megadja, hogy a memóriabeli operanduscímre, vagy onnan kell szállítani, (kezdőcím) míg a másik az operandus méretére (byte/word) vonatkozóan ad információt. (hossz) 8086 és 80286 esetében ezt egy úgynevezett MODE byte követi, amely meghatározza az operandus helyét, majd az OFFSET, amely a szegmensen belüli relatív címet adja meg és a közvetlen adatkonstans egy-két byte-on. Az utasítást megelőzheti egy-három byte-os prefix, amely módosítja az utasítás tartalmát.
Utasítástípusok Három csoportba sorolhatók az utasítások operációs kód szempontjából: adatmozgató utasítások, amelyek a gép két része közötti adatmozgatásra szolgálnak; műveleti utasítások (aritmetikai és logikai utasítások) vezérlő utasítások speciális, a működést szabályozó utasítások
Adatmozgató utasítások Az adatmozgató utasítások egy, vagy több byte átvitelére alkalmasak. RISC processzoroknál külön byte-os és külön szavas adatmozgató utasítások vannak, míg összetett utasításkészletű processzorok esetében, ahol az utasításhossz nem állandó, magában az utasításban kell megadni az átvinni kívánt adat méretét. Az átvitt adat az eredeti helyén is megmarad, tehát ez valójában csak adatmásolás.
Adatmozgató utasítások A memória-regiszter, regiszter-memória közötti adatmozgató utasításokat tároló hivatkozású adatátviteli utasításnak hívják. Memória-memória közötti adatátvitelt közvetlenül nem használnak a processzorok.
Adatmozgató utasítások Periféria utasítások programozott átvitellel, karakterenként, figyelmet fordítva a periféria állapotára (karakter átvihetősége) megszakításos rendszerrel, ahol is a periféria kezdeményezi az átvitelt (szintén karakterenkénti átvitel) közvetlen memóriaelérés (DMA) Speciális adatmozgató utasítások a veremkezelő utasítások (POP,PUSH). Az operandusokat a processzor mindig a veremtárolóból veszi és az eredményt oda helyezi el, ehhez az SP regisztert használva fel.
Műveleti utasítások aritmetikai utasítások (különböző adatformátumokkal: fix-, lebegőpontos, BCD (Binary Coded Decimal - Binárisan Kódolt Decimális) , string) logikai műveletek léptető utasítások bit műveletek
Aritmetikai utasítások Egészek és BCD számok összeadására, kivonására szolgáló utasítások, amelyek minden processzornál megtalálhatók, a szorzási és osztási utasítások, amelyekkel a 16 és 32 bites processzorok rendelkeznek, valamint a lebegőpontos műveleti utasítások 32 bites processzorok esetében. Ezen műveletek során a processzor az állapotregiszter egyes bitjeit beállítja, lehetőséget adva a programvégrehajtás vezérlésére: carry (átvitel. A túlcsordulás jelzésére használt jelzőbitek általános neve) , Sign (Előjel) , zero, Overflow (Túlcsordulás. Akkor keletkezik, ha a műveletvégzés eredménye nagyobb, mint a tárolóban megjeleníthető érték.)
Adatok tárolási formái Célkitűzés: Hatékony tárolás, egyértelmű és könnyű értelmezhetőség fenntartása mellett Numerikus adatok esetén a műveletvégzés legegyszerűbb és leggyorsabb módú megválasztása (pl: kettes számrendszer használata, +,- számok megfelelő kódolása stb.)
Átváltás tízes számrendszerből kettes számrendszerbe 100101 10111 110100
Átváltás kettes számrendszerből tízesbe Szorozzuk meg a legmagasabb helyiértéken levő számjegyet kettővel; Adjuk hozzá a következő (egyel kisebb helyiértéken levő) számjegy értékét; Amennyiben az éppen hozzáadott számjegy nem a legkisebb (egyes) helyiértékű számjegy volt, akkor az eredményt szorozzuk meg kettővel, és folytassuk a műveletet az előző ponttal, különben megkaptuk az eredményt.
Számok írásmódja Fixpontos Lebegőpontos a-m,a-m+1,…a-1,a0,a1,a2,…an (pl:5123,896) Kisebb, vagy kevesebb számjegyből álló számok írásakor alkalmazzuk. Lebegőpontos a*rp (a:mantissza, p:karakterisztika-hatványkitevő, r:radix-a számrendszer alapszáma pl:-654.187*107) Normalizált(Olyan hatványkitevős alakra hozzuk a számokat, amelyben az egészrész 0 értékű, vagy csak az egyes helyiértéken található értékes számjegy pl:(0,1101011*24)2
Műveletek kettes számrendszerben fixpontos számokkal Összeadás. A legalapvetőbb művelet, mint minden helyiértékes számrendszerben, itt is helyiértékenként történik. A műveletvégzés során keletkezhet átvitel, amelyet a processzor a carry bit egybe billentésével jelez.
Műveletek kettes számrendszerben Összeadás Minden jegy 0: az eredmény 0, és nincs átvitel (0+0=0). Egy egyes jegy van: az eredmény 1, és nincs átvitel (0+1=1+0=1). Két egyes van: az eredmény 0, és van átvitel (1+1=10). Három egyes van: az eredmény 1, és van átvitel (1+1+1=11). + 1 0*
Műveletek kettes számrendszerben fixpontos számokkal Kivonás. Visszavezethető az összeadásra, ha a negatív számok tárolására komplemenskódot (általában kettes) alkalmazunk. A komplementált negatív számot és az operandust össze kell adni a teljes tárolóhosszon (előjelbit is). A túlcsordulást figyelmen kívül hagyva kapjuk az eredményt. Ha az előjelbit egy, a kapott szám negatív, kettes komplemens alakban kapjuk meg, ezért vissza kell komplementálni.
Negatív számok ábrázolása Kettes komplemens alak Írjuk fel kettes számrendszerben, az ábrázolásban használt biteknek megfelelő számú számjeggyel a szám abszolút értékét. Fordítsuk meg a biteket: a 0 helyett írjunk 1-et, az 1 helyett pedig 0-át. Adjunk hozzá a kapott számhoz 1-et. Pl: 1=00000001 11111110+1 Kettes komplemens: 11111111
Műveletek kettes számrendszerben fixpontos számokkal Szorzás. A szorzás legegyszerűbben sorozatos összeadásokkal írható le. (Az eredmény az operandusok kétszerese, ezért a befogadó regiszternek kétszer olyan hosszúnak kell lennie, mint az operandusokat tartalmazóknak.) Osztás. Legegyszerűbben sorozatos kivonásokkal, úgynevezett visszaállító algoritmussal történik. Ha a kivonás eredménye negatív, vissza kell állítani a kivonás előtti értéket, majd az osztó eggyel jobbra léptetésével folytatni a sorozatos kivonást.
Műveletek kettes számrendszerben Szorzás Elvégzése egyszerű: Két dolog kell hozzá: a szorzótábla, és annak ismerete, hogy minden számrendszerben ha egy számot a számrendszer alapszámával szorzunk, az azt jelenti, hogy egy nullát kell a szám végére írni, vagyis minden helyiérték egyel nő 11 01 11 * 1010 (55*10) 11 01 11 0 00 00 0 + 0 00 000 1 00 01 00 110
Emlékeztető Lebegőpontos számábrázolás Lebegőpontos számábrázolási formánál a számok tárolási formája hatványkitevős alakban, többnyire nullára normalizálva történik. A számrendszer alapszáma rögzített, így annak tárolása nem szükséges, a számot egy számpár alakjában tárolja a gép. Az egyik a mantissza (fixpontos tört), a másik a karakterisztika (fixpontos egész). Mindkét szám tartalmazza az előjel bitet is.
Műveletek kettes számrendszerben lebegőpontos számokkal Összeadás, kivonás. Ha a karakterisztikák megegyeznek, az eredmény karakterisztikája közös lesz, míg a mantisszákat össze kell adni és az eredményt normalizálni. Ha a karakterisztika nem egyezik meg, a kisebb kitevőjű szám mantisszáját jobbra léptetve a karakterisztikát azonos értékre kell hozni. Szorzás, osztás. A mantisszákat fixpontos számként kell szorozni, illetve osztani, míg a karakterisztikák összeadásra, vagy kivonásra kerülnek.
Logikai műveletek A logikai műveletek bitenként hajtódnak végre. Ezen elemi logikai műveletek általában a logikai AND (ÉS), OR (VAGY), XOR (kizáró VAGY) és a NOT (tagadás). A NOT (NEM) műveletet a tárolóhelyek tartalmának ellenkező értékre állítására lehet használni, az operandus minden bitjét az ellenkezőjére állítja. Az OR (VAGY) művelet két tárolóhely tartalom egyesítésére szolgál, az eredmény ott lesz 1-es, ahol valamelyik bit , vagy mindkettő 1-es volt. Az AND (ÉS) művelettel lehet maszkolni egy tárolóhely tetszőleges részét, azaz bitenként lehet kezelni a két operandust.
Léptető és forgató utasítások Léptető (SHIFT) utasítások a balra vagy jobbra léptetés, ahol a bit sorozat egy helyiértéket balra, vagy jobbra lép. A belépő bit 0, míg a kilépő bit az átvitel bit be íródik. Forgatásnál (ROTATE) a kilépő bit íródik be a belépő bit helyére a bit sorozatban és a léptetéshez hasonlóan az átvitel bitben is megjelenik.
Bitműveletek A bitműveletek egyes processzorok esetében külön műveleteket jelentenek, melyekkel az operandusok egyes bitjeit állíthatjuk be a megfelelő értékre, vagy egyszerűen csak ellenőrizhetjük azok állapotát. A külön bitművelettel nem rendelkező processzoroknál a bitműveletek aritmetikai és léptető, illetve forgató utasításokkal végezhetők el, mely utóbbiak a bitműveletek csoportjához sorolhatók.
Vezérlő utasítások A program futását vezérlő utasítások. Általában a veremtárolót használják, ahová a vezérlés átadása előtti (visszatérési) címet a proceszor elmenti. A verem tetejét az SP (Stack Pointer - Veremmutató regiszter. A veremtároló legfelső elemét jelöli ki.) mutatja.
Vezérlésátadó utasítások Feltétel nélküli Feltétel nélküli ugrásnál az utasításban szereplő címmel tölti fel a processzor az utasításszámláló regiszter tartalmát, amely a következő utasítás címe lesz és a program innen folytatódik. Feltételes vezérlésátadó utasítások Feltételes ugró utasításnál a műveleti jelrész által előírt feltétel teljesülése esetén adódik át a vezérlés az operandusban megadott címre és a program az ott található utasítással folytatódik. Ha az operációs kód által előírt feltétel nem teljesül, a program a soron következő utasítással folytatódik.
Szubrutinhívó utasítások Szubrutin (alprogram) hívó utasítások. Ezen utasítások feltétel nélküli vezérlésátadó utasítások, de megőrzik annak a helynek a címét, ahonnan a vezérlésátadás történt, így az alprogram végrehajtódása után a vezérlés visszatér az eltárolt címre és a program onnan folytatódik. Egyes processzorok esetében lehetőség van feltételes szubrutinhívó utasítások végrehajtására is.
Ciklusszervező utasítások Iteráció (hurok, vagy ciklus) utasítás. Az utasítás meghatározott programutasítások végrehajtását segíti elő az utasításban szereplő feltétel teljesüléséig.
Működést szabályozó utasítások A működést szabályozó utasítások a megszakításokra vonatkozó tiltás és engedélyezés (enable/inhibit interrupt-megszakítás. IP ). Ezek segítségével a perifériák által kezdeményezett megszakítás kérelmeket lehet tiltani, illetve engedélyezni. Ide tartozik a processzor futását felfüggesztő utasítás (HALT-gépi ciklus), amelyet csak egy speciális megszakítás-kérelemmel lehet feloldani (RESET-A processzor egyik bemenete, segítségével a CPU újraindítható).
Processzor állapotok, gépi ciklus Minden tárhoz fordulás egy alapidőtartamot igényel, ennek neve gépi ciklus. A gépi ciklusok fázisokból épülnek fel, amely alatt valamely részművelet végrehajtására kerül sor. Egy-egy fázis tovább bontható órajel-időtartamokra.
Normál gépi ciklus a program végrehajtása során: utasításnak, illetve adatnak a memóriából történő kiolvasására, adatnak a memóriába történő beírására, vagy input portról történő bevitelnek, illetve output portra történő kivitelnek a végrehajtására alkalmas.
HALT típusú gépi ciklus HALT állapotban a processzor nem hajt végre utasításokat, várakozik. A ciklust erre a célra szolgáló utasítással lehet előidézni (HLT), elfogadását letiltani nem lehet, határozatlan ideig fennállhat. Az állapot feloldásához külső beavatkozás szükséges: külső HOLD igény jelzése - az igény elfogadása a HALT állapot ideiglenes felfüggesztését eredményezi, megszűnése után a processzor ismét HALT-ba kerül. a processzor resetelése, - a PC nullázódik és az utasítások végrehajtása elkezdődik a 0. memóriacímtől. külső megszakításkérés - feltétel, hogy a megszakításkérő bemenet engedélyezve legyen, erről a HALT utasítás előtt kell gondoskodni.
Műveleti vezérlés az utasítás-végrehajtás lépései további elemi műveletek sorozatára bonthatók fel Ezek a műveletek adatútvonalak kapuzását, bizonyos állapotok beállítását eredményezik. Az operációs kód alapján történő vezérelhetőség csak lépésenkénti vezérlési lehetőség, valamint az adatutak kapuzásának (engedélyezés/tiltás) lehetősége alapján valósítható meg.
Az elemi műveletek végzése Hardver mód (huzalozott) Az elemi tevékenységek sorrendjének vezérlését bonyolult sorrendi, kombinációs áramkörrel oldják meg. Ez a szükséges sorrendben adja ki az egyes kapuk működtetésére szolgáló vezérlő jeleket, amely gyors működést eredményez, de költséges megoldás. Egyszerűbben kezelhető a programozható logikával történő megvalósítás. Ezek az áramkörök programozható ÉS és VAGY kapukból állnak. Gyors működés érhető el. (RISK)
Szoftver mód (mikroprogramozott) A processzorok műveleti vezérlése kétféle struktúrában oldható meg. horizontális struktúra vertikális struktúra. A különbség az utasítás-feldolgozás párhuzamosítási fokában mérhető, amely vonatkozik: az utasítás és adatelőkészítésre az operációs kód kiértékelésére a művelet végrehajtására
Mikroutasítások A mikroutasítások szerkezetileg hasonlítanak a gépi kódú utasításokhoz. Két részből állnak: a következõ mikroutasítás címe a tárolt mikroprogramban, a vezérlési mező, amely meghatározza az engedélyezett vezérlési pontokat. Ezen vezérlési pontok engedélyezése teszi lehetővé elemi műveletek végzését. Egy utasítás elemi lépéseinek vezérlése sok ilyen pont meghatározott sorrendben történő vezérlését jelenti. A mikrovezérlő egy mikrocímregisztert is tartalmaz a következő mikroutasítás címének nyilvántartására.
Horizontális-Vertikális mikroutasítás Horizontális mikroutasítás esetében a vezérlési mező minden bitje egy vezérlési pont engedélyezését, vagy állapotjelző beállítását végzi. Vertikális vezérlési struktúrájú mikroutasításnál egy operációs kód és az operandus címe található, ezen formátum csak kis számú elemi műveletet vezérel, így a gépi kódú utasítás végrehajtása több mikroutasítás végrehajtását jelenti. A mikroprogram tartalmazhat mikroeljárást, mikroszubrutint, hasonlóan a makroszintű utasításokhoz. A működés gyorsítására a mikroutasítások a vezérlőegység regisztertárainak tartalmával dolgoznak.
Művelet-végrehajtás gyorsítása Az órajel frekvencia növelése Párhuzamosítás, átlapolás (pipelining) Az átlapolásos technika alapja a processzor folyamatainak részfeladatokra való osztása. Ezen folyamatok alatt az utasítások és műveletek elvégzésének lépéseit kell érteni. A lényeg, hogy a folyamatot olyan lépésekre kell bontani, amelyek önálló egységet képeznek, egy-egy külön erőforráshoz kapcsolódnak. Így a felszabadult erőforrást egy másik folyamat rögtön igénybe tudja venni. Egy folyamat elvégzésének ideje nem változik, de ugyanazon idő alatt több folyamat fut le. Ez az átlapolásos (pipelining, adatcsatornás) feldolgozás.
Pipelining ütemezés Aszinkron módszer Szinkron módszer Aszinkron esetben a feldolgozás folyamatos, amit úgy valósítanak meg, hogy az egymást követő fokozatok jelzik, amikor elkészültek egy feladat végrehajtásával és képesek egy újabb feladat fogadására. Szinkron módszer Szinkron esetben órajel hatására, azonos időben kezdenek hozzá a fokozatok a feladatok végrehajtásához, az ütemet a legtöbb időt igénylő egység szabja meg.
Utasítások várakoztatása A várakoztatás lényegében leválasztja a függőségek ellenőrzését az utasítások kibocsátásától. A processzor kibocsátáskor mindössze azt vizsgálja, hogy triviális hardvererőforrás-korlátok nem akadályozzák-e meg a kibocsátási ablakban lévő utasítások kibocsátását. A várakoztató pufferben lévő utasítások adatfüggő-mentességét a processzor az utasítás-kiküldés (kiküldés alatt a függőségmentes mikro-utasításoknak a várakoztató pufferből a végrehajtó egységekbe való továbbítását értjük) során vizsgálja meg, és az adatfüggőségektől mentes utasításokat továbbítja a Végrehajtó-Egysége felé.