Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Feltételezett végrehajtás (Speculative Execution) ábra

Hasonló előadás


Az előadások a következő témára: "Feltételezett végrehajtás (Speculative Execution) ábra"— Előadás másolata:

1 Feltételezett végrehajtás (Speculative Execution) 4.45. ábra
Alap blokk (basic block): lineáris kód sorozat. Emelés: egy utasítás előre hozatala egy elágazáson keresztül (lassú műveletek esetén nyerhetünk vele). Ha valamit nem biztos, hogy meg kell csinálni, de nincs más dolga a gépnek, akkor megteheti, de csak „firkáló” regiszterekbe írhat. Ha később kiderül, hogy kell, akkor átírja az eredményeket a valódi regiszterekbe, ha nem kell, elfelejti. Máté: Architektúrák 9. előadás

2 Feltételezett végrehajtás (Speculative Execution)
Mellékhatások: fölösleges gyorsító sor csere, SPECULATIVE_LOAD csapda (pl. x=0 esetén if(x>0) z=y/x;), mérgezés bit. Máté: Architektúrák 9. előadás

3 Halmaz kezelésű gyorsítótár (4.39. ábra)
Ha egy program gyakran használ olyan szavakat, amelyek távol vannak egymástól, de ugyanoda képződnek le a gyorsítótárba, akkor sűrűn kell cserélni a gyorsító sort. Ha minden címhez n bejegyzés van, akkor n utas halmazkeresésű gyorsítótárról beszélünk. Ritka a több, mint 4 utas kezelés. LRU (Least Recently Used) algoritmus: gyorsító sor betöltésnél a legrégebben használt sor kerül ki a gyorsítótárból. Máté: Architektúrák 9. előadás

4 Memóriába írás Stratégiák:
Írás áteresztés (write through): az írás a memóriába történik. Ha a cím a gyorsítóban van, oda is be kell írni, különben el kellene dobni a gyorsító sort. Késleltetett írás (write deferred, write back): ha a cím bent van a gyorsító tárban, akkor csak a gyorsító tárba írunk, a memóriába csak gyorsító sor cserénél. Ha a cím nincs a gyorsító tárban, akkor előtte betölthetjük: írás allokálás (write allocation) – többnyire ezt alkalmazzák késleltetett írás esetén. Máté: Architektúrák 9. előadás

5 Kezdetben: kevés, egyszerű utasítás.
Történeti áttekintés Kezdetben: kevés, egyszerű utasítás. Később: sok, egyre összetettebb utasítás. IBM 360-as család. Lefelé kompatibilis, csak a nagyobb gépek hajtják végre hardveresen az utasításokat (gyors), a kicsik interpretálnak (olcsó). Interpretálás előnyei: hibásan interpretált utasítások könnyű javítása, új utasítások egyszerű hozzáadása, strukturált felépítés; összetett utasítások hatékony fejlesztése. 58-59 Máté: Architektúrák 9. előadás

6 az első 8 bites processzorok:
Hetvenes évek vége: a csak olvasásra használható gyors memóriák (vezérlőtárak – ROM Read Only Memory) megjelenése és beépülése a CPU-ba. az első 8 bites processzorok: - Motorola egyszerű utasításokkal nagy interpretert épít (siker), - Zilog 8000 bonyolult hardver utasításokat (kudarc). 60 Máté: Architektúrák 9. előadás

7 A nyolcvanas évek elejétől: A központi memória sebessége csaknem elérte a vezérlő tárak sebességét.
RISC (Reduced Instruction Set Computer - csökkentett utasításkészletű számítógép): SPARC, DEC Alpha. Cél: minél gyorsabban indítani és átlapolni a gyors, egyszerű utasításokat. Az utasítások általában két regiszteren hajtanak végre műveletet, az eredményt egy harmadik regiszterbe tárolják. CISC (Complex Instruction Set Computer, összetett utasításkészletű számítógép): IBM nagy gépek, VAX, …. Összetett, és lassabb utasítások. 60-61 Máté: Architektúrák 9. előadás

8 hardveres (nem mikroprogramozott) utasítások,
RISC tervezési elvei hardveres (nem mikroprogramozott) utasítások, az utasítások indítási sebességének maximalizálása, könnyen dekódolható utasítások, memóriához fordulás csak betöltés (load) és tárolás (store) esetén. Sok regiszter kell! Miért nem nyert a RISC? Kompatibilitás + az elveket az Intel is részben átveszi (486-tól RISC mag). 62-63 Máté: Architektúrák 9. előadás

