Az GOTO offset utasítás. P relatív: P értékéhez hozzá kell adni a két bájtos, előjeles offset értékét. Mic 1 program: Main1 P = P + 1; fetch; goto() goto1 OP=P 1 // Main1 nél : P=P+1 1. bájt goto P=P+1; fetch // offset. bájtja goto3 =<<8 // 1. (előjeles) bájt <<8. bájt goto4 =U OR // 1 bites offset goto5 P=OP+; fetch; goto Main1 // P új értéke Main1 P = P + 1; fetch; goto() opkód goto5 kezdeményezi a P új értékénél lévő bájt olvasását, Main1 ben goto() már a folytatás első opkódjának megfelelő címre ugrik! 1 Gyakorlásra mic1_5.swf A IFLT offset utasítás (Mic 1) Kivesz egy szót a veremből és ugrik, ha negatív. iflt1 == 1; rd //. szó a veremből iflt OP= // mentése iflt3 = // = a verem új teteje iflt4 =OP; if() goto T; else goto F //elágazás T OP=P 1; goto goto // igaz ág F P=P+1 // hamis ág, át kell lépni offset et F P=P+1; fetch; goto (Main1) // P új értéke, az offset utáni utasításának betöltése Fontos: T címe = F címe + 0x100 3 Gyakorlásra mic1_5.swf 4 (4.1. ábra), A PP által mutatott területen a disp ( bájt) indexű szó mutat a meghívandó metódus kezdő szavára. Ennek a szónak az első két bájtja tartalmazza a metódus paramétereinek számát, a második két bájtja a metódus lokális változóinak számát. A metódus végrehajtása a metódus 5. bájtján indul. 5 (~4.1. ábra) ívó je ívó P je etett paraméterek A hívó lokális területe verem a hívás előtt. paraméter OJREF új alapja alapja hívás. paraméter előtt verem a hívás után ívott lokális. paraméter. paraméter 1
4.17. ábra A PP által mutatott táblázat disp indexű eleme a meghívandó metódusra mutat. disp első bájtjának be olvasását már Main1 kezdeményezte. invo1 P = P + 1; fetch // disp. bájtját olvassa invo = U << 8 // disp 1. bájtját lépteti invo3 = U OR // =disp invo4 = PP + ; rd // kezdő cím olvasása invo5 OP = P + 1 // OldP = visszatérési cím 7 IVOKEVIRTUAL: a metódus elején lévő bájt tartalmazza a paraméterek számát. invo P = ; fetch // P: új metódus eleje invo7 P = P + 1; fetch // paraméterek száma invo8 = U << 8 invo9 = OR U // = paraméterek száma invo10 = // OJREF is paraméter! invo11 = = + 1 // OJREF címe ban tároljuk ideiglenesen OJREF címét, ide mutat majd a hívott metódus je. A μutasítások sorrendje más, mint a könyvben! 8 (~4.1. ábra) ívó je ívó P je etett paraméterek A hívó lokális területe verem a hívás előtt. paraméter OJREF új alapja alapja hívás. paraméter előtt verem a hívás után ívott lokális. paraméter. paraméter 9 IVOKEVIRTUAL: lokálisok száma bájt a paraméterek száma után, OJREF helyére kerül a lokális változók fölötti címre mutató Kapcsoló mutató. A mutatott címre kerül majd a ívó P je. = = OJREF címe invo1 P = P + 1; fetch // lokálisok száma 1. bájt invo13 P = P+ 1; fetch // lokálisok száma. bájt invo14 = U << 8 invo15 = OR U // = lokálisok száma invo1 = + + 1; wr // OJREF cseréje = ívó P jének címe 10 etett paraméterek A hívó lokális területe verem a hívás után (~4.1. ábra) ívó je ívó P je verem a hívás előtt. paraméter OJREF új alapja alapja hívás. paraméter előtt ívott lokális. paraméter. paraméter 11 IVOKEVIRTUAL: a hívó P je és je = OJREF címe invo17 = = // hívó P jének helye invo18 = OP; wr // hívó P jének vermelése invo19 = = + 1 // hívó jének a helye invo0 = ; wr // hívó jének vermelése invo1 P = P + 1; fetch // utasítás olvasás invo = // új értéke (a verem új alapja) invo3 = ; goto Main1 // =hívó je = nélkül a címét (a hívott jét) tartalmazná! 1
etett paraméterek A hívó lokális területe Verem IRETUR előtt Visszatérési é. ívó je ívó P je ívott lokális. paraméter IRETUR ~4.1. ábra alapja IRETUR előtt Verem IRETUR után Visszatérési é i é.. paraméter alapja IRETUR után. paraméter 13 IRETUR // ~4.13. ábra iret1 = = ; rd // kapcs. mut. olvasása iret = // vár, hogy az olvasás befejeződjön iret3 = = ; rd // hívó P olvasása iret4 = + 1; rd // hívó címe iret5 P= ; fetch //hívó P, opkód olv. iret = // visszatérési érték címe iret7 = // hívó iret8 = ; wr; goto Main1 iret3 4: nem lehet SOURE operandus! 14 ázi feladat: A 4.17. ábra többi része. Továbbfejlesztések: több es rendszerek. 15 Gyakorlásra mic1_.swf 1 A mikroarchitektúra szint tervezése Mic 1: olcsó, de lassú. Sebesség növelés: rövidebb óraciklus, kevesebb μutasítás az utasítások végrehajtásához, az utasítások végrehajtásának átlapolása. 9 regiszterét 4 bittel címeztük: dekódolóra van szükség, növeli az adatút ciklus idejét! (4.. ábra) Úthossz (path length, a szükséges ciklusok száma) rövidítése: Main1 néha megspórolható, jobb mikroprogram vagy pl. P növelésére (ez legtöbbször fetch csel együtt történik) külön áramkör. A Main1 néha megspórolható: Minden IJVM utasítás értelmezése akkor fejeződik be (kezdődik), amikor a fetch; goto() végrehajtásra kerül (ez a Main1 ben volt). Ilyenkor nek a következő IJVM utasítás kódját kell tartalmaznia, és megkezdődik ennek az utasításnak az értelmezése. Ez a fetch az utasítás kódja utáni bájt olvasását kezdeményezi. Korábbi μutasítás ezt nem kezdeményezheti, mert akkor tartalmát fölülírná a goto() végrehajtása előtt. A következő IJVM értelmezésének első μutasítása nem használhatja taz adatúton, mert ilyenkor ben még az IJVM utasítás kódja található. 17 18 3
Main1 néha megspórolható (4.3 4. ábra): 0x57 POP legfelső szavát eldobja. pop1 == 1; rd //. szó címe, olvas pop // vár pop3 =; goto main1 //=a verem teteje Mi1P Main1 P=P+1;fetch;goto() //következő k ő ut. Új változat pop1 == 1; rd pop P=P+1; fetch pop3 =; fetch; goto() //következő ut. 19 P PP OP A ALU ALU P PP OP ALU ALU 4.1. ábra Mic 1 ~4.9. ábra áromes architektúra A 0 árom es architektúra Sok regiszter csatlakozhat az A hez, nemcsak (4.1., 4.9. ábra). A három es architektúra előnye a két es architektúrával szemben: pl. iload banb nem kll kell = (4.5. 5 ábra). ) ILOAD varnum // lokális változó a verembe varnum a lokális változó 8 bites indexe. 1 Mic 1 kód (4.5. ábra) iload1 = iload = U + ; rd iload3 = = + 1 iload4 P = P + 1; fetch; wr iload5 = ; goto main1 main1 P = P + 1; fetch; goto() árom es kód(4.. ábra) iload1 = U + ; rd iload = = + 1 iload3 P = P + 1; fetch; wr iload4 = iload5 P = P + 1; fetch; goto() ibás a könyvben lévő kód (4.. ábra), mert még nem áll rendelkezésre U értéke, mert az előző utasítás utolsó μutasításában volt az a fetch, amely az ILOAD operandusát olvassa. árom es kód(4.. ábra) iload1 = U + ; rd iload = = + 1 iload3 P = P + 1; fetch; wr iload4 = iload5 P = P + 1; fetch; goto() 3 Mic 1 kód (4.5. ábra) iload1 = iload = U + ; rd iload3 = = + 1 iload4 P = P + 1; fetch; wr iload5 = ; goto main1 main1 P = P + 1; fetch; goto() árom es kód(4.. ábra) iload1 P = P + 1; fetch iload = U + ; rd iload3 = = + 1 iload4 = ; wr iload5 P = P + 1; fetch; goto() 4 4
A P vel kapcsolatos teendők: P növelése 1 gyel, fetch, bájtos operandus olvasás a memóriából. ALU nál egyszerűbb áramkörrel megvalósíthatók. Utasításbetöltő egység (IFU Instruction Fetch Unit) ~4.7. ábra Memória felől Utasításbetöltő egység (IFU Instruction Fetch Unit) értelmezhet minden kódot, hogy kell e operandus, de egyszerűbb, ha a kódtól függetlenül előkészíti a következő 8 és 1 bites részt (4.7. ábra). Memória felé regiszter Legalacsonyabb bit I +1 P +1, 5 Utasításbetöltő egység (IFU Instruction Fetch Unit) ~4.7. ábra A memóriából szavanként történik az olvasás a léptető regiszter utolsó 4 bájtjára, amint lehetséges. A léptető regiszterből újra föltöltésre kerül és, amint olvasás történik ből, vagy ből, ilyenkor a léptető regiszter tartalma 1 vagy bájttal balra lép. Memória felől regiszter I mutatja a legközelebb betöltendő szó címét. I módosul, amint a léptető regiszterbe írta a következő 4 bájtot, de P csak akkor, ha 1 vagy olvasása történik. Memória felől Memória felé regiszter Legalacsonyabb bit I +1 P +1, 7 8 a P értéket kap a ről, azt I is megkapja. Ilyenkor a mikroprogramnak várnia kell a léptető regiszter, 1 és feltöltésére. Memória felől Véges állapotú gép FSM Finite State Machine (4.8. ábra) 0,, : állapotok, élek: események. Szó olvasás Szó olvasás Szó olvasás Memória felé regiszter Legalacsonyabb bit I +1 P +1, 1 1 1 1 1 1 0 1 3 4 5 9 30 5
IFU P 1 PP OP ALU ALU A Mic (4.9. ábra) Main1 fölösleges, P növeléséhez nem kell az ALU, a 8 és 1 bites operandusokat IFU adja (nincs fetch). Mic (4.9. ábra) Több hardver kell az A címzése és IFU miatt, de kevesebb μutasítás kell, pl. WIDE ILOAD hoz az eddigi 9 helyett csak 4 (v.ö. 4.17. ábra). WIDE ILOAD varnum //beteszi a 1 bites varnum indexű lokális változót a verembe: wide1 goto (1 OR 0x100) w_iload1 =+U; rd; goto iload iload1 =+1U; rd // változó olvasása iload ==+1 // vermelés előkészítése iload3 =; wr; goto (1) 31 3 Vezérlés átadáskor várni kell, míg az IFU elkészül (a léptető megkapja az új értékét, 1 és feltöltése megtörténik). GOTO offset az utasítás P relatív: P értékéhez hozzá kell adni a két bájtos, előjeles offset értékét. Mic program: goto1 =P 1 // IFU már csinált P=P+1 et goto P=+ // itt folytatódik a program goto3 // IFU még nincs kész, várni kell! goto4 goto (1) // a folytatás 1. utasítása Az IFLT offset utasítás (Mic ) Kivesz egy szót a veremből és ugrik, ha negatív. iflt1 == 1; rd //. szó a veremből iflt OP= // mentése iflt3 = // = a verem új teteje iflt4 =OP; if() goto T; else goto F //elágazás T =P 1; goto goto // igaz ág F = // hamis ág, eldobja offset et F goto (1) // a folytatás 1. utasítása 33 34 IFU P 1 PP OP ALU ALU A A Mic adatút idejének összetevői (4.9. ábra): az A és ek feltöltése a regiszterekből, az ALU és a léptető munkája, az eredmények tárolása a ről. IFU P 1 PP OP A ALU ALU A sővonalas terv: Mic 3 (4.31. ábra) A, és tároló. 3 mikrolépés (μlépés): A, feltöltése, feltöltése az ALU és a léptető eredménye alapján, tárolása regiszterbe. 3 μlépés egyidejűleg (párhuzamosan) végrehajtható! 35 3
Pl.: a verem két felső szavának cseréje Mic 3 on (4.33. ábra): swap1 swap swap3 swap4 swap5 swap cy = 1;rd 1 = = =; wr = 1 = 3 = = Várni kell! 4 rd = Várni kell! = = 1;wr =; goto(1) Valódi függőség RAW Read After Write! Elakadás 5 = = = 7 = = = 8 wr = = 1 = 9 = = 10 wr = 11 eldugaszolja a csővezetéket! goto(1) Mire szolgál a GOTO utasítás? ogy valósítható meg a GOTO utasítás Mic 1 en? Melyek az IJVM feltételes ugró utasításai? Mire szolgál az IFLT utasítás? ogy valósítható meg az IFLT utasítás Mic 1 en? 37 38 Mit nevezünk metódusnak? IJVM melyik utasítása szolgál a metódus hívására? Mire szolgál az IVOKEVIRTUAL utasítás? ol található az utasítással hívott metódus? Milyeninformáció információ van a metódus elején? ogy néz ki a veremnek egy metódus számára látható része? 39 Mely regiszterek tartalmát kell menteni metódus hívás esetén? IJVM melyik utasítása szolgál a metódusból való visszatérésre? ogy találhatók meg a mentett regiszter tartalmak visszatéréskor? Miért nem lenne jó IRETUR megvalósításában: iret3: = ; rd iret4: = + 1? ol található a metódus visszatérési értéke az IRETUR utasítás végrehajtása után? Elemezze a 4.17. ábra programjait! 40 Az IRETUR utasítás mikroprogramozását úgy is megvalósíthattuk volna, hogy a t nem használjuk, hanem értékéből indulunk ki. ogyan? Így 7 utasítás is elegendő lett volna. Miért jobb mégis az előadáson bemutatott megoldás? Mi az úthossz? Milyen lehetőségek vannak a Mic 1 gyorsítására? Jellemezze a 3 es architektúrát! Mi az előnye a három es architektúrának a Mic 1 gyel szemben? Soroljafel a Mic 1 ésmic közötti különbségeket! Miért eredményeznek ezek gyorsítást? 41 4 7
Mi az utasítás betöltő egység (IFU) feladata? Milyen részei vannak az IFU nak? Mi az I szerepe az IFU ban? Írja le az I és a P regiszter kapcsolatát? ogy működik az IFU? ogyábrázolható véges állapotú géppel (FSM) az IFU működése? Mi a különbség a Mic és Mic 3 között? Miért eredményez ez gyorsítást? A SWAP utasítás (a verem két felső szavának cseréje) Mic 3 on négy μutasítással megoldható kilenc μlépésben. ogyan? A megoldás nem vihető át Mic re. Miért? A feladat nehéz! Élesen ki kell használni az adatút szakaszainak időzítését. Ezt ugyan nem tárgyaltuk, de kikövetkeztethető abból, hogy az egyesszakaszokszakaszok egyidejűleg működhetnek. 43 44 Az előadáshoz kapcsolódó Fontosabb témák Feltétlen és feltételes elágazó utasítás megvalósítása Mic 1 en. Utasítás betöltő egység. Mic. sővonalas terv: Mic 3. 45 8