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

Máté: Architektúrák9. előadás1 Feltételes fordítás A fordító programok általában – így az assembler is – feltételes fordítási lehetőséget biztosít. Ez.

Hasonló előadás


Az előadások a következő témára: "Máté: Architektúrák9. előadás1 Feltételes fordítás A fordító programok általában – így az assembler is – feltételes fordítási lehetőséget biztosít. Ez."— Előadás másolata:

1 Máté: Architektúrák9. előadás1 Feltételes fordítás A fordító programok általában – így az assembler is – feltételes fordítási lehetőséget biztosít. Ez azt jelenti, hogy a program bizonyos részeit csak abban az esetben fordítja le, ha – a fordítóprogram számára ellenőrizhető – feltétel igaz illetve hamis. IFxxfeltétel...; lefordul, ha a feltétel igaz ELSE; el is maradhat...; lefordul, ha a feltétel hamis ENDIF

2 Máté: Architektúrák9. előadás2 IF kifejezés; igaz, ha ; kifejezés  0 IFEkifejezés; igaz, ha ; kifejezés=0 IF1; igaz a fordítás ; első menetében IF2; igaz a fordítás ; második menetében IFDEFSzimbólum; igaz, ha Szimbólum ; definiált IFNDEFSzimbólum; igaz, ha Szimbólum ; nem definiált

3 Máté: Architektúrák9. előadás3 IFB  arg  ; igaz, ha ; arg üres (blank) IFNB  arg  ; igaz, ha ; arg nem üres IFIDN  arg1 ,  arg2  ; igaz, ha ; arg1  arg2 teljesül IFDIF  arg1 ,  arg2  ; igaz, ha ; arg1  arg2 nem teljesül

4 Máté: Architektúrák9. előadás4 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.

5 Máté: Architektúrák9. előadás5 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.

6 Máté: Architektúrák9. előadás6 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

7 Máté: Architektúrák9. előadás7 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.

8 Máté: Architektúrák9. előadás8 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:

9 Máté: Architektúrák9. előadás9 Most sem része a makró definíció a lefordított programnak. Eljárás deklaráció: EDADD2PROCNEAR PUSHBP MOVBP,SP ADDAX,4[BP] ADCDX,6[BP] POPBP RET4 EDADDENDP Makró definíció: MDADD2MACROP IFB  P  ADDAX,BX ADCDX,CX ELSE ADDAX,P ADCDX,P+2 ENDIF ENDM

10 Máté: Architektúrák9. előadás10 Ha SI az összeadandónk címét tartalmazza, akkor a felhívások a következőképpen alakulnak: PUSH2[SI] PUSH[SI] CALLEDADD2 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 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.

11 Máté: Architektúrák9. előadás11 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.

12 Máté: Architektúrák9. előadás12 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

13 Máté: Architektúrák9. előadás13 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’

14 Máté: Architektúrák9. előadás14 <> (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: err5db’Error 5: Unreadable’ adatmacrop dbp endm adat adat’abc’,13,10,0 kifejtve: db’abc’,13,10,0 db’abc’

15 Máté: Architektúrák9. előadás15 ! (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’

16 Máté: Architektúrák9. előadás16 % (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’”

17 Máté: Architektúrák9. előadás17 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

18 Máté: Architektúrák9. előadás18 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’ Egy újabb hívás és hatása: ErrMsg ’invalid operand’ msg2db’invalid operand’

19 Máté: Architektúrák9. előadás19 ;; (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.

20 Máté: Architektúrák9. előadás20 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.

21 Máté: Architektúrák9. előadás21 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

22 Máté: Architektúrák9. előadás22 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. Mostantól meghívható a RORS makró is, pl.: RORSAX, 5 aminek a hatása: movcl, 5 RORAX,cl

23 Máté: Architektúrák9. előadás23 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). Pl.: 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

24 Máté: Architektúrák9. előadás24 Részletezve: 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ákódik semmi.

25 Máté: Architektúrák9. előadás25 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

26 Máté: Architektúrák9. előadás26 Az első hívás hatására a FL_CALLELJ=1 JMP??0000 Eljproc... ret Eljendp ??0000:callElj utasítások generálódnak (??0000 a FIRST -ből keletkezett).

27 Máté: Architektúrák9. előadás27 A további 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.

28 Máté: Architektúrák9. előadás28 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!

29 Máté: Architektúrák9. előadás29 Ö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

30 Máté: Architektúrák9. előadás30 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

31 Máté: Architektúrák9. előadás31 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 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 annak, aki használni akarja a CALLELJ2 makrót, annak tudnia kell, hogy a FIRST címke már „foglalt”!

32 Máté: Architektúrák9. előadás32 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.

33 Máté: Architektúrák9. előadás33 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

34 Máté: Architektúrák9. előadás34 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!

35 Máté: Architektúrák9. előadás35 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

36 Máté: Architektúrák9. előadás36 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

37 Máté: Architektúrák9. előadás37 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.

38 Máté: Architektúrák9. előadás38 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 (3. 43. ábra). Két szintű belső gyorsító tár: 16 KB utasítás + 16 KB adat, 512 KB közös másodlagos (fele olyan gyors, mint a CPU). 32 B-os gyorsító sor (cash line). 1 vagy 2 CPU közös memóriával (szimatolás - snoop). Két külső szinkron sín (PCI és ISA): 2. 30. ábra.

39 Máté: Architektúrák9. előadás39 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, …

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

41 Máté: Architektúrák9. előadás41 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, 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

42 Máté: Architektúrák9. előadás42 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űvelet kód, két forrás és egy cél regiszter. ID1: sorba állító, jövendöléshez 4 bites előzmény figyelés + statikus jövendölé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.

43 Máté: Architektúrák9. előadás43 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.

44 Máté: Architektúrák9. előadás44 Befejező: 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.


Letölteni ppt "Máté: Architektúrák9. előadás1 Feltételes fordítás A fordító programok általában – így az assembler is – feltételes fordítási lehetőséget biztosít. Ez."

Hasonló előadás


Google Hirdetések