9 Felülről kompatibilis az I8088, …, Pentium Pro-val.
Pentium II Felülről kompatibilis az I8088, …, Pentium Pro-val. 29.000, …, 7.5 millió tranzisztor, 242 láb, 233 MHz, 32 bites gép, 64 bites adat sín. SEC (Single Edge Cartridge) tokozás ( ábra). Két szintű belső gyorsító tár, 32 B-os gyorsító sor : 16 KB utasítás + 16 KB adat (gyors, mint a CPU), 512 KB közös másodlagos (fele olyan gyors). 1 vagy 2 CPU közös memóriával (szimatolás - snoop). Gépi utasítások  RISC szerű mikroutasítások, több mikroutasítás futhat egyszerre: szuperskaláris gép. Két külső szinkron sín (PCI és ISA): ábra. Máté: Architektúrák 9. előadás

10 Pentium II logikai lábkiosztása (3.44. ábra)
Sín ütemezés: BPRI#: magas prioritású igény engedélyezése, LOCK#: sín foglalás több ciklusra, Kérés: A#: 8 bájtos adat címe (64 GB címezhető), ADS#: a cím érvényes, REQ#: kívánság, Válasz: RS#: státus, TRDY#: a szolga tud adatot fogadni, Adat: D#: 8 bájtos adat, DRDY#: az adat a sínen van, DBSY#: a sín foglalt. RESET#: a CPU alapállapotba hozatala, Megszakítások: régi vezérlő, és APIC (Advanced Programmable Interrupt Controller), VID: 5 különböző tápfeszültség kódolása, Máté: Architektúrák 9. előadás

11 Kérés: cím a sínre, kérés indítása,
Pentium II memória sín A memóriaigények, tranzakciók 6 állapota: 6 fázisú csővezeték (3.44. ábra bal oldala, ábra) fázisonként külön vezérlő vonalakkal (amint a mester megkap valamit, elengedi a vonalakat): 0. Sín ütemezés (kiosztás, bus arbitration): melyik sínmester következik, Kérés: cím a sínre, kérés indítása, Hibajelzés: a szolga hibát jelez(het), Szimatolás: a másik CPU gyorsító tárában, Válasz: kész lesz-e az adat a következő ciklusban, Adat: megvan az adat. Máté: Architektúrák 9. előadás

12 Pentium II CPU mikroarchitektúrája (4.46. ábra)
Magas szintű csővezeték: Betöltő/Dekódoló, Elküldő/Végrehajtó és Befejező egység, ezek a Mikroművelet tárterületen (ReOrder Buffer – ROB, átrendező puffer) keresztül kommunikálnak. Betöltő/Dekódoló: az utasításokat szétdarabolja, a mikroműveleteket ROB-ba teszi. Elküldő/Végrehajtó: a ROB-ban lévő utasításokat – esetleg eltérő sorrendben – végrehajtja. Befejező: sorrendben befejezi az összes mikroművelet végrehajtását, frissíti a regisztereket. memória – sín illesztő – gyorsító tárak Máté: Architektúrák 9. előadás

13 Betöltö/Dekódoló (4.47. ábra):
IFU0: ha a puffere üres, 32 bájtos gyorsító sort tölt be. IFU1: legfeljebb 30 utasítás határát megkeresi. IFU2: beteszi egy sorba az utasításokat. ID0: kettő az egyszerű utasításokat, a harmadik a többit dekódolja (mint Mic-4), mikroműveletenként: műveleti kód, két forrás és egy cél regiszter. ID1: sorba állító, statikus + dinamikus elágazás jövendölés (4 bites előzmény figyelés). RAT: regiszter lefoglaló, 40 firkáló regiszter WAR és WAW függőség feloldására, regiszter átnevezések. ROB: max. 3 mikroművelet kiosztása ciklusonként. Máté: Architektúrák 9. előadás

14 Portok: ezekhez kapcsolódnak a végrehajtó egységek.
Elküldő/Végrehajtó (4.48. ábra): ütemezi és végrehajtja a mikroműveleteket, feloldja a függőségeket és erőforrás igény ütközéseket. Egy ciklusban öt művelet is kiosztható. Foglalóhely: 20 elemű sor azoknak a műveleteknek, amelyeknek minden operandusa megvan. Portok: ezekhez kapcsolódnak a végrehajtó egységek. Ha több művelet osztható ki egy végrehajtó egységnek, akkor bonyolult algoritmus dönt, pl.: egy elágazás végrehajtása elsőbbséget élvez egy aritmetikai művelettel szemben. Portonként sorbaállás lehetséges. Máté: Architektúrák 9. előadás

15 Befejező (4.46. ábra): Ez küldi az eredményeket a megfelelő helyre – regiszterbe és az Elküldő/Végrehajtóba, ahol az eredményre várnak RAW függőség esetén. Az utasításokat a programban lévő sorrendben fejezi be, még akkor is, ha a végrehajtás sorrendje ettől eltért. A feltételesen végrehajtott utasítások eredményét eldobja, ha ezeket az utasításokat nem kellett volna végrehajtani. Máté: Architektúrák 9. előadás

