Gábor Dénes Főiskola Győr
Mikroszámítógépek Előadás vázlat 102 2004/2005 tanév 4. szemeszter Készítette: Markó Imre 2006
A PROCESSZOR
Készítette: Markó Imre 2006
A processzorok jellemzése A
processzor felépítése A processzorok üzemmódjai Regiszterkészlet Utasításfelépítés, utasításkészlet Utasításvégrehajtás Memóriakezelés Megszakítások, kivételek
Készítette: Markó Imre 2006
14:33:29
A processzor részei, kapcsolatuk A legfontosabb architektúrális építőelemek: vezérlőegység (CU = Control Unit) aritmetikai (logikai) egység (ALU = Arithmetical and Logical Unit), regisztertárolók, sínillesztő egység (BIU = Bus Interface Unit), címszámító és védelmi egység (AU = Adress Unit), belső gyorsító tár (L1 cache), az előző részegységek kommunikációját biztosító eszközök (mikroszámítógépeknél a belső sínrendszer). Készítette: Markó Imre 2006
14:33:29
A processzor vázlatos felépítése Belső sínrendszer
AU
ALU
CU
Külső sínrendszer
BIU
Címszámítás Vezérlés regiszterei regiszterei MűveletvégrehajL1 cache tás regiszterei Készítette: Markó Imre 2006
14:33:29
A processzor üzemmódok A processzorok különböző üzemmódjaira, állapotaik megkülönböztetésére lényegében: védelmi szempontból, a programfolyamatok biztonságos működtetése miatt, az operációs rendszer és a felhasználói programok működtetésének elkülönítése miatt (például hibakezelésnél), a korábbi processzorokkal való bináris programkompatibilitás megtartása miatt van szükség.
Készítette: Markó Imre 2006
14:33:29
A processzor üzemmódok A Pentium processzorok négy üzemmódjai: Valós Védett Védett valós Rendszermenedzselő (SMM) üzemmód
Készítette: Markó Imre 2006
14:33:30
Regiszterkészlet A processzor regisztereinek csoportosítása: Rendszerregiszterek Intruction Register Program Counter Speciális célú regiszterek Flag Register Stack Pointer Általános célú regiszterek Akkumulátor regiszter Szegmensregiszterek Készítette: Markó Imre 2006
14:33:30
Regiszterkészlet A processzor regisztereinek csoportosítása: Címző regiszterek EBP, ESP, ESI, EDX Szegmensregiszterek CS, DS, ES, SS, FE, GS Utasítászámláló regiszter EIP Állapotjelző regiszter EFLAGS Általános célú regiszterek EAX, EBX, ECX, EDX
Készítette: Markó Imre 2006
14:33:30
Utasításkészlet, utasításszerkezet Utasításszerkezet alatt az elemi szintű (gépi kódú), a processzor által értelmezhető utasítások felépítését értjük. Ez határozza meg a processzor számára, hogy a gépi utasítások egyes részeit hogyan értelmezze. Részei: műveleti kód, operandusok, kiegészítő (módosító) rész. Egy processzor utasításkészlete alatt azoknak az elemi szintű gépi kódú utasításoknak az összességét értjük, melyek végrehajtására a processzor a legalsó, hardver szinten képes. Ez az a szint, amelyre a fordítóprogram a különböző programnyelveken megírt programokat lefordítja. Készítette: Markó Imre 2006
14:33:30
Utasításkészlet Az utasításkészlet jóságára nem lehet egzakt megfogalmazást tenni, néhány szempont: Minden utasítás azonos módon működjön. Az eszközöket azonos módon használják. Az utasítások egyes részei mindig ugyanúgy kerüljenek feldolgozás alá. Minden utasítás bármely címzési módot használhassa. Többféle megoldhatóság esetén kivitelezhető legyen mindegyik. Az utasítások egyszerűek legyenek. Készítette: Markó Imre 2006
14:33:30
Utasításszerkezet Az utasításszerkezet eltérő az különböző processzoroknál. Megszabja, hogy a CPU az utasítás mely részét hogyan tudja értelmezni. Az utasítások rendszerint három részből állnak: Műveleti jelrész az elvégzendő feladatot határozza meg. Címrész az operandusok memóriabeli címét adja meg. Kiegészítő vagy módosító rész a műveleti jelrész vagy a címrész értelmezését módosíthatja. Műveleti jelrész
Mód. rész
Készítette: Markó Imre 2006
Címrész 14:33:30
Utasításszerkezet – II A program futása közben rendszerint a processzornak négy címre van szüksége: Az első operandus címére A második operandus címére Az eredmény címére Soronkövetkező utasítás címére Attól függően, hogy az utasítás címrésze hány címet tartalmaz, beszélhetünk négy-, három-, kettő-, egy- és nullcímes utasításokról.
Készítette: Markó Imre 2006
14:33:30
Utasításszerkezet – III A legbonyolultabb a 4-címes utasítás: Műveleti jelrész
1. operandus címe
2. operandus címe
Eredmény címe
Köv. utasítás címe
A 3 címes utasításszerkezethez be kell vezetni a programszámláló regisztert, ami a következő ut. címét tart. Műveleti 1. operandus 2. operandus Eredmény jelrész
címe
címe
címe
A 2 címes utasításszerkezet során az eredményt a 2. operandus helyén fogjuk tárolni. Műveleti jelrész
1. operandus címe
Készítette: Markó Imre 2006
2. operandus + eredmény címe 14:33:30
Utasításszerkezet – IV Az 1-címes utasításhoz be kell vezetnünk az akkumulátor regisztert, amely a 2. operandus címét tartalmazza.Az eredmény is ide kerül. Műveleti jelrész
1. operandus címe
A veremtároló használatával elhagyható az operandus címe, így kapjuk az ún. 0-címes utasításokat. Műveleti jelrész
Készítette: Markó Imre 2006
14:33:30
Adatátviteli utasítások Az adatátviteli utasításokkal különböző tárolók között lehet mozgatni, másolni az adatokat memória, regiszter → memória, regiszter (MOVE) memória → háttértárolók, perifériák (IN, OUT) regiszter, memória → verem (POP, PUSH).
Készítette: Markó Imre 2006
14:33:30
Műveleti utasítások aritmetikai utasítások (ADD, SUB, MUL, DIV stb.), logikai utasítások (AND, OR, XOR stb.), bitléptető/forgató utasítások (SLL, SRL stb.), bitműveletek, karakterlánc (string) műveletek
(CMPB stb.), multimédiás és 3D grafikus műveletek (PADD, PADDS stb.).
Készítette: Markó Imre 2006
14:33:30
Vezérlő utasítások Ezekkel az utasításokkal egyrészt a program soros utasítás-végrehajtását lehet vezérelni, másrészt a processzor működését szabályozni. Ezek: feltétel nélküli vezérlésátadás (JMP), feltételes vezérlésátadás (pl. JNE), szubrutin hívás (CALL), visszatérés szubrutinból (RET), ciklus képző utasítás (LOOP).
A processzor működését szabályozó utasítások közé tartoznak a különböző programvezérelt megszakítást kérő utasítások (pl. INT). Készítette: Markó Imre 2006
14:33:30
A processzor utasításfeldolgozása A processzor teljesítményében meghatározó jelentőségű a művelet-végrehajtó egységek száma és működése. Az ALU működését és „képességeit” a műveletekben értelmezett adattípusok alapján értékelhetjük. Ezek: fixpontos számok, lebegőpontos számok, binárisan kódolt decimális (BCD) számok, multimédiás (MMX) adatok, karakteres mezők, bitmezők Készítette: Markó Imre 2006
14:33:31
Tárolókezelés Mivel az utasítások és az operandusok a tárolóban helyezkednek el, ezért kiemelt fontosságú annak kezelési módja. A tároló szervezéséből adódóan címzéssel érhető el. Annak érdekében, hogy a különböző feladatokat egyszerűen lehessen megoldani, különböző tároló-elérési módszereket dolgoztak ki. Az adatok fizikai címét rendszerint nem tartalmazza az utasításszerkezet, tehát címmódosítást kell elvégezni
Készítette: Markó Imre 2006
14:33:31
Tárolókezelés – II A cím módosításának okai: A címrész rendszerint nem elegendő hosszúságú Adatsorozat elemein ugyanazokat a műveleteket kell végrehajtani Ciklikus műveletsorozatot kell végrehajtani Az elkészült programhordozhatósága Lehetőségei: Közvetlen Közvetett Literális Indexelés Készítette: Markó Imre 2006
14:33:31
Közvetlen címzés A közvetlen címzés esetén a címrészben tárolóhelycím található, amely mutathat a memóriaára, vagy valamelyik regiszterre. Két típúsa van: Abszolút címzés esetében az utasítás címrészében valóban az operandus fizikai címe található. Használata nem mindig előnyös, mivel így az adatoknak fix helyen kell lenniük. Memóriacímekhez 16-32, míg a regiszterekhez 3-6 bit szélességű címekre van szükség. Készítette: Markó Imre 2006
14:33:31
Közvetlen címzés A relatív címzés esetén a címrész egy alapcímhez viszonyított eltolást tartalmaz. Alapcím lehet: Egy kijelölt regiszterben, a bázisregiszterben eltárolt fizikai memóriacím. A címek rövidítése érdekében a memóriát több kisebb részre osztjuk, szegmentáljuk. A bázisregiszter ezek kezdőcímét tartalmazza. A program kezdetének a címe nagyon fontos, mert így a programok memórián belül áthelyezhetők. Az utasítás tárolóbeli helye, itt az alapcím a PC. Csak egy szűkebb környezet elérésére nyújt lehetőséget. Készítette: Markó Imre 2006
14:33:31
Közvetlen címzési módok Adatterület
Program terület LDA
a
1999 2000 2001
2000
Program terület
BR 4096
3800
Adatterület 4096
LDA
r
200
Készítette: Markó Imre 2006
+
4296
3800
14:33:31
Közvetett címzés A közvetett vagy indirekt címzés esetén az operandus memóriacímét vagy annak egy összetevőjét adjuk meg az utasításban. A címmezőben az a memóriacím található, ahol az operandus címe került tárolásra.
Adatterület Program terület LDA
i
1600
2800
2800
3800
1600
Készítette: Markó Imre 2006
14:33:31
Közvetlen adatcímzés A közvetlen adatcímzést álcímzésnek és literális címzésnek is nevezik. Akkor beszélünk ilyen címzésről, ha maga az operandus található az utasítás címrészében. Az operandusnak bele kell férni a címrész szélességébe.
Program terület LDA
#
1600
Akkumulátor 1600
Készítette: Markó Imre 2006
14:33:31
Indexelt címzés Adatsorozatokkal való munka során alkalmazott címzési mód. Az utasítás címrészében az operandus helyének az alapcíme található. Ehhez adjuk hozzá az indexregiszterben lévő értéket és megkapjuk a fizikai címet. Ennek növelése, csökkentése automatikusan megoldható.
Program terület
IX
5
Adatterület 3000
LDA
ix
3000
Készítette: Markó Imre 2006
+
3005
3800
14:33:31
Az aritmetikai egység
Készítette: Markó Imre 2006
Aritmetikai egység Az legfontosabb műveletcsoport az adat-műveletek. Az ALU feladatai: Aritmetikai műveletek elvégzése (+, -, *, /, ^) rendszerint kettes számrendszerben Logikai műveletek (ÉS, VAGY, NEM stb.) végrehajtása Bitforgatás és léptetés
Készítette: Markó Imre 2006
14:33:31
Számok ábrázolása A számábrázoláshoz megkülönböztetnünk:
az
alábbiakat
kell
Egészszámok – törtszámok Pozitív számok – negatív számok Fixpontos számábrázolás
±a−m a−m1 a−m2 ... a−1 a 0 a 1 a 2 .... a n Az elválasztójeltől balra az egész-, jobbra a törtrész található. Ezt az ábrázolásmódot kis számok esetén alkalmazzuk. Készítette: Markó Imre 2006
14:33:31
Számok ábrázolása Lebegőpontos számábrázolás nagy és kis számok rövid leírásához használható hatékonyan.
±a⋅r
±p
, ahol az 'a' mantissza, a 'p' a karakterisztika, az 'r' pedig a radix.
Normalizálás Az egységes számformátumok érdekében alkalmazzuk. Általában nullára, ritkábban egyesekre normalizálunk. 0,45298 * 10-5 Készítette: Markó Imre 2006
4,5298 * 10-4 14:33:32
Számábrázolási problémák A számítógépes számfeldolgozásnál folyamatos korlát a rendelkezésre álló tárolási szélesség. Hibák: Túlcsordulásról (overflow) beszélünk, ha a művelet eredménye nem fér el a tárolóban. Alulcsordulás esetén az eredmény olyan kicsi, hogy nem ábrázolható. Előfordulhat, hogy a kapott eredmény nem tartozik a számhalmazba. A lebegőpontos számok esetében hét számtartományt különböztethetünk meg. Készítette: Markó Imre 2006
14:33:32
Lebegőpontos számtartományok -0.999*10+99>
nagy abszolút értékű negatív számok
-0.999*10+99 – 0.100*10-99 negatív számok tartománya -0.100*10-99<
kis abszolút értékű negatív számok
0 +0.100*10-99>
kis pozitív számok
+0.100*10-99 – 0.999*10+99 pozitív számok tartománya +0.999*10+99< nagy pozitív számok tartománya Készítette: Markó Imre 2006
14:33:32
Numerikus adatok tárolása
Készítette: Markó Imre 2006
Fixpontos számábrázolás A szám kettes számrendszerbeli együtthatóit kell eltárolni a tárolókban. A kettedes pont célszerűségi okokból vagy az MSB (Most Significant Bit) előtt, vagy az LSB (Last Significant Bit) után helyezkedik el (innen a fixpontos elnevezés). Előbbi esetben tört, az utóbbiban egész számokat ábrázolhatunk. Egész számok tartománya: 0 <= A < 2n Törtszámok tartománya: 2-n <= A < 1 n
n-1 n-2 ...
...
...
...
...
...
...
...
...
3
2
1
0
1 0 0 1 0 1 1 0 1 1 0 0 1 1 0 0 Készítette: Markó Imre 2006
14:33:32
Negatív fixpontos ábrázolás A negatív számok jelölésére négy különböző módszert használhatunk: Előjeles, abszolút értékes 1-es komplemens 2-es komplemens 2k-1 többletes, ahol a k a karakterisztika tárolási bitjeinek száma Leggyakrabban ez utóbbit használják kiegészítve az előjeles, abszolút értékes ábrázolással.
Készítette: Markó Imre 2006
14:33:32
Negatív fixpontos ábrázolás Az előjeles, abszolút értékes ábrázolásnál a legfelső helyiértékű biten jelezzük az előjelet. Ha ez '1', akkor a szám negatív, ha '0', akkor pozitív. A többi helyiértéken tároljuk a szám abszolút értékét. 1
Tárolandó szám abszolút értéke Előjelbitek
Az egyes komplemens tárolás során az n-1 bites tárolási helyen az előjeltelen tárolandó számértéket az adott tároló hosszon ábrázolható legnagyobb számra, 2n-1-1-re kiegészítő számsorozatot tároljuk. Készítette: Markó Imre 2006
14:33:32
Negatív fixpontos ábrázolás A kettes komplemenskódú tárolás során az előjeltelen számot adott tárolóhosszon ábrázolható legnagyobb számnál 1-gyel nagyobb számra (2n-1) kiegészítő számot tároljuk. A 2n-1 többletes kódú tárolásnál a tárolandó számértékhez az adott tároló hosszon ábrázolható számnál 1gyel nagyobb számnak megfelelő értéket adunk hozzá annak érdekében, hogy pozitív számot tárolhassunk. Formailag megegyezik a 2-es komplemenssel, de az előjelbit itt mindig nulla.
Készítette: Markó Imre 2006
14:33:32
Negatív fixpontos ábrázolás 1 0 0 1 0 1 1 0
Előjeles, abszolút értékes
1 0 1 0 1 0 0 1
1-es komplemens
1 0 1 0 1 0 1 0
2-es komplemens
0 0 1 0 1 0 1 0
2n-1 többletes kód
Készítette: Markó Imre 2006
14:33:32
Lebegőpontos számábrázolás A szám kettes számrendszerbeli együtthatóit kell eltárolni a tárolókban. A kettedes pont célszerűségi okokból vagy az MSB előtt, vagy az LSB után helyezkedik el (innen a fixpontos elnevezés). Előbbi esetben tört, az utóbbiban egész számokat ábrázolhatunk. Egész számok tartománya: 0 <= A < 2n Törtszámok tartománya: 2-n <= A < 1
1 Karakterisztika 1 Előjelbitek
Készítette: Markó Imre 2006
Mantissza 14:33:32
ANSI/IEEE 754 szabvány A szabványban az alábbi módon definiálták a számok formái megjelenését: s
±pe
A=−1 ⋅1.a ⋅2 s a p e
a mantissza előjele (0, ha pozitív) egyesekre normalizált mantissza törtrésze (szignifikandus) a karakterisztika eredeti értéke eltolás értéke, nagysága 2m-1-1, ahol m= 8, 11, 15. Készítette: Markó Imre 2006
14:33:32
ANSI/IEEE 754 szabvány A szabvány az alábbi formátumokat határozza meg: Egyszeres pontosság (single precision), amely 32
bites Dupla pontosság (double precision), amely 64 bites Kiterjesztett pontosság (extended precision), amely
80 bit hosszúságú Négyszeres pontosság (quadrupled precision), amely
128 bit hosszúságú Készítette: Markó Imre 2006
14:33:33
ANSI/IEEE 754 szabvány A tárolt adatformák mindegyike azonos szerkezetű és három részből áll: A szignifikandus előjelbitje, amely 0 pozitív számoknál. A karakterisztika (8, 11 vagy 15 bit), amely 2m-1-1-es többletű formájú. A legkisebb és a legnagyobb érték speciális. A szignifikandus (23, 52, 64 vagy 112 bit) egyesekre normalizált. Készítette: Markó Imre 2006
14:33:33
ANSI/IEEE 754 szabvány A túlcsordulás és az alulcsordulás kezelésére az alábbi adatformátumokat határozza meg: normalizált adatformátum denormalizált adatformátum nulla számérték végtelen számérték nem meghatározható számérték, ahol különbséget tesz "jelző nem szám" és "csendes nem szám" érték között. A "jelző nem szám" lebegőpontos operandusként kivételt okoz. Készítette: Markó Imre 2006
14:33:33
ANSI/IEEE 754 szabvány Normalizált
Szignifikandus Karakterisztika E E tetsz. tetsz.kitevő kitevő tetszőleges számérték
Denormalizált
Karakterisztika 0 kitevő E E tetsz.
Szignifikandus nem 0 számérték
Nulla
Karakterisztika 0 kitevő E E tetsz.
Szignifikandus 0
Végtelen
Karakterisztika E E 111...111 tetsz. kitevő
Szignifikandus 0
Nem-szám
Karakterisztika E 111...111 E tetsz. kitevő
Szignifikandus nem 0 számérték
Készítette: Markó Imre 2006
14:33:33
ANSI/IEEE 754 szabvány Jellemző
Egyszeres pontosság
Előjelbit [bit] 1 Karakterisztika [bit] 8 Mantissza [bit] 23 Teljes hossz [bit] 32 Kitevő többlet 127 Kitevő tartománya -126-127 Legkisebb -126 2 normalizált szám Legnagyobb +128 2 normalizált szám Decimékis számok -38 +38 10 -10 tartománya Legkisebb -45 10 Készítette:szám Markó Imre 2006 denormalizált
Kiterjesztett és Dupla pontosság négyszeres pontosság
1 11 52 64 1023 -1022-1023 2-1022
1 15 64/112 80/128 16383 -16382-+16383 2-16382
2+1024
2+16384
10-308-10+308
10-4932-10+4932
10-324
10-4935
14:33:33
BCD kódolás Mivel csak tíz számjegyet különböztetünk meg, ezért ehhez elegendő négy bit is. Ha egy decimális számot 4 bitre kiegészített bináris megfelelőjével tárolunk, akkor BCD (Binary Coded Decimal) kódolásról beszélünk. Ezzel a módszerrel két számot tárolhatunk egy bájton.
-6969 0 0 0 0 0 1 1 0 1 0 0 1 0 1 1 0
Készítette: Markó Imre 2006
1 0 0 1 1 10 1
14:33:33
Karakterek ábrázolása A karakterek ábrázolásának lehetőségei: ASCII Latin1 Kódlapok Unicode
Készítette: Markó Imre 2006
14:33:33
Egyéb tárolási formák Eddigi kódolásokban a kódolt jelsorozatból nem lehetett meghatározni annak tartalmát. Vannak olyan tárolási formátumok, ahol kiegészítő információkat is tárolnak az adatok mellett. Ez bonyolult adatstruktúrák közvetlen, vagy alacsony szintű kezelését teszik lehetővé. A jelölt adattárolás (tagged storage) jellemzője hogy a tárolt adat kiegészül olyan információkkal, amelyek a felhasználási lehetőséget határozzák meg. Ezek hibafeltárási lehetőségeket nyújtanak számunkra.
Készítette: Markó Imre 2006
14:33:33
Egyéb tárolási formák Deszkriptoros tárolási forma egyszerű adatstruktúrák kezelését teszi lehetővé kiegészítő információk (hozzáférési jogok, felhasználói cél stb.) hozzáadásával. A deszkriptorban tárolt információ egy része közvetlenül hardver kezelésű, másik része viszont szoftveres úton dolgozható fel. Összetett struktúra (object oriented, capability addressing schemes) alkalmazása a szoftverszintű adatkezelést segíti elő.
Készítette: Markó Imre 2006
14:33:33
Műveletvégzés
Készítette: Markó Imre 2006
Műveletek típusai Alapvetően a műveleteket aritmetikai és logikai csoportokba sorolhatjuk. Más osztályzás során az adatok tárolási formáját vesszük figyelembe: Fixpontos Lebegőpontos, BCD Speciális (3D, vektoros, MMX) adatok
Készítette: Markó Imre 2006
14:33:33
Fixpontos aritmetikai műveletek Összeadás ugyanúgy végezzük, mint decimális számokkal. Az átvitelt a következő helyiértékben figyelembe vesszük. 110100010101 + 001101010111 1000001101100 Kivonás visszavezethető negatív szám hozzáadására. Szorzás visszavezethető sorozatos összeadásokra, vagy 1bites eltolásokra. Osztás visszavezethető sorozatos kivonásokra, vagy 1-bites eltolásokra. Készítette: Markó Imre 2006
14:33:33
Fixpontos aritmetikai műveletek Kivonás 10110011 - 110011001 1100011010
179 - 409 -230
10110011 + 001100111 100011010
1100011010 + 0011100101 0011100110 110111100 - 101101111 1001101 Készítette: Markó Imre 2006
444 - 367 77
794 230
110111100 + 010010001 1001001101 14:33:34
Lebegőpontos műveletek A lebegőpontos műveleteket visszavezethetjük fixpontos számokra, így végezzük a műveleteket is. Szabályok: Összeadásnál és kivonásnál ha az operandusok karakterisztikái nem egyeznek meg, akkor a mantissza jobbra léptetésével és a karakterisztika egyidejű balra léptetésével tudjuk megoldani. Osztásnál és szorzásnál a mantisszákat fixpontos számként kell osztani, illetve szorozni, a karakterisztikák pedig fixpontos számként összeadásra és kivonásra kerülnek.
Készítette: Markó Imre 2006
14:33:34
Logikai műveletek A logikai műveletekhez a BOOL-algebrát használjuk. Az ALU ezeket közvetlenül képes elvégezni, ezért vannak ilyen műveletei utasítások. Három alapművelet létezik, amelyből az összes többi származtatható. NEM ÉS VAGY A 0 1
Y=A 1 0
B 0 0 1 1
Készítette: Markó Imre 2006
A 0 1 0 1
Y=A · B 0 0 0 1
B 0 0 1 1
A 0 1 0 1
Y=A · B 0 0 0 1
14:33:34
Aritmetikai és logikai egység felépítése
Készítette: Markó Imre 2006
Aritmetikai egység Az ALU fő részegységei: Összeadó egység, két operandus összeadására. Léptető áramkörök, regisztertartalmat léptetik jobbra vagy balra léptetik, vagyis osztják és szorozzák. Logikai áramkörök, a logikai műveletvégzéshez. Regiszterek, az adatok ideiglenes tárolására. Ezek lehetnek csak az ALU által használhatók, de lehetnek általános processzorregiszterek is. Az aritmetikai műveletek eredménye néhány FLAG-et is beállít. Készítette: Markó Imre 2006
14:33:34
Aritmetikai egység A logikai műveletek közül az alapműveleteket közvetlenül képes megoldani. A műveletek az alábbi FALG-ekre vannak hatással: Átvitel (carry) akkor '1', ha a legmagasabb helyiértéken átvitel történt. Nulla (zero) akkor '1', ha az eredmény nulla. Előjel (sign) akkor '1', ha az eredmény negatív. Túlcsordulás (overflow) akkor '1', ha az eredmény nagyobb, mint a tárolható legnagyobb szám.
Készítette: Markó Imre 2006
14:33:34
Összeadó áramkörök Az aritmetikai műveleteket összeadásokra vezetjük vissza. Ennek megfelelően az ezeket végrehajtó egység is összeadó áramkör lesz. Teljes összeadó Félösszeadó
S
S + + C
& C
& A
D
B
Készítette: Markó Imre 2006
+
1 & A
B
14:33:34
1-bites ALU felépítése S
1 L Logikai egység
S Aritmetikai egység
1
& +
&
&
&
Ci
Ci-1
&
Ci
+
1
Ci-1
& 1
&
& V01
A
V01
B
V03 V02
Készítette: Markó Imre 2006
V02 &
V04
V03 &
&
V04 A B
&
Vezérlő logika V0
V1
A
B14:33:34
Az ALU felépítése Akkumulátor
Szorzóregiszter
Adatregiszter
Párhuzamos összeadó Kimeneti sín
Bemeneti sín
+ * /
Vezérlő egység Készítette: Markó Imre 2006
14:33:34
Műveletek végrehajtása
Készítette: Markó Imre 2006
Műveletvégrehajtás lépései A processzor utasításokat hajt végre. Az utasításokkal a feldolgozás ideje alatt más és más egység végez műveleteket. A megértés érdekében bontsuk lépésekre az utasításvégrehajtás folyamatát. Utasításelékészítés, lehívás (FETCH) A processzor az utasításszámláló regiszter tartalmát átviszi a memória címregiszterébe, vagy a címsínt vezérlő cím pufferébe. Ennek alapján kikeresi a tárból az utasítást, majd átviszi a vezérlő egység utasításregiszterébe.
Készítette: Markó Imre 2006
14:33:34
Műveletvégrehajtás lépései Utasításszámláló regiszter tartalmának növelése A PC tartalmát megnöveljük az éppen lehívott utasítás hosszának megfelelő értékkel. Így a PC a következő utasítás címét fogja tartalmazni. A PC a kezdeti értékét az operációs rendszertől kapja. Műveleti kód értelmezése Ezalatt megtörténik a műveleti jelrész értelmezése, valamint az operandusok pontos címének meghatározása.
Készítette: Markó Imre 2006
14:33:35
Műveletvégrehajtás lépései Operandusok előkészítése Az előző lépésben kidolgozott cím alapján kikeresi az operandusokat a memóriából és átviszi az utasítás által meghatározott helyre. Végrehajtás Ebben a fázisban megtörténik a kijelölt művelet végrehajtása az előkészített operandusokkal. Ha ugróutasítást hajtunk végre, akkor a PC tartalmát ebben a lépésben módosítanunk kell. Eredmény eltárolása Az eredményt eltároljuk az előírt helyre (ALU). Készítette: Markó Imre 2006
14:33:35
Soros végrehajtás folyamata Utasítás dekódolás
Utasítás lehívás
Végrehajtás címszámítás
Memória hozzáférés
Nulla?
Előjel
Készítette: Markó Imre 2006
A B
conc
ALU kim.
Adat mem.
LMD
MUX
IR
Reg. tár
MUX
Ut. tár
MUX
PC
Visszaírás
MUX
NPC
IMM
14:33:35
A vezérlő egység
Készítette: Markó Imre 2006
A vezérlő egység működése Az elemi lépéseknek a végrehajtása áramköri szinte még tovább bontható. A tényleges végrehajtáshoz adatútvonalak nyitása és zárása szükséges, a megfelelő időzítésű megvalósítását nevezzük műveleti vezérlésnek. Az adatútvonalak nyitása és zárása vezérlési pontokon keresztül, működtetésük vezérlővonalakon keresztül valósulnak meg. A kapuk nyitását és zárását modellezhetjük egy ÉS kapuval. Ennek az egyik bemenetére '1' kapcsolva a kimenetet a másik vonal határozza meg. Készítette: Markó Imre 2006
14:33:35
C3
PC
OP
C1
Műveleti vezérlés
A1
Összeadó Shiftelő Komplementáló
AC
CÍM
C2
A2
Címsín A3 C5
C5
C5 A4
C5 A6
A5 C5
Vezérlősín
MAR
Főtár
MDR
M1
PAR
Periféria vezérlés
PDR
P1 Adatsín
Készítette: Markó Imre 2006
M2 C5
M3 C5
C5 P2
C5 P3
14:33:35
C3
PC
OP
C1
Műveleti vezérlés
A1
Összeadó Shiftelő Komplementáló
AC
CÍM
C2
A2
Címsín A3 C5
C5
C5 A4
C5 A6
A5 C5
Vezérlősín
MAR
Főtár
MDR
M1
PAR
Periféria vezérlés
PDR
P1 Adatsín
Készítette: Markó Imre 2006
M2 C5
M3 C5
C5 P2
C5 P3
14:33:35
C3
PC
OP
C1
Műveleti vezérlés
A1
Összeadó Shiftelő Komplementáló
AC
CÍM
C2
A2
Címsín A3 C5
C5
C5 A4
C5 A6
A5 C5
Vezérlősín
MAR
Főtár
MDR
M1
PAR
Periféria vezérlés
PDR
P1 Adatsín
Készítette: Markó Imre 2006
M2 C5
M3 C5
C5 P2
C5 P3
14:33:35
C3
PC
OP
C1
Műveleti vezérlés
A1
Összeadó Shiftelő Komplementáló
AC
CÍM
C2
A2
Címsín A3 C5
C5
C5 A4
C5 A6
A5 C5
Vezérlősín
MAR
Főtár
MDR
M1
PAR
Periféria vezérlés
PDR
P1 Adatsín
Készítette: Markó Imre 2006
M2 C5
M3 C5
C5 P2
C5 P3
14:33:35
C3
PC
OP
C1
Műveleti vezérlés
A1
Összeadó Shiftelő Komplementáló
AC
CÍM
C2
A2
Címsín A3 C5
C5
C5 A4
C5 A6
A5 C5
Vezérlősín
MAR
Főtár
MDR
M1
PAR
Periféria vezérlés
PDR
P1 Adatsín
Készítette: Markó Imre 2006
M2 C5
M3 C5
C5 P2
C5 P3
14:33:36
A műveleti vezérlés megoldásai A műveleti vezérlést két, alapvetően eltérő módon valósíthatjuk meg: Huzalozott (hardver) műveleti vezérlés Ebben az esetben az utasítás feldolgozását jelentő elemi tevékenységek sorrendjének vezérlését bonyolult sorrendi hálózattal valósítják meg. Ez megfelelő sorrendben és időzítéssel adja ki a kapukat vezérlő jeleket. A megoldás nagyon gyors, de merev és költséges megoldás. A vezérlést PLA-val oldják meg, amely ÉS és VAGY kapuk sorozata. Ez a megoldás célgépekben használatos, ahol fontos a nagyon gyors működés. Készítette: Markó Imre 2006
14:33:36
Huzalozott mikroprogramozás Címsín PC Prog. mem. cím
MŰV.
Program tároló
PLA
C1 Címsín
Adat mem. cím
Adattároló
ALU Adatsín
Készítette: Markó Imre 2006
14:33:36
A műveleti vezérlés megoldásai Mikroprogramozott (szoftver) műveleti vezérlés Ebben az esetben az elemi tevékenységek sorrendjét egy tárolt program utasításai vezérlik. A program utasításai a mikroutasítások, amelyek két részből állnak: a következő mikroutasítás címéből és a kapukat közvetlenül vagy közvetetten működtető vezérlőmezőből. A makroszintű gépi utasítás adja meg a műveletet vezérlő mikroprogram kezdőcímét, amelynek mikroutasításait sorra végrehajtva történik meg az utasítás végrehajtása. A mikroprogram elméletileg cserélhető, ez lehetővé tesz változtatható utasításkészletű processzorokat. Készítette: Markó Imre 2006
14:33:36
A mikroprogramozott vezérlés A vezérlőegységnek azt a részét, amely a műveleti vezérlést oldja meg, mikrovezérlőnek nevezik. A mikrovezérlő felépítését alapvetően meghatározza az alkalmazott mikroutasítás struktúra. Horizontális mikroutasítások Ezeknél a vezérlési mező minden bitje önálló funkciót tölt be, egy-egy vezérlési pont engedélyezésére és tiltására vagy állapotjelző beállítására szolgál. Sok esetben nem elég széles a vezérlési mező, ezért ún. kódolt (packed) mezőket alkalmaznak, amelyek a vezérlési mező egy-egy csoportját foglalják össze, és a további dekódolással kapjuk meg a vezérlőjeleket. Készítette: Markó Imre 2006
14:33:36
A horizontális vezérlés Horizontális mikroutasítás
Kódolt horizontális mikroutasítás Köv. ut. címe
K.m K.m K.m K.m Köv. ut. címe
Vezérlő bitek
Horizontális mikroutasítás Nanout. címe
Vezérlő bitek
Köv. ut. címe Nanotár
Készítette: Markó Imre 2006
Vezérlő14:33:36 bitek
A horizontális vezérlés A mikroprogramtár csökkentéséhez kétszintű tárolási rendszert használnak. A mikroutasítás vezérlési mezője azt a címet tartalmazza, amely a nanotárban a tényleges vezérlési mezőre mutat. Ennek az előnye, hogy több mikroutasítás is használhatja ugyanazokat a vezérlési jelsorozatot plusz tárolókapacitás lekötése nélkül. Hátránya, hogy az utasítások kiértékelése hosszabb időt vesz igénybe.
Készítette: Markó Imre 2006
14:33:36
A vertikális vezérlés Vertikális mikroprogramozott műveleti vezérlés olyan struktúra, ahol a mikroutasítások csak egy-egy elemi művelet elvégzését engedélyezik. A gépi kódú utasítás egymás utáni mikroutasítások halmazaként hajtható végre. A mikroprogram tartalmazhat eljárásokat, szubrutinikat, felépítése hasonlít a makroprogramokéhoz. A gyorsabb működés miatt regisztertárakat alkalmaznak, a mikroutasítások elsősorban ezeket használják. A mikroutasítás néhány bites része mint műveleti jelrész határozza meg, hogy mikroutasítás vezérlési mezőinek előírásait hogyan kell alkalmaznia a mikrovezérlőnek. Készítette: Markó Imre 2006
14:33:36
A horizontális vezérlés Intel processzorok mikroutasításainak szerkezete 5
5 SOURCE
3 TYPE
DESTINATION
ALU
4 ALU MŰV. 3 REGISZTER
1 C
504 * 21 BIT Motorola processzorok mikroutasításainak szerkezete Általános célú mikroutasítás 2
Kétszintű mikrotároló
1
10
2
TYP 0
FC Következő ut. címe
trap Feltételes mikroutasítás 2 8 FC Köv. ut. címe
5 Felt.
FC = külső kapcsolat típusa Készítette: Markó Imre 2006
17 bit
1 1
Felhasznált ter.
544
68 bit
prefetch 1 1
max1 024
1 prefetch
336 max 1024
nanotár 14:33:36
A vertikális vezérlés Cím Ugrási cím MUX
Mikroutasításszámláló regiszter
Betöltés
Külső feltételek
µPC Léptetés
Mikroprogramtár
Mikroutasítás
Dekóderek Készítette: Markó Imre 2006
Vezérlő jelek
14:33:36
A CISC – RISC architektúra A CISC processzoroknál a magas szintű programozási nyelv segítségével készült felhasználói programot az összetett utasításokkal rendelkező gépi nyelvre fordítják, majd ezeket a mikroprogramok segítségével az adott hardveren értelmezik és végrehajtják. Az utasításvégrehajtás egy mikroutasításokkal megvalósított értelmező rendszer segítségével történik meg. Az adatmozgás rendszerint a memória és a regiszterek között történik.
Készítette: Markó Imre 2006
14:33:37
A CISC – RISC architektúra A RISC processzorok esetében a magasszintű programozási nyelven készült programot egyszerű, gépi kódú utasításokból álló kódra fordítják le. Ez a kód már nem igényli a mikroutasításokkal megvalósított értelmező rendszert, mivel az utasítások közvetlenül végrehajthatók. A lefordított programot a főtárból a cache-be mozgatjuk, ebből hajtjuk végre. Adatmozgás rendszerint regiszterek között zajlik. A RISC rendszerekhez komoly fordítóprogramokra van szükség! Készítette: Markó Imre 2006
14:33:37
Gyorsítási lehetőségek
Készítette: Markó Imre 2006
Gyorsítási lehetőségek A processzor gyorsítására az alábbi lehetőségeink vannak: Órajel növelése, amelynek technológiai korlátjai vannak. Rendszertechnikai gyorsítás, amely a processzor speciális szervezésével alakítható ki. Ennek fajtái. Ezekben az esetekben párhuzamosítást használunk. Célprocesszorok Pipeline Szuperskalár felépítés
Készítette: Markó Imre 2006
14:33:37
Pipeline A párhuzamosítás akkor lehetséges, ha a folyamat olyan részekre bonthatók, melyek más-más erőforrásokat és egységeket kötnek le. Amint felszabadul egy erőforrás, a következő folyamat már igénybe veheti azt. A folyamat fázisai a soron következő folyamat indulási állapotát állítják elő. A pipeline végrehajtása történhet szinkron és aszinkron ütemezéssel. Készítette: Markó Imre 2006
14:33:37
Pipeline A szinkron ütemezés során minden egység azonos ütemezéssel dolgozik, feladatát mindegyik ugyanakkor kezdi meg. Az időzítéseket a leglassabb egység határozza meg. A megoldás hátránya, hogy a különböző folyamatok végrehajtásához eltérő időre van szükség. A CISC rendszerekre ez fokozottan igaz. Az adatáramlás folyamatosságának biztosítására átmeneti tárolókat használnak az adatfolyamban.
Készítette: Markó Imre 2006
14:33:37
Pipeline
Az aszinkron ütemezés során az egyes fokozatok jelzik egymásnak az adott feladat befejeződését. A következő csak ezután kezdhet dolgozni a kapott adattal. Ez azt is jelenti, hogy az aktuális egység készen áll a következő folyamatot fogadni.
Készítette: Markó Imre 2006
14:33:37
Pipeline működése Soros utasításfeldolgozás FETCH Dekódolás Op. lehívás Végrehajtás Visszaírás
FETCH Dekódolás n+1. utasítás
n. utasítás
Pipeline utasításvégrehajtás FETCH
Dekódolás FETCH
Op. lehívás Végrehajtás Dekódolás FETCH
Készítette: Markó Imre 2006
Visszaírás
Op. lehívás Végrehajtás Dekódolás
n. utasítás Visszaírás
Op. lehívás Végrehajtás
Visszaírás
14:33:37
Soros végrehajtás folyamata Utasítás dekódolás
Utasítás lehívás
Végrehajtás címszámítás
Memória hozzáférés
Nulla?
Előjel
Készítette: Markó Imre 2006
A B
conc
ALU kim.
Adat mem.
LMD
MUX
IR
Reg. tár
MUX
Ut. tár
MUX
PC
Visszaírás
MUX
NPC
IMM
14:33:37
Pipeline végrehajtás folyamata Memória hozzáférés
MUX
Nulla?
Adat mem.
MUX
MUX
Reg. tár
MUX
PC Ut. tár
Végrehajtás címszámítás
Visszaírás
Utasítás dekódolás
Utasítás lehívás
Előjel
Készítette: Markó Imre 2006
14:33:37
Pipeline fajtái Multifunkcionális pipeline során a folyamatok nem ugyanazokat az erőforrásokat használják fel. Egyfunkciós pipeline esetén minden folyamat ugyanazokkal az erőforrásokkal gazdálkodik. Lineáris pipeline során minden folyamat egyszer használ egy erőforrást. A nemlineáris pipeline során egy erőforrás többször is használható egy folyamat végrehajtása során. Az utasításvégrehajtás lépéseit úgy kell meghatározni, hogy minden lépést egy konkrét részáramkör hajtson végre. Készítette: Markó Imre 2006
14:33:37
Utasításvégrehajtás lépései A felbontásnál az alábbi szempontokat kell figyelembe venni: Egyes lépések erőforrásigénye: minden lépés valamilyen erőforrást köt le. Előfordulhat olyan eset, hogy lépés csak több erőforrás igénybevételével hajtható végre. Időszükséglet: Az egyes fázisok időszükséglete is befolyásolja a fázisok számát. Mindig a leghosszabb elérés fogja meghatározni a maximális sebességet és közvetve a lépések számát is. Áramköri problémákat is figyelembe kell venni, mivel előfordulhat, hogy egy feladat csak nagyon bonyolult áramkörrel oldható meg, ami több hibalehetőséget és drágább előállítási költséget von maga után. Készítette: Markó Imre 2006
14:33:37
Utasításvégrehajtás problémái A folyamatos utasításvégrehajtást az alábbi műveletek zavarhatják meg leginkább: tárolóhivatkozású utasítások (időigényesek) vezérlésátadó utasítások (feltételes, feltétel nélküli és ciklusok, másik címre viszik a vezérlést) megszakítások, kivételek (más címen folytatódik) Ezek meglehetősen nagy számban találhatók meg az utasításfolyamban, ezért fontos a megfelelő kezelésük. Mindhárom esetben a folyamatos utasításvégrehajtást meg kell szakítani vagy fel kell függeszteni, ami lyukakat eredményez a folyamatban. Ezek csökkentik a pipeline hatékonyságát. Készítette: Markó Imre 2006
14:33:38
Memóriautasítások kezelése Várakozási állapotok beiktatása A memóriautasításokat követő utasítások végrehajtását felfüggesztjük várakozási állapotok (WAIT) beiktatásával addig, míg be nem fejeződik a művelet. A pipeline-ban lyukak keletkeznek. Ha sok ilyen művelet van, a feldolgozás hatékonysága jelentősen lelassulhat. F F F
F
F
D
D
E1
D
D
W
Készítette: Markó Imre 2006
E E
E E
E2
D
W
W
W
W
n+4. utasítás n+3. utasítás n+2. utasítás n+1. utasítás n. utasítás 14:33:38
Memóriautasítások kezelése Késleltetett memóriautasítás Abban az esetben használjuk, ha a következő utasításnak szüksége van az előzőleg beolvasott adatra. Ilyenkor egy olyan utasítást használunk (NOP), amelynek erre nincs szüksége, a végrehajtást pedig nem borítja fel. Az utasításátrendezést a fordítóprogram végzi el!
F
F
D
E
F
D
E
W
F
D
E
W
D
E1
E2
W
Készítette: Markó Imre 2006
W
n+3. utasítás n+2. utasítás n+1. utasítás n. utasítás 14:33:38
Elágazások kezelése A legnagyobb problémát jelentik. Az oka, hogy az ugrási cím csak a végrehajtás fázisában válik ismertté, másrészt nem a soron következő címről kell folytatni a végrehajtást. Ilyenkor a pipeline-ban lévő utasításokat törölni kell, majd ismét feltölteni a pipeline-t. A feltétel nélküli vezérlésátadó utasítások esetében a vezérlőegység addig késlelteti a csővonalba belépő utasításokat, míg az utasítás kiértékelése megtörténik. Hátránya, hogy a csővonalban lyukak keletkeznek, de nem kell ürítést végezni. Másik lehetőség szerint a processzor kiüríti ilyen utasítás esetén a csővonalat. Készítette: Markó Imre 2006
14:33:38
Elágazások kezelése A feltételes vezérlésátadó utasítások és ciklusutasítások eseténben legfontosabb meghatározni az ugrás várható irányát. Két lehetősége: Statikus előrejelzés során a fordítás során kell ezt megállapítani és így olyan utasításfolyamot generálni, hogy folyamatos legyen annak végrehajtása. Dinamikus előrejelzés futás közben vizsgálatot jelent. Egyik megoldás szerint egy táblázatban tárolja az ugróutasítások címeit és figyeli a feltételek teljesülését. A másik módszer egy cache-tárban tárolja az ugróutasítások és az ugrás helyének a címeit. Amikor ugyanazt az utasítást kell feldolgozni, a cache-ből veszi ki azt. Készítette: Markó Imre 2006 14:33:38
Elágazások kezelése Az elágazások problémáinak feloldására az alábbi lehetőségeink vannak: pipeline törlése (flushing, squashing) pipeline leállítása (pipeline freezing) elágazás előrejelzés (branch prediction) spekulatív utasítás végrehajtás (speculative execution) késleltetett elágazás (delayed branch) elágazás összevonás (branch folding) pipeline többszörözés Készítette: Markó Imre 2006
14:33:38
Pipeline törlése A vezérlőegység folyamatosan tölti fel a csővonalat. Ha a soron következő utasítás ugróutasítás, akkor az addig betöltött utasítások folyamatait törli, majd ismét feltölti a csővonalat a megfelelő címről. Minden értéket vissza kell állítani, amit a törölt folyamatok megváltoztattak. Visszaírás
I
Végrehajtás
I
Dekódolás Előkészítés
I I
K K
I+1
I+1 I+2
I+1 I+2 I+3
Készítette: Markó Imre 2006
K K
K+1 K+2 K+3
K+1 K+2 K+3
K+1 K+2 K+3
K+1 K+2 K+3
14:33:38
Pipeline leállítása Abban az esetben, ha a soron beolvasott utasítás vezérlésátadó utasítás, a csővonal feltöltése mindaddig felfüggesztésre kerül, amíg az ugrási cím rendelkezésre nem áll. Természetesen ezt a megoldást leginkább a dinamikus előrejelzés alkalmazása során használhatjuk.
Visszaírás
I
Végrehajtás
I
Dekódolás Előkészítés
I I
ÁLL ÁLL K
ÁLL ÁLL K
ÁLL ÁLL K
ÁLL ÁLL
Készítette: Markó Imre 2006
K
K+1 K+2 K+3
K+1 K+2 K+3
K+1 K+2 K+3
K+1 K+2 K+3
14:33:38
Elágazás előrejelzés A processzor vezérlőegysége meg tudja jósolni, hogy a következő utasítás melyik memória címen lesz megtalálható és onnan be tudja tölteni. Ehhez speciális vezérlőegységre van szükség, amely már bizonyos szintű elődekódolást végez a soron következő utasításon. Pipeline Csővonal 1
Utasítás 1 Utasítás 2 Utasítás 3 Utasítás 4
Készítette: Markó Imre 2006
Dekóder
Végrehajtó egység
Visszaírás
Csővonal 2
14:33:38
Elágazás előrejelzés Pipeline Out-of-Order végrehajtó egység Időzítő Utasítás 1
Dekóder
Utasítás 2 Utasítás 3 Utasítás 4
Dekóder
Végrehajtó egység
Dekóder ROB
Készítette: Markó Imre 2006
Visszaírás
14:33:38
Elágazás előrejelzés - Netburst Pipeline Out-of-Order végrehajtó egység Időzítő Utasítás 1 Utasítás 2 Utasítás 3
Dekóder
Dekódolt utasítások (cache)
Végrehajtó egység
Utasítás 4 ROB
Készítette: Markó Imre 2006
Visszaírás
14:33:38
Spekulatív utasításvégrehajtás A spekulatív végrehajtás az utasítások sorrendjének olyan manipulációját jelenti, amelynek eredményeként a teljesítmény a maximálisra növelhető, figyelembe véve a szuperskalár felépítés sajátosságait és az alkalmazásával kapcsolatos problémákat. A technika használatával a processzor foglaltsága esetén olyan utasítás kerül végrehajtásra - természetesen amennyiben erre lehetőség van -, amely más erőforrásokat köt le. Természetesen az ilyen esetekben az utasítások és az adatok egymással való függőségének a kezelésének kiemelkedő szerepe van. Készítette: Markó Imre 2006
14:33:38
Spekulatív utasításvégrehajtás while (1){ code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ;} Készítette: Markó Imre 2006
//következő code //kilépés, ha nincs több //a feltétel telj. //reset //új code //kilépés, ha nincs több //speciális esetben //végrehajtjuk az utolsó //code-ot //utasításhurok //eredmények a stackbe //kiolvasás a stackből //ha új, új táblabejegyzés //az utolsó code frissítése 14:33:39
Spekulatív utasításvégrehajtás Az aktuális folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ; Készítette: Markó Imre 2006
A következő folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás A aktuális memóriafolyamat kimenetének függőségeit eltávolíthatják Az A következő folyamat a helyi spekulatív tárolókkal code = getcode(); code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ; Készítette: Markó Imre 2006
if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás Az aktuális folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ; Készítette: Markó Imre 2006
A következő folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás Az új folyamatok kezdetére jellemző, hogy: Az●aktuális folyamat következő folyamat a free_ent értékét egyszer A megnövelik (gyakran) code● = getcode(); code = getcode(); azonos stackp értéket használnak (mindig) if (code ==-1)goto exit; if (code ==-1)goto exit; if (...){ gyakran hamis free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; gyakran igaz (stackp>base); do while if ( … ) free_ent++; oldcode = incode ; Készítette: Markó Imre 2006
if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás Az aktuális folyamat
A következő folyamat
code = getcode(); code = getcode(); if (code ==-1)goto exit; if (code ==-1)goto exit; if (...){ if (...){ gyakran hamis free_ent=...; free_ent=...; code=getcode(); code=getcode(); if (code==-1) goto exit;} if (code==-1) goto exit;} incode = code; incode = code; gyakran hamis if (code>=free_ent){ if (code>=free_ent){ *stackp++=...; Álfüggőségek *stackp++=...; code=oldcode;} code=oldcode;} while (code>=256){ while (code>=256){ *stackp++=...; ...; *stackp++=...; ...; do while (stackp>base); do while (stackp>base); if ( … ) free_ent++; if ( … ) free_ent++; oldcode = incode ; oldcode = incode ; Készítette: Markó Imre 2006
14:33:39
Spekulatív utasításvégrehajtás Az aktuális folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ; Készítette: Markó Imre 2006
A következő folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...; ...; do while (stackp>base); if ( … ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás Fő szál
PC
PC
Függőség vizsgálat Regiszterek
Függőség vizsgálat Továbbítás
Eredmény puffer
Spekulatív szál
Regiszterek Eredmény puffer
Spekuláció
Végrehajtás
Cache / Operatív tár Készítette: Markó Imre 2006
14:33:39
Késleltetett elágazás A fordítás során a fordítóprogram az ugróutasítások mögé olyan utasításokat helyez, amelyek az elágazástól függetlenül végrehajthatók, vagy éppen nem csinálnak semmit (NOP). Ennek eredményeként nem lesz üres állapot a csővonalban. Ezzel egy késleltetési rést (delay slot) hozunk létre, amelynek mérete maximálisan n-1, ahol 'n' a csővonal állapotainak száma. Visszaírás
I
Végrehajtás
I
Dekódolás Előkészítés
I I
NOP NOP NOP
NOP NOP NOP
NOP NOP NOP
Készítette: Markó Imre 2006
NOP NOP NOP
K
K
K
K
K+1 K+2 K+3
K+1 K+2 K+3
K+1 K+2 K+3
K+1 K+2 K+3
14:33:39
Adatok kezelésének problémái A pipeline problémákat okoz az operandusok esetében is. Akkor jelentkezik olyan, ha olyan utasítás van a csővonalban, amelynek az éppen végrehajtott utasítás fogja az operandust átadni. Ebben az esetben az operandus nincs még meg akkor, mikor már szükség lenne rá. Ezt nevezik HAZARD-nak.
Készítette: Markó Imre 2006
14:33:39
Pipeline adtfeldolgozási hibák Példaprogram ADD SUB AND OR XOR
R1, R2, R3 R4, R5, R1 R6, R1, R7 R8, R1, R9 R10, R1, R11
Minden utasítás, ami az első ADD után van, annak eredményére hivatkozik. A hagyományos pipeline feldolgozáshoz szükséges a memóriába visszaírás állapotának a kivárása, különben hibás regisztertartalommal dolgoznának. Készítette: Markó Imre 2006
14:33:39
Pipeline adtfeldolgozási hibák IM
DM
Reg.
IM
DM
Reg.
IM
Reg.
DM
Reg.
IM
Reg.
DM
Reg.
IM Készítette: Markó Imre 2006
Reg.
Reg.
Reg.
DM
Reg. 14:33:40
Pipeline adtfeldolgozási hibák IM
DM
Reg.
IM
DM
Reg.
IM
Reg.
DM
Reg.
IM
Reg.
DM
Reg.
IM Készítette: Markó Imre 2006
Reg.
Reg.
Reg.
DM
Reg. 14:33:40
Adatok kezelésének problémái A pipeline-ban előforduló hazardok Írás utáni írás során a második utasítás írása után módosítja ugyanazt az első. Írás utáni olvasás során a második utasítás felülír egy olyan adatot, amelyet az első utasítás olvasott volna be. Olvasás utáni írás során a második utasítás ezt megelőzően olvas ki egy operandust, hogy az az első már módosította volna. Olvasás utáni olvasás nem okoz problémát.
Készítette: Markó Imre 2006
14:33:40
A HAZARD-ok megszüntetése A legegyszerűbb megoldás, hogy addig nem engedjük belépni a csatornába az utasítás, míg meg nem szűnik a függőség. Utasítás átrendezés Ennek során az utasításokat úgy rendezi át vagy a vezérlő egység, vagy a fordítóprogram, hogy azok végrehajtási sorrendje ne okozzon adatütközést. Scoreboarding Minden regiszter tartalmaz egy, a módosítására utaló jelzőbitet. Az utasítások ezt megvizsgálva tudják, hogy abban a megfelelő adatot találják-e meg. Egyébként késleltetni kell a soron következő utasítást. Készítette: Markó Imre 2006
14:33:40
A HAZARD-ok megszüntetése Adat előreengedés (data forwarding) Ebben az esetben ha a második utasításnak szüksége van az előtte lévő művelet eredményére, akkor azt rendelkezésre állása után rögtön, a vezérlőegységen belül továbbítjuk a következő utasításnak. Adatfolyam analízis A processzor már az utasítás-dekódolás folyamata során analizálja, hogy milyen operandusokra van annak szüksége. Ha függőséget talál, akkor megpróbálkozik az utasításokat átrendezni ennek feloldására.
Készítette: Markó Imre 2006
14:33:40
Szuperskalár processzorok Szuperskalár processzorok képesek több utasításfolyam végrehajtása egy órajelciklus alatt. Problémák: Párhuzamos dekódolás, elődekódolás A párhuzamos utasításvégrehajtáshoz szükség van párhuzamosan működő dekódoló és végrehajtó egységekre. Ezek a függőségi problémát megtöbbszörözik. L1 cache L1 cache
1 ut. dekódolása
Utasítás puffer
Utasítás puffer
Dekódolás/ kibocsájtás
Dekódolás/ kibocsájtás
PIPELINE Készítette: Markó Imre 2006
n ut. dekódolása
PIPELINE 1...n 14:33:40
Párhuzamos dekódolás A függőségi vizsgálatok időigényessége miatt az 1. és 2. szintű cache között elődekódolást végeznek. Ennek során a dekódolás feladatainak egy része már ekkor végrehajtásra kerül. Az utasítás kiegészítik erre a műveltre utaló bitekkel.
L2 cache
Készítette: Markó Imre 2006
Elődekódoló
L1 cache
14:33:40
Utasításkibocsátás, várakoztatás A szuperskalár utasításkibocsátás összetevői: Kibocsátási ráta megadja a processzor által ciklusonként kibocsátható utasítások számát. Kibocsátási politika a függőségek kezelését jelenti. Típusai: Adatfüggőségek a regiszterek között, amelyet regiszterátnevezéssel lehet megszüntetni. Vezérlésfüggőségek feloldását blokkolással (utasításkibocsátás felfüggesztése) vagy spekulatív elágazáskezeléssel lehet megoldani. A függőségek kezelésének egyik legelterjedtebb szerkezeti megoldása a végrehajtó egység előtti pufferelés. Készítette: Markó Imre 2006
14:33:40
Utasításkibocsátás, várakoztatás Utasítás puffer
Dekódolás / Kibocsátás
Várakoztató puffer
Várakoztató puffer
Várakoztató puffer
Függőség ell. Kiküldés
Függőség ell. Kiküldés
Függőség ell. Kiküldés
Végrehajtó egység
Végrehajtó egység
Végrehajtó egység
Készítette: Markó Imre 2006
14:33:40
Regiszter átnevezés Célja az ál-adatfüggőségek feloldása, amely akkor alakul ki, ha a programozók csak kevesebb regisztert használhatnak, mint amennyi fizikailag elérhető lenne és ilyenkor függőség lép fel a használt regiszterek között. A regiszterátnevezés során a függőséget okozó utasítás regiszterét egy másik regiszterrel helyettesítik. Fajtái. Statikus, amelyet a fordítóprogram valósít meg Dinamikus, amely futás közbeni regiszterátnevezést jelent Az átnevezéshez egy átnevező puffertárat és egy leképzőtáblázatot használnak. Készítette: Markó Imre 2006
14:33:40
Szuperskalár architektúra Spekulatív elágazásbecslés A vezérlőegység valamilyen módon megpróbálkozik kitalálni az ugróutasítás kimenetét. Párhuzamos végrehajtás Probléma: az eredmények nem az utasítások sorrendjében jönnek létre. Feloldásához átmeneti tárolóba helyezik az adatokat, amely tartalmát már a helyes sorrend alapján írják ki. A célra a ROB (Re-Order Buffer) regisztert használják. Az utasítás lehet véget ért vagy befejezett.
Készítette: Markó Imre 2006
14:33:40
Spekulatív elágazás-feldolgozás A vezérlőegység valamilyen módon megpróbálkozik kitalálni az ugróutasítás kimenetét. Ez történhet Statikusan Dinamikusan
Készítette: Markó Imre 2006
14:33:41
A 8086-os processzor Adatmutató és Indexregiszterek (8 szó)
Szegmensregiszterek Utasítás regiszter (5 szó)
ALE A19-A16 AD15-AD0
Sínillesztő egység
16 bites ALU és FLAG regiszter
MEM/IO INTA
6 bájtos utasítássor
Vezérlő- és időzítő egység Készítette: Markó Imre 2006
NMI
INTR
HOLD HLDA
CLK
LOCK RESET 14:33:41
Minimális konfiguráció
Készítette: Markó Imre 2006
14:33:41
Maximális konfiguráció
Készítette: Markó Imre 2006
14:33:41
A 8088-as processzor Adatmutató és Indexregiszterek (8 szó)
Szegmensregiszterek Utasítás regiszter (5 szó)
ALE A19-A16 AD7-AD0
Sínillesztő egység
16 bites ALU és FLAG regiszter
A8-A15 MEM/IO INTA
4 bájtos utasítássor
Vezérlő- és időzítő egység Készítette: Markó Imre 2006
NMI
INTR
HOLD HLDA
CLK
LOCK RESET 14:33:41
A 80286-os processzor 3 A19-A16
2
Címző és végrehajtó egység
Sínvezérlő és utasításkezelő egység
HLDA HOLD LOCK MEM/IO INTA D15-D0
1
CLK
RESET
NMI
INTR
Készítette: Markó Imre 2006
14:33:41
Címző és végrehajtó egység
Szegmens méret
Offset összeadó Aritmetikai és logikai egység
Regisztertár
2 Sínvezérlő egység
Szegmens határ ellenőrzés
Fizikai cím összeadó
Szegmens bázis
3
Vezérlés
1 Készítette: Markó Imre 2006
NMI
INTR
14:33:42
Sínvezérlő és utasításkezelő egység 3
Címsín vezérlő Előolvasó
2
CPU kiterjesztés
Sín vezérlés
Adatvonal vezérlés
A19-A16
HLDA HOLD LOCK MEM/IO INTA D15-D0
6 bájtos utasítás sor
1
3 dekódolt utasítás sor
Készítette: Markó Imre 2006
Utasítás dekóder
14:33:42
Az i386-os processzor 6
Címszámító egység
7 8 9
1
2 3
Végrehajtó egység
NMI INTR HLDA HOLD RESET CLK
Sínvezérlő és utasításkezelő egység
A31-A0 LOCK MEM/IO INTA
D31-D0
4 5
Készítette: Markó Imre 2006
14:33:42
Végrehajtó egység
Szorzó- és osztó áramkör
Effektív címsín
Effektív címsín
2
Címszámító egység
Védelmi ellenőrző egység
Belső vezérlő sín
3 Dekódoló és sorbaállító egység
Barrel shifter
ALU regiszterek
Vezérlő ROM
Sínvezérlő és utasításkezelő egység
1
4
ALU vezérlés Készítette: Markó Imre 2006
Dedikált ALU sín
5
14:33:42
Címszámító egység Szegmentáló egység
Lapozó egység
Deszkriptor regiszterek
Lap cache
2
Eltolási érték sín
9
Kód fetch / Lap fetch
Összeadó
Limit PLA
Végrehajtó egység
1
3 bemenetű összeadó
Lineáris címsín
Effektív címsín
Effektív címsín
Fizikai címsín
Vezérlő PLA
3
Belső vezérlő sín
6
Készítette: Markó Imre 2006
7
8
Sínvezérlő és utasításkezelő egység
14:33:42
Sínvezérlő és utasításkezelő egység Címszámító egység
8
6
7
9
Eltolási érték
3 dekódolt utasítás sor
4
Kód fetch / Lap fetch Belső vezérlő sín
Végrehajtó egység
3
5
Fizikai címsín
Utasítás dekóder
Lineáris címsín
Sín vezérlés
A31-A0
Csővonal vezérlés
Prefetcher
Készítette: Markó Imre 2006
Vezérlés
Címsín meghajtó
16 bájtos kódsor
NMI INTR HLDA HOLD RESET CLK
Kód szál
Multiplexer Adatsín meghajtó
D31-D0
Dedikált ALU sín
14:33:42
Az i486 DX processzor 1
NMI INTR HLDA HOLD RESET CLK
2 3
Címszámító és vezérlő egység
4 5
6
Sínvezérlő és utasításkezelő egység
A31-A0 LOCK MEM/IO INTA
D31-D0
7 8 Készítette: Markó Imre 2006
14:33:42
Végrehajtó egység
1 2 Lineáris cím
Bázis/index cím
Belső sínrendszer
Barrel shifter ALU regiszterek
Deszkriptor regiszterek
ALU
Limit PLA
Mikroutasítások
Lapozó egység
4 Fizikai cím
TLB
5 6
Eltolási cím
Lebegőpontos egység
Vezérlő és védelmi egység
Lebegőpontos regiszterek
Vezérlő ROM
Készítette: Markó Imre 2006
3
Szegmentáló egység
Dekódolt utasítások
7 8
14:33:42
Sínvezérlő és utasításkezelő egység 1
Belső sínrendszer
2
CLK
Lineáris cím Cache vezérlés
Adatsín meghajtó
8 KB cache
Sín vezérlés
Fizikai cím
Órajel sokszorozó Belső órajel Burst sín vezérlés
Eltolási cím Prefetcher
Mikroutasítások
Dekódolt utasítások
7 8
A31-A0
Írási puffer 4 x 32
3 4
5 6
Cím meghajtó
Utasítás dekódoló Készítette: Markó Imre 2006
Kód
32 Bájtos kód sor 2 x 16 Bájt
D31-D0
MEM/IO INTA NMI INTR HLDA HOLD RESET
Sínméret vezérlés Cache vezérlés Paritás generátor Határ ellenőrzés
14:33:42
A Pentium processzor Utasítás dekódoló
A31-A0 D63-D0 MEM/IO INTA NMI INTR HLDA HOLD RESET
1 Sínvezérlő egység
2
3
4
5
7 Végrehajtó egység
Készítette: Markó Imre 2006
6
8
Lebegőpontos és MMX egység
14:33:43
Sínvezérlő egység 64 bites adatsín Vezérlés
DP logika
32 bites címsín
1 2
A31-A0 D63-D0 MEM/IO INTA NMI INTR HLDA HOLD RESET
Adat Vezérlés
BIU
Lapozó egység
APIC
Készítette: Markó Imre 2006
14:33:43
Utasítás dekódoló 1 2 Ugrási cél puffer
TLB
Utasítás cache 8 (16) KB
Vezérlő ROM
Prefetch puffer Utasítás dekódoló
6
Vezérlő egység
3 Készítette: Markó Imre 2006
4
5
14:33:43
Végrehajtó egység 3
4
5 Címszámító egység U pipeline
Címszámító egység V pipeline
Egész műveletvégző egység regiszterei ALU U pipeline
ALU V pipeline
7
Barrel shifter
8 TLB
Készítette: Markó Imre 2006
2
Adat cache 8 (16) KB
1
14:33:43
Lebegőpontos és MMX egység 6
MMX egység 7
Lebegőpontos egység Vezérlés Regisztertár
Összeadás
8
Szorzás Osztás Készítette: Markó Imre 2006
14:33:43
A Pentium III processzor
Készítette: Markó Imre 2006
14:33:43
A Pentium 4 processzor
Készítette: Markó Imre 2006
14:33:43
Az AMD K6 processzor
Készítette: Markó Imre 2006
14:33:44
Az AMD K6-2 processzor
Készítette: Markó Imre 2006
14:33:44
Az AMD K6-2 processzor
Készítette: Markó Imre 2006
14:33:45
Az AMD K6-3 processzor
Készítette: Markó Imre 2006
14:33:45
Az AMD Athlon processzor
Készítette: Markó Imre 2006
14:33:45
Az assembly programozási nyelv áttekintés
Készítette: Markó Imre 2006
Processzor programozásilehetőségek – – – – –
Gépi kód: a processzor számára érthető, bináris számsorozat Assembly: az egyes utasításokat mnemonikokkal helyettesítjük C nyelv: Az assemblynél magasabb szintű, a programozást srtuktúrált szerkezetekkel segíti elő Magas szintű nyelvek: Egyszerű, viszont a fordító nem mindig generál optimális kódot 4GL: Napjainkban használt, grafikus környezetben gyors fejlesztésre van lehetőség
Készítette: Markó Imre 2006
14:33:46
A gépi kódú programozás A program a processzor számára értelmezhető számok sorozata (decimális, bináris, hexadecimális) – A kódolás nehezen megérthető, nehéz a hibakeresés, nincs szükség fordítóprogramokra – Az EXE és a COM állományok gépi kódú programok Példa: Egy „A” betű megjelenítése a képernyőn: –
B4 180
02 2
B2 178
Készítette: Markó Imre 2006
41 65
CD 205
21 33
CD 205
20 hex 32 dec
14:33:46
Assembly kódú programozás A gépi kódú programozás nehézségeinek megszüntetésére az utasításokat jelentő számokat helyettesítjük szótöredékekkel, mnemonikokkal. Az adatok természetesen megmaradnak eredeti formájukban. Az ugróutasítások esetében egyszerű címkéket használunk, amelyek pontos értékét nem nekünk kell kiszámítani, hanem... Egy fordító program végzi el a mnemonikok, adatok és a címkék lefordítását gépi kódra.
Készítette: Markó Imre 2006
14:33:46
Az előző példa assembly-ben B4 B2 CD CD
02 41 21 20
MOV ah, 2 MOV dl, 41h 41h az „A” kódja INT 21h INT 20h Operandus
Mnemonik Utasításkód Készítette: Markó Imre 2006
Operandus 14:33:47
Az assembly jellemzői – – – –
–
Alacsonyszintű programozási nyelv (regiszter és IO műveletek, soronkénti programkészítés) Hardverfüggő nyelv, ismerni kell részletesen a hardverelemek (pl. processzor) működését) Közvetlenül, egy fordítóprogram segítségével gépi kódra fordítható Általában az ilyen módon készített program rövidebb, tömörebb és rendszerint hatékonyabb, mint a magasabb szintű nyelveken készültek A fordítóprogram az assembler, a visszafordító a disassembler Készítette: Markó Imre 2006
14:33:47
Memóriakezelés A PC processzorok (80x86) valós módban 1MiB memóriát használhatnak (20 címbit) – Egy 16 bites regiszterrel nem lehet elérni a teljes területet, tehát két regiszterre van szükség – Az egyik regiszter a memória egy címére mutat (báziscím, szegmenscím), innen kezdve tudunk egy 64 kiB területet elérni. Ezen belül a másik regiszter fogja a pozíciót megadni (offset) Fizikai cím = 16 * Báziscím + Offset A szokásos jelölésmód: Báziscím : Offset –
Készítette: Markó Imre 2006
14:33:47
Memóriakezelés – II – –
– – – –
Az x86 processzorok négy szegmensregiszterrel rendelkeznek – négy szegmenst használhatunk A szegmens mérete 64 kiB a 16 bites regiszterméret miatt. A COM állományok ennél nem lehetnek nagyobbak Egy fizikai címet többféleképpen megadhatunk A szegmens csak 16-al osztható címen, a paragrafushatáron kezdődhet A szegmens-offset címzés meglehetősen bonyolult Ha a szegmens FFFFh, az offset >= 10h, akkor kilépünk a címezhető memóriatartományból. Készítette: Markó Imre 2006
14:33:47
Regiszterek – I Az x86-os processzorokban az adatok átmeneti tárolására regisztereket használnak. A regisztereket funkcióik szerint csoportosíthatjuk. Általános célú regiszterek Az akkumulátor mellett találunk itt 16 bites AX, BX, CX és DX jelzésű általános regisztereket is. A 32 bites CPUkban az alsó 16 bit megfelel ennek a struktúrának (EAX, EBX, ECX, EDX). Az AX, BX, CX és DX két 8 bites részben címezhető. Az alsó bájt az AL, BL, CL és DL, míg a felső bájtok az AH, BH, CH és DH. Készítette: Markó Imre 2006
14:33:47
Regiszterek – II Indexregiszterek A memóriában offset tárolására használatosak. 16 bit szélességűek, kettő ilyen van az x86-ban, az SI (Source Index) és DI (Destination Index). Veremregiszterek A veremműveletek végrehajtását teszik lehetővé. Az SP (Stack Pointer) a verem tetejét mutatja A BP (Base Pointer) a vermen belüli műveletek elvégzésére használatos.
Készítette: Markó Imre 2006
14:33:47
Regiszterek – III Szegmensregiszterek A memóriaterületek eléréséhez használatos rgiszterek. CS – Kódszegmens, a programot tartalmazza. DS – Adatszegmens, az adatok találhatók itt. ES – Extra szegmens, extra információk tárolására. SS – Stack szegmens, a stack műveletek elvégzéséhez. A 80386-tól megjelentek újabb szegmensregiszterek, ezek a FS és a GS elnevezést viselik.
Készítette: Markó Imre 2006
14:33:47
Regiszterek – IV Utasításmutató regiszter Az IP (Instruction Pointer) mindig a következő utasítás helyét határozza meg, egy offset értéket tartalmaz, amelyet a CS-hez kell viszonyítanunk. Ennek megfelelően a következő utasítás fizikai címe a CS:IP érték lesz. Abban az esetben, ha nincs ugróutasítás, az IP tartalma folyamatosan növekedni fog, de nem mindig egyesével.
Készítette: Markó Imre 2006
14:33:47
Regiszterek – V Állapotregiszter Az állapotregiszter (FLAG register) bitenként címezhető regiszter, átmeneti tárolásra nem használható, különböző állapotok jelzésére alkalmas. A legfontosabb jelzőbitek a ZERO és a CARRY. A ZERO bit logikai '1' lesz, ha az elvégzett aritmetikai művelet eredménye 0. A CARRY flag tartalmazza a művelet során keletkezett átvitelt. Ha értéke '1', akkor előjelváltás történt.
Készítette: Markó Imre 2006
14:33:47
Az assembly utasítások – MOVE A leggyakoribb utasítás a MOVE, amely adatmozgatásra szolgál. Általános alakja. MOVE cél, forrás Több használati lehetőséget nyújt számunkra: Közvetlen (immediate) érték: MOVE AX, 5 MOVE BX, 234 MOVE AH, 0FFh
Készítette: Markó Imre 2006
14:33:47
Az assembly utasítások – MOVE Regisztercímzés: MOVE AX, BX MOVE AL, BH MOVE DS, 0EDh – csak regiszteren keresztül!!! Olvasás memóriából: MOVE AX, [SI] MOVE AX, [0FF00h] Írás memóriába: MOVE [SI], AX A memóriarekesz címét a [ ] közé kell tenni!
Készítette: Markó Imre 2006
14:33:47
Az assembly utasítások – MOVE Indexelt címzés:
MOVE AX, [DI+4]
Bázisrelatív címzés: MOVE AX, [BX+4] Bázisrelatív indexelt: MOVE AX, [BX+DI+4] ASCII karakter beírása: MOVE AL, 82 vagy MOVE AL, 'R'
Készítette: Markó Imre 2006
14:33:47
Egy egyszerű assembly program title bemutato_program .model small .stack .data szoveg db 'Hello!$' .code start: move ax, _data move ds, ax move ah,9 move dx, offset szoveg int 21h move ax, 4c00h int 21h end start Készítette: Markó Imre 2006
A program neve Kis memóriamodul 1kiB veremszegmens definiálása Az adatszegmens benne a kiírandó szöveggel A kódszegmens kezdete Ennél a címkénél kezdődik a prg. A DS-t beállítjuk az adatszegmens elejére Kiírjuk a szöveget DS:DX-től a $ jelig szoftveres megszakítás Szokásos kilépés hibajel nélkül A program vége 14:33:48
Az assembly program elkészítése A programot három lépésben készítjük el: 1. Egy tetszőleges szövegszerkesztővel megírjuk a forrásfájlt. 2. Lefordítjuk a programot. Ennek egyik lépése, hogy elkészül egy szimbólumtáblázat, a másik pedig az utasításkódok fordítása a szimbólumértékek alapján. A művelet egy objektum (Object, OBJ) állományt eredményez. 3. Szerkesztés. Ennek során az objektumokból futtatható állományt készítünk.
Készítette: Markó Imre 2006
14:33:48
Az assembly lehetőségei Assembly programban a lehetőségeink a következők: – – – – – – –
Aritmetikai és logikai műveletek, Ciklusok, Elágazások és ugrások, Regiszterléptető műveletek, Verem és szubrutinok, Megszakítások, Egyéb, a fentiekbe nem tartozó utasítások.
Készítette: Markó Imre 2006
14:33:48
Aritmetikai műveletek – – – – – – – –
ADD ADC SUB SBB MUL IMUL DIV IDIV
Összeadás cél=cél+forrás Összeadás + CARRY cél=cél+forrás+CF Kivonás cél=cél-forrás Kivonás CARRY-vel cél=cél-forrás-CF Szorzás Előjeles szorzás Osztás Előjeles osztás
Készítette: Markó Imre 2006
14:33:48
Aritmetikai műveletek – II A BCD számokkal való műveletvégzés során számos esetben (amikor átvitel keletkezik) hibás eredményhez juthatunk. Ennek kivédésére használhatók az alábbi utasítások: DAA AL decimális korrekciója összeadás után DAS AL dec. korrekciója kivonás után Ezek az utasítások az AL (AX) regiszterre vonatkoznak és a művelet után kell őket kiadni.
Készítette: Markó Imre 2006
14:33:48
Logikai műveletek A BOOLE algebra operandusokkal.
műveleteinek
az
elvégzése
Az AND művelettel egy érték tetszőleges bitjét nullázhatjuk. AND ah, 00001111b
a felső 4 bit '0' lesz
Az OR művelettel tetszőleges bitet '1' állapotba állíthatunk. OR ah, 00001111b
az alsó 4 bit '1' lesz
XOR művelet az OR-hoz hasonló, de 1-1 esetén 0 lesz Készítette: Markó Imre 2006
14:33:48
Ciklusok – – – –
Ismétlődő utasításokhoz használhatjuk A ciklusváltozó (CX) határozza meg a ciklusszámot Hátultesztelős ciklus A ciklus végét a LOOP
utasítás jelzi.
mov cx,3 cimke: loop cimke Készítette: Markó Imre 2006
A LOOP első lépésként mindig csökkenti a CX tartalmát eggyel. Ha értéke nem nulla, akkor ugrik a megadott helyre. Feltételes ciklusok a LOOPZ, LOOPE, LOOPNZ és LOOPNE 14:33:48
Elágazások és ugrások – – –
–
Az ugróutasításoknak két fajtája van, a feltételes és a feltétel nélküli Feltétel nélküli ugrás: JMP Feltételes ugrások mindig valamelyik flag állapotát vizsgálják. Ilyen utasítások a: JZ ugrás, ha ZF=0 JNZ ugrás, ha ZF<>0 JC ugrás, ha CF=0 JNC ugrás, ha CF<>0 Összehasonlítás után: JA, JAE, JE, JNE, JB, JBE
Készítette: Markó Imre 2006
14:33:48
Regiszterléptető műveletek Két fajtája képzelhető el, a léptetés és a forgatás. Léptetésnél a kilépő bit a CARRY-be, forgatásnál pedig a másik oldalon visszalép. ROL, ROR kilépő bit visszajön + CF-be RCL, RCR körülforgatás a CF-en keresztül SHL, SHR kilépő bit CF-be, 0 lép be SAR kilépő bit CF-be, nem lép be semmi A bitek léptetése osztásnak (jobbra léptetek) vagy szorzásnak (balra léptetek) felel meg.
Készítette: Markó Imre 2006
14:33:48
Veremműveletek Speciális LIFO szervezésű tár. Két célra használjuk, adatok átmeneti tárolására és paraméterátadásra. A verem vége rögzített, az eleje változik. A tényleges értéket az SP mutatja. Ez adatbehelyezéskor csökken, kivételkor növekszik. PUSH AX elmenti az AX értékét a verembe POP AX a verem legfelső elemét az AX-be teszi PUSHA általános regiszterek a verembe POPA általános regiszterek visszatöltése
Készítette: Markó Imre 2006
14:33:48
Szubrutinhívás A szubrutinok a struktúrált programozás részét képezik. A programon belül meghívunk egy előre elkészített programrészletet, majd folytatjuk az eredeti program végrehajtását. CALL szubrutin meghívása RET visszatér az eredeti programpozícióba A visszatérési cím a veremben tárolódik el. Azokat a regisztereket is ide kell menteni, amelyeket a szubrutin módosítani fog.
Készítette: Markó Imre 2006
14:33:48
Megszakítások A megszakítások speciális szubrutinok. INT <megszakítási vektor sorszáma> Folyamata: PUSHF IF ⇐ 0 TF ⇐ 0 PUSH CS PUSH IP IP ⇐ megfelelő érték CS ⇐ megfelelő érték A megszakítás rutin végén IRET áll. Készítette: Markó Imre 2006
14:33:48
Egyéb utasítások – – – – – – – – –
XCHG LEA NOP HLT WAIT LOCK adatsínt LAHF SAHF IN, OUT
két regiszter értékének felcserélése speciális MOVE No Operation Processzor megáll, csak RESET várakozási állapot beiktatása a következő utasítás idejére lezárja az a flaget az AH-ba tölti az AH tartalmát a flagbe tölti adatcsere a portokon keresztül
Készítette: Markó Imre 2006
14:33:48
Stringkezelő utasítások – – – – –
MOVSB LODSB STOSB CMPSB SCASB
másolás betöltés tárolás összehasonlítás összehasonlítás
Készítette: Markó Imre 2006
14:33:49
FLAG utasítások A CARRY flag állítása STC, CLC, CMC – INT flag állítása STI, CLI – Irányjelző flag állítása STD, CLD A MOVE utasítás nem állítja a FLAG biteket –
Készítette: Markó Imre 2006
14:33:49