Máté: Architektúrák9. előadás1 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 (mikroprogramozá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.
Máté: Architektúrák9. előadás2 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).
Máté: Architektúrák9. előadás3 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.
Máté: Architektúrák9. előadás4 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).
Máté: Architektúrák9. előadás5 Pentium II CPU mikroarchitektúrája (4.46. ábra) Magas szintű csővezeték: Betöltő/Dekódoló: az utasításokat szétdarabolja, a RISC szerű mikroműveleteket ROB-ba teszi (ROB: ReOrder Buffer – mikroművelet tár terület). 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. Betöltő/dekódoló egység Elküldő/Végrehajtó egység Befejező egység mikroművelet tár terület
Máté: Architektúrák9. előadás6 Utasítás hossz dekódoló IFU1 1. szintű I gyorsító tár gyorsító sor betöltő IFU0 Utasítás sorba állító IFU ID0 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: az egyszerű utasításokat kettő, a többit a harmadik dekódolja (mint Mic-4), mikroműveletenként: –műveleti kód, –két forrás és –egy cél regiszter. Betöltö/Dekódoló ábra
Máté: Architektúrák9. előadás7 ID1, statikus + dinamikus elágazás jövendölés (4 bites előzmény figyelés). Utasítás hossz dekódoló IFU1 1. szintű I gyorsító tár gyorsító sor betöltő IFU0 Utasítás sorba állító IFU2 Mikroművelet sorba állító (qeuer) ID1 Regiszter lefoglaló RAT Következő IP Dinamikus elágazás jövendölő Mikroművelet sorba állító (sequencer) Statikus elágazás jövendölő ID0 A mikroműveletek a ROB-ba mennek ROB ábra
Máté: Architektúrák9. előadás8 ROB (ReOrder Buffer): maximum 3 mikroműveletet fogad ciklusonként. RAT: 40 firkáló regiszter WAR és WAW feloldására Utasítás hossz dekódoló IFU1 1. szintű I gyorsító tár gyorsító sor betöltő IFU0 Utasítás sorba állító IFU2 Mikroművelet sorba állító (qeuer) ID1 Regiszter lefoglaló RAT Következő IP Dinamikus elágazás jövendölő Mikroművelet sorbaállító (sequencer) Statikus elágazás jövendölő ID0 A mikroműveletek a ROB-ba mennek ROB
Máté: Architektúrák9. előadás9 Foglalóhely 0. port 1. port 2. port 3. port 4. port Elküldő/Végrehajtó Ü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ák9. előadás10 Elküldő/Végrehajtó (4.48. ábra) MMX végrehajtó egység Lebegőpontos végrehajtó egység Egész végrehajtó egység MMX végrehajtó egység Lebegőpontos végrehajtó egység Egész végrehajtó egység Betöltő egység Tároló egység Foglalóhely 0. port 1. port 2. port 3. port 4. port ROB Betöltések Tárolások
Máté: Architektúrák9. előadás11 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. Betöltő/dekódoló egység Elküldő/Végrehajtó egység Befejező egység mikroművelet tár terület
Máté: Architektúrák9. előadás12 Pentium II CPU mikroarchitektúrája (4.46. ábra) 1. szintű I gyorsító tár 1. szintű D gyorsító tár Sín illesztő egység 2. Szintű gyorsító tár felé Lokális sín a PCI hídhoz Betöltő/dekódoló egység Elküldő/Végrehajtó egység Befejező egység mikroművelet tár terület
Máté: Architektúrák9. előadás13 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 gyorsító sor cseré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ák9. előadás14 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, és dekódolja. Dekódoló: Néhány „irányító” bitet ad minden utasításhoz, ezzel a későbbi folyamatot gyorsítja. Maximum 12 elemű sort épít. A kiosztás sorrendben történik. Csoportosító logika 1. szintű I gyorsító tár Előre betöltő/Elküldő 2. szintű gyorsító tárKülső gyorsító tár egység Memória illesztő egység Fő memória Dekódoló
Máté: Architektúrák9. előadás15 Csoportosító logika: 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 miatti várakozás elkerülésére külön sor a függőben lévő LOAD -ok és STORE -ok számára. ALU Egész regiszterek Egész végrehajtó ALUFP ALU FP regiszterek Lebegőpontos egység FP ALU Grafikai egység Betöltő sor 1. szintű D gyorsító Betöltő/Tároló Tároló sor Csoportosító logika
Máté: Architektúrák9. előadás16 Az UltraSPARC II mikroarchitektúrája (4.49. ábra) ALU Egész regiszterek Egész végrehajtó ALUFP ALU FP regiszterek Lebegőpontos egység FP ALU Grafikai egység Betöltő sor 1. szintű D gyorsító tár Betöltő/Tároló Tároló sor Dekódoló 1. szintű I gyorsító tár Előre betöltő/Elküldő 2. szintű gyorsítóKülső gyorsító egység Memória illesztő egység Fő memória Csoportosító logika
Máté: Architektúrák9. előadás17 1.max. 4 utasítás az I-gyorsítóból, 2.irányító bitek az utasításokhoz, 3.kioszt annyi utasítást, ahányat tud 8.csapda kezelés 9.regiszterekbe írás Egész csővezeték Betölt Dekódol Csoportosít N3 Gyorsító tár Végrehajt N1 N2 X1 Regiszter X2 X3 FP/Grafikus csővezeték ír 9 szakaszos csővezeték (4.50. ábra)
Máté: Architektúrák9. előadás szakasz –a fix pontos utasítások 1 ciklus alatt végrehajtódnak + 3 üres szakasz, –LOAD és STORE még dolgozik a gyorsító tár szakaszban + 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. Egész csővezeték Betölt Dekódol Csoportosít N3 Gyorsító tár Végrehajt N1 N2 X1 Regiszter X2 X3 FP/Grafikus csővezeték ír
Máté: Architektúrák9. előadás19 picoJava II CPU mikroarchitektúrája (4.51. ábra) 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). Regiszter oszlop: 64 db 32 bites regiszter, a verem tetején lévő szavakat tartalmazza. 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.
Máté: Architektúrák9. előadás20 A regiszter oszlop közvetlenül, a D gyorsító egy ciklus késleltetéssel érhető el. picoJava II CPU mikro-architektúrája (4.51. ábra) 32 Végrehajtást vezérlő egység Előre betöltő, dekódoló, összevonó egység Egész és lebegőpontos egység 0-16 KB I gyorsító tár 0-16 KB D gyorsító tár Memória és B/K sín illesztő egység 64 db 32 bites regiszter 32 3x32 2x32 Regiszter oszlop
Máté: Architektúrák9. előadás21 picoJava II csővezetéke (4.52. ábra) Nem szuperskaláris, a mikroműveleteket a kiosztás sorrendjében hajtja végre. 1.Betöltés: egyszerre 8 bájt az I gyorsítótárból. 2.Dekódolás: RISC jellegű, két forrás és egy cél regisztert tartalmazó mikroutasításokat állít elő a CISC utasítás folyamból. 3.Operandus betöltés a veremből (regiszter oszlopból). 4.Utasítás végrehajtás. 5.Ha kell, a D gyorsítóba írás. 6.Eredmények verembe írása, ha kell. Betöltés az I gyorsítótárból Dekódolás, összevonás Operandusok a veremből Utasítás végrehajtás D gyorsítóba írás Eredmények verembe írása
Máté: Architektúrák9. előadás22 Utasítás összevonás, pl.: n=k+m; (4.53. ábra) m k k n m k n m k k+m m A dekódoló egyetlen mikroműveletté vonja össze. k k+m m k n m k k n m k n m SP→ Kezdetben ILOAD k után ILOAD m után IADD után ISTORE n után Kezdetben Összevont utasítás után
Máté: Architektúrák9. előadás23 Utasítás csoportok (4.54. ábra) CsoportLeírásPélda NFNem összevonható utasításokGOTO LVBetesz egy szót a verembeILOAD MEMEgy szót a veremből a memóriába teszISTORE BG1Egy verem operandusú utasításokIFEQ BG2Két verem operandusú utasításokIF_CMPEQ OPKét operandusú utasítások eredménnyelIADD JVM-nek több utasítása van, mint IJVM-nek! Több utasítás tartozik egy csoportba.
Máté: Architektúrák9. előadás24 Utasítások összevonása A dekódoló 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. 74 bites mikroműveleteket oszt ki, ezek legtöbbje egy kódot és három regisztert tartalmaz, és egy ciklusban végrehajtható. Utasítás sorozatPélda LV OPMEMILOAD, ILOAD, IADD, ISTORE LV OPILOAD, ILOAD, IADD LV BG2ILOAD, ILOAD, IF_CMPEQ LVBG1ILOAD, IFEQ LVBG2ILOAD, IF_CMPEQ LVMEMILOAD, ISTORE OPMEMIADD, ISTORE
Máté: Architektúrák9. előadás25 Elágazás jövendölés: nem lesz elágazás! Inkább olcsó, mint bonyolult hardver!
Máté: Architektúrák9. előadás26 Összehasonlítás Pentium IICISC gép egy CISC utasítás → több RISC mikroutasítás UltraSPARC IIRISC gép picoJava IIverem gép, sok memória hivatkozás több CISC utasítás → egy RISC mikroutasítás
Máté: Architektúrák9. előadás27 Makró és blokk ismétlés Makró definíció: M_névMACRO[fpar1[,fpar2...]] ; makró fej (kezdet)...; makró törzs ENDM; makró vége fpar1,fpar2... 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.
Máté: Architektúrák9. előadás28 Makró hívás: M_név[apar1[,apar2...]] apar1,apar2... aktuális paraméterek/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.
Máté: Architektúrák9. előadás29 Dupla szavas összeadás: (DX:AX) (DX:AX)+(CX:BX) Eljárás deklaráció: EDADDPROCNEAR ADDAX,BX ADCDX,CX RET EDADDENDP Makró definíció: MDADDMACRO ADDAX,BX ADCDX,CX ENDM
Máté: Architektúrák9. előadás30 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: CALLEDADD 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: ADDAX,BX ADCDX,CX Futás közben ez a két utasítás kerül csak végrehajtásra.
Máté: Architektúrák9. előadás31 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:
Máté: Architektúrák9. előadás32 Eljárás deklaráció: EDADD2PROCNEAR PUSHBP MOVBP,SP ADDAX,4[BP] ADCDX,6[BP] POPBP RET4 EDADDENDP Ha SI az összeadandónk címét tartalmazza, akkor a felhívás: PUSH2[SI] PUSH[SI] CALLEDADD2 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
Máté: Architektúrák9. előadás33 Most sem része a makró definíció a lefordított programnak. Makró definíció: MDADD2MACROP IFB P ADDAX,BX ADCDX,CX ELSE ADDAX,P ADCDX,P+2 ENDIF ENDM Makró hívás: MDADD2[SI] Fordítás közben a hívás az ADDAX,[SI] ADCDX,[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. MDADD2 hatása: ADDAX,BX ADCDX,CX
Máté: Architektúrák9. előadás34 Paraméter másutt is előfordulhat a makró törzsben, nemcsak az operandus részen, pl.: PLmacrop1,P2 movax,p1 P2p1 endm PLAdat, INC hatása: movax,Adat INCAdat
Máté: Architektúrák9. előadás35 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: errgenmacroy, x err&ydb’Error &y: &x’ endm errgen5, hatása: err5db’Error 5: Unreadable disk’
Máté: Architektúrák9. előadás36 <> (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: errgen5, Unreadable disk kifejtve: err5db’Error 5: Unreadable’ adatmacrop dbp endm adat adat’abc’,13,10,0 kifejtve: db’abc’,13,10,0 db’abc’
Máté: Architektúrák9. előadás37 ! (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ó errgen103, 255> hívásának hatása: err103db’Error 103: Expression > 255’ de errgen103, 255> hívásának hatása: err103db’Error 103: Expression ’
Máté: Architektúrák9. előadás38 % (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.: sym1equ100 sym2equ200 txtequ’Ez egy szöveg’ kifmacroexp, val db”&exp = &val” endm kif, %(sym1+sym2) kiftxt, %txt db”sym1+sym2 = 300” db”txt = ’Ez egy szöveg’”
Máté: Architektúrák9. előadás39 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: s=0 ErrMsgMACROtext s=s+1 Msg%s,text ENDM MsgMACROsz,str msg&szdbstr ENDM
Máté: Architektúrák9. előadás40 s=0 ErrMsgMACROtext s=s+1 Msg%s,text ENDM MsgMACROsz,str msg&szdbstr ENDM 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: msg1db’syntax error ’
Máté: Architektúrák9. előadás41 s=0 ErrMsgMACROtext s=s+1 Msg%s,text ENDM MsgMACROsz,str msg&szdbstr ENDM Egy újabb hívás és hatása: ErrMsg ’invalid operand’ msg2db’invalid operand’
Máté: Architektúrák9. előadás42 ;; (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.
Máté: Architektúrák9. előadás43 LOCALc1[,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. KOPOGmacro n LOCAL ujra movcx,n ujra:KOPP loopujra 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.
Máté: Architektúrák9. előadás44 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.: shiftsmacroOPNAME; makrót ; definiáló makró OPNAME&SMACROOPERANDUS,N movcl, N OPNAMEOPERANDUS,cl ENDM endm
Máté: Architektúrák9. előadás45 shiftsmacroOPNAME; makrót ; definiáló makró OPNAME&SMACROOPERANDUS,N movcl, N OPNAMEOPERANDUS,cl ENDM endm Ha ezt a makrót felhívjuk pl.: shifts ROR akkor a RORSMACROOPERANDUS,N movcl, N ROROPERANDUS,cl ENDM makró definíció generálódik.
Máté: Architektúrák9. előadás46 RORSMACROOPERANDUS,N movcl, N ROROPERANDUS,cl ENDM Mostantól meghívható a RORS makró is, pl.: RORSAX, 5 aminek a hatása: movcl, 5 RORAX,cl
Máté: Architektúrák9. előadás47 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). PUSHALLmacroreg1,reg2,reg3,reg4,reg5 IFNB ;; ha a paraméter nem üres pushreg1;; az első regiszter mentése PUSHALLreg2,reg3,reg4,reg5 ;; rekurzió ENDIF ENDM Most pl. a PUSHALLax, bx, cx makró hívás hatása: pushax pushbx pushcx
Máté: Architektúrák9. előadás48 PUSHALLmacroreg1,reg2,reg3,reg4,reg5 IFNB ;; ha a paraméter nem üres pushreg1;; az első regiszter mentése PUSHALLreg2,reg3,reg4,reg5 ;; rekurzió ENDIF ENDM PUSHALLax, bx, cx makró hívás hatása: pushax PUSHALLbx, cx az újabb hívás hatása: pushbx PUSHALLcx az újabb hívás hatása: pushcx PUSHALL ennek hatására nem generálódik semmi.
Máté: Architektúrák9. előadás49 FL_CALLELJ=0 CALLELJmacro ;; Eljárást beépítő és felhívó makró LOCALFIRST;; nem lenne fontos IFFL_CALLELJ;; a 2. hívástól igaz callElj;; 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 JMPFIRST;; jut érvényre Eljproc;; eljárás deklaráció... ret Eljendp FIRST:callElj;; az eljárás felhívása endm
Máté: Architektúrák9. előadás50 Az első CALLELJ hívás hatására az FL_CALLELJ=1 JMP??0000 Eljproc... ret Eljendp ??0000:callElj utasítások generálódnak (??0000 a FIRST -ből keletkezett).
Máté: Architektúrák9. előadás51 A további CALLELJ hívások esetén csak egyetlen utasítás, a callElj 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.
Máté: Architektúrák9. előadás52 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!
Máté: Architektúrák9. előadás53 Önmagát „átdefiniáló” makró (az előző feladat másik megoldása): CALLELJ2macro; külső makró definíció jmpFIRST Elj2proc; eljárás deklaráció... ret Elj2endp FIRST:callElj2; eljárás hívás CALLELJ2MACRO; belső makró definíció callElj2; eljárás hívás ENDM; belső makró definíció vége endm; külső makró definíció vége
Máté: Architektúrák9. előadás54 CALLELJ2 első hívásakor a kifejtés eredménye: jmpFIRST Elj2proc; eljárás deklaráció... ret Elj2endp FIRST:callElj2; eljárás hívás CALLELJ2MACRO; belső makró definíció callElj2; eljárás hívás ENDM ; belső makró definíció vége
Máté: Architektúrák9. előadás55 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 CALLELJ2 hívások esetén callElj2 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 a CALLELJ2 makró használójának tudnia kell, hogy a FIRST címke már „foglalt”!
Máté: Architektúrák9. előadás56 Ha egy M_név makró definíciójára nincs szükség a továbbiak során, akkor a PURGEM_név pszeudo utasítással kitörölhetjük.
Máté: Architektúrák9. előadás57 Blokk ismétlé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: REPTkifejezés...; ez a rész ismétlődik ENDM
Máté: Architektúrák9. előadás58 Pl. a korábban ismertetett kopogást így is megoldhattuk volna: REPTN KOPP ENDM Ha pl. N=3, akkor ennek a hatására a KOPP 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!
Máté: Architektúrák9. előadás59 Blokk ismétlés argumentum lista szerint: IRPpar,...; ez a rész többször bemásolásra...; kerül úgy, hogy par rendre...; felveszi az arg1,arg2... értéket ENDM IRPx, dbx ENDM db1 db2 db3
Máté: Architektúrák9. előadás60 Blokk ismétlés string alapján: IRPCpar,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: IRPCx,123 dbx ENDM
Máté: Architektúrák9. előadás61 Másik példa: IRPCx,ABCDEFGHIJKLMNOPQRSTUVWXYZ db’&x’; nagy betűk db’&x’+20h; kis betűk ENDM Fontos az & jel, nélküle x nem paraméter, hanem string lenne!
Máté: Architektúrák9. előadás62 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 IRPOP, OP&S MACROOPERANDUS,N movcl, N OPOPERANDUS,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.
Máté: Architektúrák9. előadás63 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ák9. előadás64 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ák9. előadás65 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ák9. előadás66 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ák9. előadás67 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ák9. előadás68 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ák9. előadás69 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!