16 64 B-os gyorsító sor (cash line).
UltraSPARC II 64 bites RISC gép, felűről kompatibilis a 32 bites SPARC V8 architektúrával. CPU, 5.4 millió tranzisztor, 4 CPU közös memóriával használható. 787 láb ( ábra). 64 (jelenleg csak 44) bites cím és 128 bites adat lehetséges. 64 B-os gyorsító sor (cash line). Belső gyorsító tár (16 KB utasítás + 16 KB adat). Külső 512 KB - 16 MB. 8 K K gyorsító sor. A címzéséhez 13 – 18 bit szükséges. A CPU mindig 18 bites Line címet (Címkeazonosítót) ad át. Csak maximális méret esetén van mind a 18 bit kihasználva. , Máté: Architektúrák 9. előadás

17 512 KB –os gyorsító tár esetén a 44 bites cím felosztása (3. 47
512 KB –os gyorsító tár esetén a 44 bites cím felosztása (3.47. ábra, 3_47_abrahoz): Tag (Címkeadat): 25 bit, Line (Címkeazonosító): 13 bit (a 18-ból az 5 legmagasabb helyértékű bitet nem használja fel), bájt cím: 6 bit = 44 bit. 16 MB –os tár esetén 20 bites Tag is elég lenne, de ilyekor – hogy a CPU egységesen működhessen – a gyorsító tár Tag –et kiegészíti Line 5 legmagasabb helyértékű bitjével. Az Adat címe (3.47. ábra) a gyorsító sor címén kívül még 2 bitet tartalmaz, mert egy átvitel során a gyorsító sornak csak negyed része (16 bájt) mozgatható. , Máté: Architektúrák 9. előadás

18 SBus: 25 MHz-es szinkron sín a perifériáknak. A memóriához lassú!
UltraSPARC II ( ábra) SBus: 25 MHz-es szinkron sín a perifériáknak. A memóriához lassú! UPA (Ultra Port Architecture) sín, kapcsoló vagy mindkettő. A memóriák és max. 4 CPU kommunikációját kezeli. Sor és oszlop cím. Két független tranzakció sorozatot tud kezelni egyidejűleg (írás, olvasás), mindkettőben több függőben lévő tranzakció lehetséges. UDB II (UltraSPARC Data Buffer II): Puffereli a beolvasott, kiírandó adatokat. Gondoskodik a tényleges memóriába írásról, az átviteleknél hiba javító kódot generál/ellenőriz. , Máté: Architektúrák 9. előadás

19 UltraSPARC II CPU mikroarchitektúrája
A SPARC sorozat RISC elgondoláson alapul. A legtöbb utasításnak két forrás és egy cél regisztere van. PREFETCH utasítás feltételezett betöltésre, nem okoz hibát gyorsító tár hiánykor. 2 bites elágazás jövendölő + statikus elágazás jövendölés. Máté: Architektúrák 9. előadás

20 Az egész és lebegőpontos egység tejesen független.
Előre betöltő/Elküldő (4.49. ábra): ciklusonként négy utasítást tölt be – egy fél gyorsítósort. Óra ciklusonként 4 utasítást tud kiosztani. A kiosztás sorrendben történik. Maximum 12 elemű sort épít. Dekódoló: Néhány „irányító” bitet ad minden utasításhoz, ezzel a későbbi folyamatot gyorsítja. Csoportosító: egyszerre maximum 4 (2 fix- és 2 lebegőpontos) utasítást tud kiosztani a sorból. A kiosztás és befejezés a sorrendtől eltérő lehet. Az egész és lebegőpontos egység tejesen független. Betöltő/Tároló: írás áteresztő. A gyorsítótár hiány elkerülésére külön sor a függőben lévő LOAD-ok és STORE-ok számára. Máté: Architektúrák 9. előadás

21 9 szakaszos csővezeték (4.50. ábra)
ciklusonként max. 4 utasítás az I-gyorsítóból, néhány irányító bitet tesz az utasításokhoz, annyi utasítást oszt ki, ahányat tud, a fix pontos utasítások 1 ciklus alatt végrehajtódnak + 3 üres szakasz, a gyorsítótár szakaszban LOAD és STORE még dolgozik + 2 üres szakasz, a lebegőpontos utasítások a regiszterek eléréséhez általában 1 szakaszt igényelnek + 3-at a végrehajtáshoz, csapda kezelés regiszterekbe írás Máté: Architektúrák 9. előadás

22 JVM-et (Java Virtual Machine) megvalósító hardver.
picoJava II (3.48. ábra). JVM-et (Java Virtual Machine) megvalósító hardver. 0,1, 2, 4, 8 vagy 16 KB-os direkt leképezésű I és 2 utas hamaz vezérelt D gyorsítótár, 16 bájtos gyorsító sor, késleltetett írás, írás allokálás. Szabványos BGA (Ball Grid Array) tok, 316 láb SUN microJava 701, benne SUN picoJava II CPU. memória sín interfész (64 bites adat, 32 bites cím), 32 bites PCI sín interfész: vezérlés, órák, megszakítás, tesztelés, 16 I/O vonal: nyomógombok, lámpák, kapcsolók Flash PROM. Elsősorban beépített számítógépekben alkalmazzák. , 318 Máté: Architektúrák 9. előadás

23 picoJava II CPU mikroarchitektúrája (4.51. ábra)
Regiszter oszlop, a verem fölső 64 szavát tartalmazza. A regiszter oszlop közvetlenül, a D gyorsító egy ciklus késleltetéssel érhető el. Automatikus eljárás (cselező – dribbling): a regiszter oszlop ne legyen túl tele vagy túl üres. Ciklikus puffer 2 mutatóval: nem kell másolgatni. Nem szuperskaláris: a mikroműveleteket a kiosztás sorrendjében hajtja végre és fejezi be (a fő cél az volt, hogy olcsó legyen). Máté: Architektúrák 9. előadás

24 picoJava II csővezetéke (4.52. ábra)
Betöltés: egyszerre 8 bájt az I gyorsítótárból. Dekódolás: RISC jellegű, két forrás és egy cél regisztert tartalmazó mikroutasításokat állít elő CISC utasítás folyamból. Operandus betöltés a veremből (regiszter oszlopból). Utasítás végrehajtás. D gyorsítóba írás, ha kell. Eredmények verembe írása, ha kell. Máté: Architektúrák 9. előadás

25 Utasítás összevonás, pl.: n=k+m; (4.53. ábra)
Tegyük fel, hogy k, m, n rendre a 7., 1. és 3. lokális változó, akkor egy lehetséges IJVM program: iload 7 // a 7. lokális változó a verem tetejére, iload 1 // az 1. lokális változó a verem tetejére, iadd // a verem tetején lévő két regiszter // összege a verem tetejére, istore 3 // a verem tetejét a 3. lokális változóba. A dekódoló egyetlen mikroműveletté vonja össze. Máté: Architektúrák 9. előadás

26 Utasítások összevonása (4. 54. ábra)
Utasítások összevonása (4.54. ábra). JVM-nek több utasítása van, mint IJVM-nek! A dekódoló 74 bites mikroműveleteket oszt ki, ezek legtöbbje egy kódot és három regisztert tartalmaz, és egy ciklusban végrehajtható. Figyeli, hogy a sorozat megfelel-e egy legfeljebb 4 hosszú mintának (4.55. ábra). Ha megfelel, akkor a sorozatot egyetlen mikroutasítással helyettesíti. Elágazás jövendölés: nem lesz elágazás! Inkább olcsó, mint bonyolult hardver. Máté: Architektúrák 9. előadás

27 egy CISC utasítás → több RISC mikroutasítás
Összehasonlítás Pentium II CISC gép egy CISC utasítás → több RISC mikroutasítás UltraSPARC II RISC gép picoJava II verem gép, sok memória hivatkozás több CISC utasítás → egy RISC mikroutasítás Máté: Architektúrák 9. előadás

28 Makró és blokk ismétlés
Makró definíció: M_név MACRO [fpar1[,fpar2...]] ; makró fej (kezdet) ; makró törzs ENDM ; makró vége fpar1,fpar formális paraméterek vagy egyszerűen paraméterek. A makró definíció nem lesz része a lefordított programnak, csupán azt határozza meg, hogy később mit kell a makró hívás helyére beírni (makró kifejtés, helyettesítés). A makró törzsön belül előfordulhat makró hívás és másik makró definíció is. A70-71 Máté: Architektúrák 9. előadás

29 apar1,apar2... aktuális paraméterek vagy argumentumok.
Makró hívás: M_név [apar1[,apar2...]] apar1,apar2... aktuális paraméterek vagy argumentumok. A műveleti kód helyére írt M_név hatására a korábban megadott definíció szerint megtörténik a makró helyettesítés, más néven makró kifejtés. Ez a makró törzs bemásolását jelenti, miközben az összes paraméter összes előfordulása a megfelelő argumentummal helyettesítődik. A helyettesítés szövegesen történik, azaz minden paraméter – mint szöveg – helyére a megfelelő argumentum – mint szöveg – kerül. A helyettesítés nem rekurzív. Makró hívás argumentuma sem lehet makró hívás. Az argumentumnak megfelelő formális paraméternek lehet olyan előfordulása, amely a későbbiek során makró hívást eredményez. A71 Máté: Architektúrák 9. előadás

30 Dupla szavas összeadás: (DX:AX)(DX:AX)+(CX:BX) Eljárás deklaráció:
EDADD PROC NEAR ADD AX,BX ADC DX,CX RET EDADD ENDP Makró definíció: MDADD MACRO ENDM A72 Máté: Architektúrák 9. előadás

31 Futás közben felhívásra kerül az EDADD eljárás
Ha a programban valahol dupla szavas összeadást kell végezzünk, akkor hívnunk kell az eljárást illetve a makrót: Eljárás hívás: CALL EDADD Makró hívás: MDADD Futás közben felhívásra kerül az EDADD eljárás Fordítás közben megtörténik a makró helyettesítés: ADD AX,BX ADC DX,CX Futás közben ez a két utasítás kerül csak végrehajtásra. A72 Máté: Architektúrák 9. előadás

32 Látható, hogy eljárás esetén kettővel több utasítást kell végrehajtanunk, mint makró esetében (CALL EDADD és RET). Még nagyobb különbséget tapasztalunk, ha (CX:BX) helyett paraméterként kívánjuk megadni az egyik összeadandót: A72 Máté: Architektúrák 9. előadás

33 EDADD2 PROC NEAR PUSH BP MOV BP,SP ADD AX,4[BP]
Eljárás deklaráció: EDADD2 PROC NEAR PUSH BP MOV BP,SP ADD AX,4[BP] ADC DX,6[BP] POP BP RET 4 EDADD ENDP Makró definíció: MDADD2 MACRO P IFB P ADD AX,BX ADC DX,CX ELSE ADD AX,P ADC DX,P+2 ENDIF ENDM A72-73 Most sem része a makró definíció a lefordított programnak. Máté: Architektúrák 9. előadás

34 Fordítás közben a hívás az ADD AX,[SI] ADC DX,[SI]+2
Ha SI az összeadandónk címét tartalmazza, akkor a felhívások a következőképpen alakulnak: PUSH 2[SI] PUSH [SI] CALL EDADD2 MDADD2 [SI] Futás közben végrehajtásra kerül a paraméter átadás, az eljárás hívás, az eljárás: összesen 9 utasítás Fordítás közben a hívás az ADD AX,[SI] ADC DX,[SI]+2 utasításokra cserélődik, futás közben csak ez a két utasítás kerül végrehajtásra. A73 Máté: Architektúrák 9. előadás

35 Megjegyzés: Az MDADD2 makrót úgy írtuk meg, hogy ha híváskor nem adunk meg paramétert, akkor az eredeti feladatot oldja meg, ekkor ugyanis az IFB P feltétel teljesül. A73 Máté: Architektúrák 9. előadás

36 Paraméter másutt is előfordulhat a makró törzsben, nemcsak az operandus részen, pl.:
PL macro p1,P2 mov ax,p1 P2 p1 endm PL Adat, INC hatása: mov ax,Adat INC Adat A73-74 Máté: Architektúrák 9. előadás

37 & (helyettesítés operátor):
A &, %, ! karakterek továbbá a <> és ;; speciális szerepet töltenek be makró kifejtéskor. & (helyettesítés operátor): ha a paraméter – helyettesített – értéke része egy szónak; idézeten belüli helyettesítés: errgen macro y, x err&y db ’Error &y: &x’ endm errgen 5, <Unreadable disk> hatása: err5 db ’Error 5: Unreadable disk’ A74, de ez a példa és az & operátornak az idézeten belüli szerepe nem szerepel a könyvben. Máté: Architektúrák 9. előadás

38 err5 db ’Error 5: Unreadable’ adat macro p db p endm
<> (literál szöveg operátor): Ha aktuális paraméter szóközt vagy ,-t is tartalmaz. Az előző példa eredménye <> nélkül: err5 db ’Error 5: Unreadable’ adat macro p db p endm adat <’abc’,13,10,0> adat ’abc’,13,10,0 kifejtve: db ’abc’,13,10,0 db ’abc’ A75-76 Máté: Architektúrák 9. előadás

39 errgen 103, <Expression !> 255> hívásának hatása:
! (literál karakter operátor): Az utána következő karaktert makró kifejtéskor közönséges karakterként kell kezelni. Pl.: a korábbi errgen makró errgen 103, <Expression !> 255> hívásának hatása: err103 db ’Error 103: Expression > 255’ de errgen 103, <Expression > 255> err103 db ’Error 103: Expression’ A76 Máté: Architektúrák 9. előadás

40 kif <sym1+sym2>, %(sym1+sym2) kif txt, %txt
% (kifejezés operátor): Az utána lévő argumentum (kifejezés is lehet) értéke – és nem a szövege – lesz az aktuális paraméter. Pl.: sym1 equ 100 sym2 equ 200 txt equ ’Ez egy szöveg’ kif macro exp, val db ”&exp = &val” endm kif <sym1+sym2>, %(sym1+sym2) kif txt, %txt db ”sym1 + sym2 = 300” db ”txt = ’Ez egy szöveg’” A74, ez a példa nem szerepel a könyvben. Máté: Architektúrák 9. előadás

41 Az alábbi példa a % használatán kívül a makró törzsön belüli makró hívást is bemutatja:
ErrMsg MACRO text s = s+1 Msg %s,text ENDM Msg MACRO sz,str msg&sz db str A74-75 Máté: Architektúrák 9. előadás

42 Egy újabb hívás és hatása: ErrMsg ’invalid operand’
ErrMsg ’syntax error’ makró hívás hatására bemásolásra kerül (.LALL hatására látszik a listán) az s = s+1 Msg %s,’syntax error’ szöveg. s értéke itt 1-re változik. Újabb makró hívás (Msg). A %s paraméter az értékére (1) cserélődik, majd kifejtésre kerül ez a makró is, ebből kialakul: msg1 db ’syntax error’ Egy újabb hívás és hatása: ErrMsg ’invalid operand’ msg2 db ’invalid operand’ A74-75 Máté: Architektúrák 9. előadás

43 ;; (makró kommentár): A makró definíció megjegyzéseinek kezdetét jelzi
;; (makró kommentár): A makró definíció megjegyzéseinek kezdetét jelzi. A ;; utáni megjegyzés a makró kifejtés listájában nem jelenik meg. A76 Máté: Architektúrák 9. előadás

44 LOCAL c1[,c2...] c1, c2, ... minden makró híváskor más, ??xxxx alakú szimbólumra cserélődik, ahol xxxx a makró generátor által meghatározott hexadecimális szám. A LOCAL operátort közvetlenül a makró fej utáni sorba kell írni. KOPOG macro n LOCAL ujra mov cx,n ujra: KOPP loop ujra endm Ha a programban többször hívnánk a KOPOG makrót, akkor a LOCAL operátor nélkül az ujra címke többször lenne definiálva. A76 Máté: Architektúrák 9. előadás

45 shifts macro OPNAME ; makrót ; definiáló makró
Makró definíció belsejében lehet másik makró definíció is. A belső makró definíció csak a külső makró meghívása után jut érvényre, válik láthatóvá. Pl.: shifts macro OPNAME ; makrót ; definiáló makró OPNAME&S MACRO OPERANDUS,N mov cl, N OPNAME OPERANDUS,cl ENDM endm A77 Máté: Architektúrák 9. előadás

46 Ha ezt a makrót felhívjuk pl.: shifts ROR akkor a
RORS MACRO OPERANDUS,N mov cl, N ROR OPERANDUS,cl ENDM makró definíció generálódik. Mostantól meghívható a RORS makró is, pl.: RORS AX, 5 aminek a hatása: mov cl, 5 ROR AX,cl A77-78 Máté: Architektúrák 9. előadás

47 Makró definíció belsejében meghívható az éppen definiálás alatt lévő makró is (a makró hívás ezáltal rekurzívvá válik). PUSHALL macro reg1,reg2,reg3,reg4,reg5 IFNB <reg1> ;; ha a paraméter nem üres push reg1 ;; az első regiszter mentése PUSHALL reg2,reg3,reg4,reg5 ;; rekurzió ENDIF ENDM Most pl. a PUSHALL ax, bx, cx makró hívás hatása: push ax push bx push cx A76-77 Máté: Architektúrák 9. előadás

48 ennek hatására nem generálódik semmi.
Részletezve: PUSHALL ax, bx, cx makró hívás hatása: push ax PUSHALL bx, cx az újabb hívás hatása: push bx PUSHALL cx push cx PUSHALL ennek hatására nem generálódik semmi. A76-77 Máté: Architektúrák 9. előadás

49 CALLELJ macro ;; Eljárást beépítő és felhívó makró
FL_CALLELJ = 0 CALLELJ macro ;; Eljárást beépítő és felhívó makró LOCAL FIRST ;; nem lenne fontos IF FL_CALLELJ ;; a 2. hívástól igaz call Elj ;; elég felhívni az eljárást EXITM ;; makró helyettesítés vége ENDIF FL_CALLELJ = 1 ;; csak az első híváskor JMP FIRST ;; jut érvényre Elj proc ;; eljárás deklaráció ... ret Elj endp FIRST: call Elj ;; az eljárás felhívása endm A78 Máté: Architektúrák 9. előadás

50 Az első hívás hatására az
FL_CALLELJ = 1 JMP ??0000 Elj proc ... ret Elj endp ??0000: call Elj utasítások generálódnak (??0000 a FIRST-ből keletkezett). A78-79 Máté: Architektúrák 9. előadás

51 A további hívások esetén csak egyetlen utasítás, a call Elj
utasítás generálódik. A megoldás előnye, hogy az eljárás csak akkor része a programnak, ha a program tartalmazza az eljárás felhívását is, és mégsem kell törődjünk azzal, hogy hozzá kell-e szerkesztenünk a programhoz vagy se. A78-79 Máté: Architektúrák 9. előadás

52 Makró definíción belül előfordulhat másik makró definíció.
Megváltoztathatunk egy makró definíciót azáltal, hogy újra definiáljuk. Makró definíción belül előfordulhat másik makró definíció. E két lehetőség kombinációjából adódik, hogy a makró definíción belül megadhatunk ugyanarra a makró névre egy másik definíciót, ezáltal készíthető olyan makró, amely „átdefiniálja” önmagát. Az önmagát átdefiniáló makrók esetében a belső és külső definíciót lezáró ENDM utasítások között egyetlen utasítás sem szerepelhet – még kommentár sem! A79 Máté: Architektúrák 9. előadás

53 Önmagát „átdefiniáló” makró (az előző feladat másik megoldása):
CALLELJ2 macro ; külső makró definíció jmp FIRST Elj2 proc ; eljárás deklaráció ... ret Elj2 endp FIRST: call Elj2 ; eljárás hívás CALLELJ2 MACRO ; belső makró definíció call Elj2 ; eljárás hívás ENDM ; belső makró definíció vége endm ; külső makró definíció vége A79 Máté: Architektúrák 9. előadás

54 CALLELJ2 első hívásakor a kifejtés eredménye: jmp FIRST
Elj2 proc ; eljárás deklaráció ... ret Elj2 endp FIRST: call Elj2 ; eljárás hívás CALLELJ2 MACRO ; belső makró definíció call Elj2 ; eljárás hívás ENDM ; belső makró definíció vége A79 Máté: Architektúrák 9. előadás

55 A kifejtés CALLELJ2 újabb definícióját tartalmazza, ez felülírja az eredeti definíciót, és a továbbiak során ez a definíció érvényes. Ez alapján a későbbi hívások esetén call Elj2 a kifejtés eredménye. Megjegyezzük, hogy most is szerencsésebb lett volna a FIRST címkét lokálissá tenni. Igaz, hogy csak egyszer generálódik, de így annak, aki használni akarja a CALLELJ2 makrót, annak tudnia kell, hogy a FIRST címke már „foglalt”! A80 Máté: Architektúrák 9. előadás

56 pszeudo utasítással kitörölhetjük.
Ha egy M_név makró definíciójára nincs szükség a továbbiak során, akkor a PURGE M_név pszeudo utasítással kitörölhetjük. A80 Máté: Architektúrák 9. előadás

57 Blokk ismétlés kifejezés-szer: REPT kifejezés
Nemcsak a blokk definíciójának kezdetét jelölik ki, hanem a kifejtést (hívást) is előírják. A program más részéről nem is hívhatók. Blokk ismétlés kifejezés-szer: REPT kifejezés ... ; ez a rész ismétlődik ENDM A81 Máté: Architektúrák 9. előadás

58 Pl. a korábban ismertetett kopogást így is megoldhattuk volna: REPT N
KOPP ENDM Ha pl. N=3, akkor ennek a hatására a makró hívások generálódnak. Megjegyzés: Most N nem lehet változó – fordítási időben ismert kell legyen az értéke! A81 Máté: Architektúrák 9. előadás

59 Blokk ismétlés argumentum lista szerint:
IRP par, <arg1[,arg2...]> ... ; ez a rész többször bemásolásra ... ; kerül úgy, hogy par rendre ... ; felveszi az arg1,arg2... értéket ENDM IRP x, <1,2,3> db x db 1 db 2 db 3 A81-82 Máté: Architektúrák 9. előadás

60 Blokk ismétlés string alapján: IRPC par,string
... ; ez a rész kerül többször ; bemásolásra úgy, ... ; hogy par rendre felveszi ... ; a string karaktereit ENDM Ezt a string-et nem kell idézőjelek közé tenni (újabb ismétlés jelentene). Ha a string-en belül pl. szóköz vagy , is előfordul, akkor <> jelek közé kell tenni. Az előző feladatot így is megoldhattuk volna: IRPC x,123 db x A82 Máté: Architektúrák 9. előadás

61 IRPC x,ABCDEFGHIJKLMNOPQRSTUVWXYZ db ’&x’ ; nagy betűk
Másik példa: IRPC x,ABCDEFGHIJKLMNOPQRSTUVWXYZ db ’&x’ ; nagy betűk db ’&x+20h’ ; kis betűk ENDM Fontos az & jel, nélküle x nem argumentum, hanem string lenne! A82 Máté: Architektúrák 9. előadás

62 Makró definíció tartalmazhat blokk ismétlést, és blokk ismétlés is tartalmazhat makró definíciót vagy makró hívást. Pl.: A bit léptető és forgató utasítás kiterjesztésnek egy újabb megoldása: ; makrót definiáló blokkismétlés IRP OP,<RCR,RCL,ROR,ROL,SAR,SAL> OP&S MACRO OPERANDUS,N mov cl, N OP OPERANDUS,cl ENDM Ennek a megoldásnak előnye, hogy nem kell külön meghívnunk a külső makrót az egyes utasításokkal, mert ezt elvégzi helyettünk az IRP blokk ismétlés. A82-83 Máté: Architektúrák 9. előadás

63 Mit nevezünk alap blokknak? Mit nevezünk emelésnek?
Feladatok Mit nevezünk alap blokknak? Mit nevezünk emelésnek? Mit nevezünk feltételezett végrehajtásnak? Milyen mellékhatásai lehetnek a feltételezett végrehajtásnak? Mi a SPECULATIVE_LOAD lényege? Mi a mérgezés bit? Hogy működik a halmaz kezelésű gyorsítótár? Mit jelent az írás áteresztés (write through)? Mit jelent a késleltetett írás? Mit jelent az írás allokálás? Máté: Architektúrák 9. előadás

64 Minek a rövidítése a RISC? Minek a rövidítése a CISC?
Feladatok Minek a rövidítése a RISC? Minek a rövidítése a CISC? Mi jellemzi a RISC gépeket? Jellemezze a Pentium II processzort! Jellemezze a Pentium II és a memória sín kapcsolatát! Jellemezze a Pentium II mikroarchitektúráját! Mi a feladata a Betöltő/dekódoló egységnek? Mi a feladata az Elküldő/végrehajtó egységnek? Mi a feladata a Befejező egységnek? Máté: Architektúrák 9. előadás

65 Jellemezze az UltraSPARC II processzort!
Feladatok Jellemezze az UltraSPARC II processzort! Hogy valósul meg a memória címzés UltraSPARC II esetén! Jellemezze az UltraSPARC II mikroarchitektúráját! Mi az UPA feladata? Mi az UDB II feladata? Milyen az UltraSPARC II elágazás jövendölése? Mi a feladata az Előre betöltő/Elküldő egységnek? Mi a feladata a Dekódoló egységnek? Mi a feladata a Betöltő/Tároló egységnek? Jellemezze az UltraSPARC II csővezetékét! Máté: Architektúrák 9. előadás

66 Jellemezze a PicoJava II processzort!
Feladatok Jellemezze a PicoJava II processzort! Milyen szervezésű gyorsítótára van a PicoJava II-nek? Jellemezze a PicoJava II mikroarchitektúráját! Mi regiszter oszlop? Jellemezze a PicoJava II csővezetékét! Hasonlítsa össze a Pentium II, az UltraSPARC II és a PicoJava II mikroarchitektúráját! Máté: Architektúrák 9. előadás

67 Mi a (formális) paraméter? Mi az aktuális paraméter (argumentum)?
Feladatok Mi a makro definíció? Mi a makró fej? Mi a makró törzs? Mi a makró hívás? Mi a makró kifejtés? Mi a (formális) paraméter? Mi az aktuális paraméter (argumentum)? Mely karakterek játszanak speciális szerepet makró kifejtéskor? Melyik karakternek mi a szerepe? Adjon példát rá! Mi a szerepe a LOCAL pszeudó utasításnak? Máté: Architektúrák 9. előadás

68 Adjon példát makró hívást tartalmazó makró definícióra!
Feladatok Adjon példát makró hívást tartalmazó makró definícióra! Adjon példát makró definíciót tartalmazó makró definícióra! Mit kell tudni azokról a makró definíciókról, amelyek egy másik makró definícióban találhatók? Adjon példát olyan makró definícióra, amely tartalmazza saját hívását! Adjon példát olyan makró definícióra, amely tartalmazza saját átdefiniálását! Mit kell tudni az önmaguk átdefiniálását tartalmazó makró definíciókról? Máté: Architektúrák 9. előadás

69 Mi a hatása a PURGE pszeudó utasításnak? Mit jelent a blokk ismétlés?
Feladatok Mi a hatása a PURGE pszeudó utasításnak? Mit jelent a blokk ismétlés? Milyen blokk ismétlési lehetőségeket ismer? Mi a REPT pszeudó utasítás általános alakja? Mi az IRP pszeudó utasítás általános alakja? Mi az IRPC pszeudó utasítás általános alakja? Mondjon példát makrót definiáló blokkismétlésre! Máté: Architektúrák 9. előadás


Letölteni ppt "Feltételezett végrehajtás (Speculative Execution) ábra"

Hasonló előadás


Google Hirdetések