620 likes | 771 Views
SOCS. Hoofdstuk 1 Computerarchitectuur. C. Overzicht. Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren Macro’s. #define N 20 #define DEBUG #define somkwad(x,y) x*x+y*y int a[N], i, j, k; main() { #ifdef DEBUG printint (N); #endif ... #if N > 10
E N D
SOCS Hoofdstuk 1 Computerarchitectuur
C Overzicht • Eenvoudig C • Arrays • Functies • Records • Dynamische gegevenstructuren • Macro’s
#defineN20 #defineDEBUG #definesomkwad(x,y)x*x+y*y int a[N], i, j, k; main() { #ifdef DEBUG printint (N); #endif ... #if N > 10 i = somkwad(j,a[10]); #else i = somkwad(a[k],a[j]); #endif ... } Voorvertaler-directieven Definitie van constanten Verkorte notatie van codefragmenten Voorwaardelijke code C Macro’s Directieven voor de voorvertaler Naam Definitie
#defineN20 #defineDEBUG #definesomkwad(x,y)x*x+y*y int a[N], i, j, k; main() { #ifdef DEBUG printint (N); #endif ... #if N > 10 i = somkwad(j,a[10]); #else i = somkwad(a[k],a[j]); #endif ... } int a[20], i, j, k; main() { printint (20); ... i = j*j + a[10]*a[10]; ... } C Macro’s
#defineN10 #definesomkwad(x,y)x*x+y*y int a[N], i, j, k; main() { #ifdef DEBUG printint (N); #endif ... #if N > 10 i = somkwad(j,a[10]); #else i = somkwad(a[k],a[j]); #endif ... } int a[10], i, j, k; main() { ... i = a[k]*a[k] + a[j]*a[j]; ... } C Macro’s
Macro’s in DRAMA • Basisprincipe • Eenvoudige DRAMA-macro’s • Lokale symbolische adressen • Macro-parameters en variabelen • Voorwaardelijke macro-opbouw • Macro-directieven • Genestelde en recursieve macro-oproepen • Globale macro-variabelen
Basisprincipe • LPT: 1 bronbevel 1 doelbevel (machinetaal) • Uitzondering: macro-oproep • Doel: • Stukjes code die verschillende keren voorkomen • Slechts 1 keer schrijven (en naam geven) • Op verschillende plaatsen inlassen
Code inlassen om R0 |R0| Basisprincipe • Voorbeeld: y = | a | + | -3 * b * c | + | 4 + e |; • Code om R0 | R0 | ( naam ABSW) • Programma: HIA R0,a ABSW HIA R1,R0 HIA.w R0,-3 VER R0,b VER R0,c ABSW OPT R1,R0 HIA.w R0,4 OPT R0,e ABSW OPT R1,R0 BIG R1,y
Macro’s in DRAMA • Basisprincipe • Eenvoudige DRAMA-macro’s • Lokale symbolische adressen • Macro-parameters en variabelen • Voorwaardelijke macro-opbouw • Macro-directieven • Genestelde en recursieve macro-oproepen • Globale macro-variabelen
Eenvoudige DRAMA-macro’s • R1 (R1)6 | Macro ZesdeMacht | Resultaat: R1 (R1)6 | Wijzigt R1 (resultaat) en R2 MACRO ZesdeMacht … DRAMA code … MCREINDE Interface Directief • Hoofding • Naam • … Lichaam/Romp Directief
Eenvoudige DRAMA-macro’s • R1 (R1)6 | Macro ZesdeMacht | Resultaat: R1 (R1)6 | Wijzigt R1 (resultaat) en R2 MACRO ZesdeMacht MCREINDE VER R1,R1 HIA R2,R1 VER R1,R2 VER R1,R2
Gebruik van de macro macro-oproep | Macro ZesdeMacht | Resultaat: R1 (R1)6 | Wijzigt R1 en R2 MACRO ZesdeMacht VER R1,R1 HIA R2,R1 VER R1,R2 VER R1,R2 MCREINDE | d = (a6 * b – c)6 HIA R1,a … STP a: RESGR 1 b: RESGR 1 c: RESGR 1 d: RESGR 1 Macro-oproep Macro-oproep Eenvoudige DRAMA-macro’s ZesdeMacht VER R1,b AFT R1,c ZesdeMacht BIG R1,d
MACRO ZesdeMacht VER R1,R1 … MCREINDE HIA R1,a ZesdeMacht VER R1,b AFT R1,c ZesdeMacht … HIA R1,a VER R1,R1 … VER R1,b AFT R1,c VER R1,R1 … … Voorvertaler Definitie Voor-vertaler Oproep Oproep Bronprogramma(zonder macro-definities en oproepen) Bronprogramma (met macro-definities op -oproepen)
MACRO ZesdeMacht VER R1,R1 HIA R2,R1 VER R1,R2 VER R1,R2 MCREIND HIA R1,a ZesdeMacht VER R1,b AFT R1,c ZesdeMacht BIG R1,d … STP a: RESGR 1 … HIA R1,a Zesdemacht VER R1,b AFT R1,c Zesdemacht BIG R1,d … STP a: RESGR 1 … Macro-oproep Macro-expansie Voorvertaling VER R1,R1 HIA R2,R1 VER R1,R2 VER R1,R2 VER R1,R1 HIA R2,R1 VER R1,R2 VER R1,R2
Opmerkingen • LPT (assembleertaal)+ mogelijkheid macro’s te definieren= macro-assembleertaal • Macro-definitie: textueel voor eerste oproep • Afspraak: • Vooraan in programma: alle macro-definities • Daarna: Drama-programma (+ macro-oproepen)
Symbolische adressen • Lichaam van macro: • Om het even wat • Dus ook symbolische adressen LUS: VGL.w R1,0 • Voorbeeld: • Macro voor ABSW R0 | R0 |
R0 | R0 | | y = |a|+|-3*b*c|+|4+e| HIA R0,a ABSW HIA R1,R0 HIA.w R0,-3 VER R0,b VER R0,c ABSW OPT R1,R0 HIA.w R0,4 OPT R0,e ABSW OPT R1,R0 BIG R1,y Symbolische adressen | Macro ABSW | Resultaat: R0 |R0| | Wijzigt R0 (resultaat) MACRO ABSW MCREINDE VGL.w R0,0 VSP NNEG,einde VER.w R0,-1 einde:
MACRO ABSW VGL.w R0,0 VSP NNEG,einde VER R0,-1 einde: MCREIND HIA R0,a ABSW HIA R1,R0 HIA.w R0,-3 VER R0,b VER R0,c ABSW OPT R1,R0 HIA.w R0,4 OPT R0,e ABSW OPT R1,R0 BIG R1,y HIA R0,a ABSW HIA R1,R0 HIA.w R0,-3 VER R0,b VER R0,c ABSW OPT R1,R0 HIA.w R0,4 OPT R0,e ABSW OPT R1,R0 BIG R1,y VGL.w R0,0 VSP NNEG,einde VER.w R0,-1 VGL.w R0,0 VSP NNEG,einde VER.w R0,-1 VGL.w R0,0 VSP NNEG,einde VER.w R0,-1 einde: einde: einde: Voorvertaling Foutief DRAMA- programma!
Macro’s in DRAMA • Basisprincipe • Eenvoudige DRAMA-macro’s • Lokale symbolische adressen • Macro-parameters en variabelen • Voorwaardelijke macro-opbouw • Macro-directieven • Genestelde en recursieve macro-oproepen • Globale macro-variabelen
Lokale symbolische adressen • Alleen betekenis BINNEN een macro-definitie • Voorvertaler zet om naar UNIEK symbolisch adres • Lokaal symbolisch adres = $etiket • UNIEK symbolisch adres = _1etiket, _2etiket, _3etiket, … bij eerste, tweede, derde macro-oproep
R0 | R0 | | y = |a|+|-3*b*c|+|4+e| HIA R0,a ABSW HIA R1,R0 HIA.w R0,-3 VER R0,b VER R0,c ABSW OPT R1,R0 HIA.w R0,4 OPT R0,e ABSW OPT R1,R0 BIG R1,y Lokale symbolische adressen | Macro ABSW | Resultaat: R0 |R0| | Wijzigt R0 (resultaat) MACRO ABSW VGL.w R0,0 VSP NNEG,einde VER.w R0,-1 einde: MCREINDE $einde $
MACRO ABSW VGL.w R0,0 VSP NNEG,$einde VER.w R0,-1 $einde: MCREIND HIA R0,a ABSW HIA R1,R0 HIA.w R0,-3 VER R0,b VER R0,c ABSW OPT R1,R0 HIA.w R0,4 OPT R0,e ABSW OPT R1,R0 BIG R1,y HIA R0,a ABSW HIA R1,R0 HIA.w R0,-3 VER R0,b VER R0,c ABSW OPT R1,R0 HIA.w R0,4 OPT R0,e ABSW OPT R1,R0 BIG R1,y VGL.w R0,0 VSP NNEG,_1einde VER.w R0,-1 VGL.w R0,0 VSP NNEG,_2einde VER.w R0,-1 VGL.w R0,0 VSP NNEG,_3einde VER.w R0,-1 _1einde: _2einde: _3einde: Voorvertaling
Macro’s in DRAMA • Basisprincipe • Eenvoudige DRAMA-macro’s • Lokale symbolische adressen • Macro-parameters en variabelen • Voorwaardelijke macro-opbouw • Macro-directieven • Genestelde en recursieve macro-oproepen • Globale macro-variabelen
Macro-parameters • Bruikbaarheid van macro beperkt • Gegevens beschikbaar in accumulator of in geheugenregister • Parameters • Mogelijkheid om ingelaste code aan noden aan te passen • Voorbeeld ABSW R1 | R1 |R1| ABSW R2 | R2 |R2| • Parameters • In hoofding: naam1, naam2, … • In lichaam: <naam1>, <naam1>, …
Ri | Ri | | y = |a|+|-3*b*c|+|4+e| HIA R0,a ABSW R0 HIA.w R1,-3 VER R1,b VER R1,c ABSW R1 OPT R0,R1 HIA.w R2,4 OPT R2,e ABSW R2 OPT R0,R2 BIG R0,y Macro-parameters | Macro ABSW Ri | Parameter Ri | Resultaat: Ri |Ri| | Wijzigt Ri (resultaat) MACRO ABSW Ri MCREINDE Parameter VGL.w <Ri>,0 VSP NNEG,$einde VER.w <Ri>,-1 $einde: Parameter
MACRO ABSW Ri VGL.w <Ri>,0 VSP NNEG,$einde VER.w <Ri>,-1 $einde: MCREIND HIA R0,a ABSW R0 HIA.w R1,-3 VER R1,b VER R1,c ABSW R1 OPT R0,R1 HIA.w R2,4 OPT R2,e ABSW R2 OPT R0,R2 BIG R0,y HIA R0,a ABSW R0 HIA.w R1,-3 VER R1,b VER R1,c ABSW R1 OPT R0,R1 HIA.w R2,4 OPT R2,e ABSW R2 OPT R0,R2 BIG R0,y VGL.w R0,0 VSP NNEG,_1einde VER.w R0,-1 VGL.w R1,0 VSP NNEG,_2einde VER.w R1,-1 VGL.w R2,0 VSP NNEG,_3einde VER.w R2,-1 _1einde: _2einde: _3einde: Voorvertaling
Ri | Ri | | y = |a|+|-3*b*c|+|4+e| HIA R0,a ABSW 0 HIA.w R1,-3 VER R1,b VER R1,c ABSW 1 OPT R0,R1 HIA.w R2,4 OPT R2,e ABSW 2 OPT R0,R2 BIG R0,y Macro-parameters | Macro ABSW i | Parameter i | Resultaat: Ri |Ri| | Wijzigt Ri (resultaat) MACRO ABSW i MCREINDE VGL.w R<i>,0 VSP NNEG,$einde VER.w R<i>,-1 $einde:
MACRO ABSW i VGL.w R<i>,0 VSP NNEG,$einde VER.w R<i>,-1 $einde: MCREIND HIA R0,a ABSW 0 HIA.w R1,-3 VER R1,b VER R1,c ABSW 1 OPT R0,R1 HIA.w R2,4 OPT R2,e ABSW 2 OPT R0,R2 BIG R0,y HIA R0,a ABSW 0 HIA.w R1,-3 VER R1,b VER R1,c ABSW 1 OPT R0,R1 HIA.w R2,4 OPT R2,e ABSW 2 OPT R0,R2 BIG R0,y VGL.w R0,0 VSP NNEG,_1einde VER.w R0,-1 VGL.w R1,0 VSP NNEG,_2einde VER.w R1,-1 VGL.w R2,0 VSP NNEG,_3einde VER.w R2,-1 _1einde: _2einde: _3einde: Voorvertaling
z x*x + y*y Macro-parameters | Macro SomKwad | Parameter z,x,y | Resultaat: zx*x+y*y | Wijzigt R1 en R2 MACRO SomKwad z,x,y MCREINDE HIA R1,<x> VER R1,R1 HIA R2,<y>VER R2,R2 OPT R1,R2BIG R1,<z>
z x*x + y*y SomKwad a,b,c SomKwad e,R5,f Macro-parameters HIA R1,b VER R1,R1 HIA R2,c VER R2,R2 OPT R1,R2 BIG R1,a | Macro SomKwad | Parameter z,x,y | Resultaat: zx*x+y*y | Wijzigt R1 en R2 MACRO SomKwad z,x,y MCREINDE HIA R1,<x> VER R1,R1 HIA R1,R5 VER R1,R1 HIA R2,f VER R2,R2 OPT R1,R2 BIG R1,e HIA R2,<y>VER R2,R2 OPT R1,R2BIG R1,<z>
z x*x + y*y SomKwad R5,b,c SomKwad e,10,f Macro-parameters HIA R1,b VER R1,R1 HIA R2,c VER R2,R2 OPT R1,R2 BIG R1,R5 | Macro SomKwad | Parameter z,x,y | Resultaat: zx*x+y*y | Wijzigt R1 en R2 MACRO SomKwad z,x,y MCREINDE Ongeldig Drama-bevel HIA R1,<x> VER R1,R1 HIA R1,10 VER R1,R1 HIA R2,f VER R2,R2 OPT R1,R2 BIG R1,e HIA R2,<y>VER R2,R2 Nietverwachtresultaat! OPT R1,R2BIG R1,<z>
If-then-else constructie Macro-parameters IfThenElse x,KLG,y,klg,grd,R1 klg: … | kleiner of gelijk … SPR endif grd: … | groter dan … endif: … if (x <= y) { … kleiner of gelijk … } else { … groter dan … }
If-then-else constructie IfThenElse x,KLG,y,klg,grd,R1 klg: … | kleiner of gelijk … SPR endif grd: … | groter dan … endif: … Macro-parameters | Macro IfThenElse | Parameters: | a,vw,b,dan,anders,reg | Resultaat: | if (a vw b) SPR dan| else SPR anders| Wijzigt reg. <reg> MACRO IfThenElse a,vw,b,dan,\ anders,reg MCREINDE klg: … | kleiner of gelijk … SPR endif grd: … | groter dan … endif: … HIA R1,x VGL R1,y VSP KLG,klg SPR grd HIA <reg>,<a> VGL <reg>,<b> VSP <vw>,<dan> SPR <anders>
Macro-variabelen • Doel • Tijdens de expansie berekening uitvoeren • Geen declaratie • Bestaan zodra eerste toekenning • MEVA-directiefMEVA variabele,expressie • Voorbeeld:MEVA A,10 MEVA B,<A>-20 • Beperkingen: • Uitdrukking gehele waarde • Uitdrukking: macro-variabelen, -parameters, +, -, *, /, (, ) • Lokale variabele! na oproep verdwenen
Ri Ri-1 + Ri + Ri+1 TelOp 4 TelOp 8 TelOp 9 TelOp 0 Macro-variabelen OPT R4,R3 OPT R4,R5 | Macro TelOp | Parameter i (0<i<9) | Resultaat: Ri+=Ri-1+Ri+1 MACRO TelOp i MCREINDE OPT R8,R7 OPT R8,R9 MEVA reg,<i>-1 OPT R<i>,R<reg> Ongeldig Adres als R10 niet ge-definieerd MEVA reg,<i>+1 OPT R<i>,R<reg> OPT R9,R8 OPT R9,R10 Ongeldig Adres als R niet ge-definieerd OPT R0,R-1 OPT R0,R1
Macro’s in DRAMA • Basisprincipe • Eenvoudige DRAMA-macro’s • Lokale symbolische adressen • Macro-parameters en variabelen • Voorwaardelijke macro-opbouw • Macro-directieven • Genestelde en recursieve macro-oproepen • Globale macro-variabelen
Voorwaardelijke macro-opbouw • Doel: • Gelijkaardige maar niet identieke code inlassen • Parameters / Variabelen • Verschillend aantal bevelen? • Macro-definitie • Voor meest algemene geval • Voorwaardelijke macro-opbouw: • Alleen die stukken inlassen die nodig zijn • Macro-directieven Voorvertaler! • M… • Voorbeelden: MEVA, MVGL, MVSP, MSPR, …
Res A1 + … + An (n=1 .. 3) | d a + b + c Som 3,d,a,b,c | k l + m Som 2,k,l,m | x y Som 1,x,y Voorwaardelijk macro-opbouw | Macro Som | Resultaat: Res = A1+…+AN | Wijzigt R1 MACRO Som N,Res,A1,A2,A3 MCREINDE HIA R1,a OPT R1,b OPT R1,c BIG R1,d HIA R1,<A1> MVGL <N>,1 MVSP GEL,$bergweg HIA R1,l OPT R1,m BIG R1,k OPT R1,<A2> MVGL <N>,2 MVSP GEL,$bergweg OPT R1,<A3> $bergweg: MNTS BIG R1,<Res> HIA R1,y BIG R1,x
Macro’s in DRAMA • Basisprincipe • Eenvoudige DRAMA-macro’s • Lokale symbolische adressen • Macro-parameters en variabelen • Voorwaardelijke macro-opbouw • Macro-directieven • Genestelde en recursieve macro-oproepen • Globale macro-variabelen
Res (Getal)Exp (0 <= Exp) | b a3 Macht b,a,3,R1 | y x0 Macht y,x,0,R0 | k m-1 Macht k,m,-1,R3 Voorwaardelijk macro-opbouw | Macro Macht| Resultaat: Res = (Getal)Exp | Wijzigt register Reg MACRO Macht Res,Getal,Exp,Reg MCREINDE HIA.w R1,1 VER R1,a VER R1,a VER R1,a BIG R1,b HIA.w <Reg>,1 MVGL <Exp>,0 MVSP GRG,$lusMFOUT “Exp moet >= 0” $lus: MVGL <Exp>,0 MVSP GEL,$bergweg HIA.w R0,1 BIG R0,y VER <Reg>,<Getal> MEVA Exp,<Exp>-1 MSPR $lus $bergweg: MNTS HIA.w R3,1 *** fout *** Exp moet >= 0 BIG <Reg>,<Res>
Macro’s in DRAMA • Basisprincipe • Eenvoudige DRAMA-macro’s • Lokale symbolische adressen • Macro-parameters en variabelen • Voorwaardelijke macro-opbouw • Macro-directieven • Genestelde en recursieve macro-oproepen • Globale macro-variabelen
Genestelde en recursieve macro-oproepen • Genestelde macro-oproep • Binnen macro-definitie andere macro oproepen • Recursieve macro-oproep • Binnen macro-definitie zichzelf terug oproepen • Mogelijk mits voorwaardelijk macro-opbouw
Res A1 + … + AN (N > 0) Genestelde en recursieve macro-oproepen | Macro Som| Res=a1+…+an (0<n<=4) | Wijzigt R1 MACRO Som Res,n,a1,a2,a3,a4 MCREINDE | Macro RSom| R1 += b1+…+bn-1 MACRO Rsom n,b1,b2,b3 MCREINDE MEVA n,<n>-1 MVGL <n>,0MVSP KLG,$einde MVGL <n>,0 MVSP GR,$pos MFOUT “n moet > 0” OPT R1,<b1> $pos: MVGL <n>,4 MVSP KLG,$ok MFOUT “n moet <= 4” $ok: MNTS Rsom <n>,<b2>,<b3> $einde: MNTS HIA R1,<a1> Rsom <n>,<a2>,<a3>,<a4> BIG R1,<Res>
Res A1 + … + AN (N > 0) | x a + b + c Som x,3,a,b,c Genestelde en recursieve macro-oproepen Res xn 3a1 a a2 b a3 ca4 | Macro Som| Res=a1+…+an (0<n<=4) | Wijzigt R1 MACRO Som Res,n,a1,a2,a3,a4 MCREINDE HIA R1,a MVGL <n>,0 MVSP GR,$pos MFOUT “n moet > 0” $pos: MVGL <n>,4 MVSP KLG,$ok MFOUT “n moet <= 4” $ok: MNTS HIA R1,<a1> Rsom <n>,<a2>,<a3>,<a4> BIG R1,<Res>
Res A1 + … + AN (N > 0) | x a + b + c Som x,3,a,b,c Genestelde en recursieve macro-oproepen Res xn 3a1 a a2 b a3 ca4 | Macro Som| Res=a1+…+an (0<n<=4) | Wijzigt R1 MACRO Som Res,n,a1,a2,a3,a4 MCREINDE HIA R1,a Rsom 3,b,c, MVGL <n>,0 MVSP GR,$pos MFOUT “n moet > 0” $pos: MVGL <n>,4 MVSP KLG,$ok MFOUT “n moet <= 4” $ok: MNTS HIA R1,<a1> Rsom <n>,<a2>,<a3>,<a4> BIG R1,<Res>
Res A1 + … + AN (N > 0) | x a + b + c Som x,3,a,b,c | Macro RSom| R1 += b1+…+bn-1 MACRO Rsom n,b1,b2,b3 MCREINDE MEVA n,<n>-1 MVGL <n>,0MVSP KLG,$einde OPT R1,<b1> Rsom <n>,<b2>,<b3> $einde: MNTS Genestelde en recursieve macro-oproepen Res xn 3a1 a a2 b a3 ca4 HIA R1,a Rsom 3,b,c, n 3 b1 b b2 c b3 n 2 b1 b b2 c b3 OPT R1,b Rsom 2,c,,
Res A1 + … + AN (N > 0) | x a + b + c Som x,3,a,b,c | Macro RSom| R1 += b1+…+bn-1 MACRO Rsom n,b1,b2,b3 MCREINDE MEVA n,<n>-1 MVGL <n>,0MVSP KLG,$einde OPT R1,<b1> Rsom <n>,<b2>,<b3> $einde: MNTS Genestelde en recursieve macro-oproepen Res xn 3a1 a a2 b a3 ca4 HIA R1,a Rsom 3,b,c, n 2 b1 b b2 c b3 OPT R1,b Rsom 2,c,, n 2 b1 c b2 b3 n 1 b1 c b2 b3 OPT R1,c Rsom 1,,,
Res A1 + … + AN (N > 0) | x a + b + c Som x,3,a,b,c | Macro RSom| R1 += b1+…+bn-1 MACRO Rsom n,b1,b2,b3 MCREINDE MEVA n,<n>-1 MVGL <n>,0MVSP KLG,$einde OPT R1,<b1> Rsom <n>,<b2>,<b3> $einde: MNTS Genestelde en recursieve macro-oproepen Res xn 3a1 a a2 b a3 ca4 HIA R1,a Rsom 3,b,c, n 2 b1 b b2 c b3 OPT R1,b Rsom 2,c,, n 1 b1 c b2 b3 OPT R1,c Rsom 1,,, n 0 b1 b2 b3 n 1 b1 b2 b3
Res A1 + … + AN (N > 0) | x a + b + c Som x,3,a,b,c | Macro RSom| R1 += b1+…+bn-1 MACRO Rsom n,b1,b2,b3 MCREINDE MEVA n,<n>-1 MVGL <n>,0MVSP KLG,$einde OPT R1,<b1> Rsom <n>,<b2>,<b3> $einde: MNTS Genestelde en recursieve macro-oproepen Res xn 3a1 a a2 b a3 ca4 HIA R1,a Rsom 3,b,c, n 2 b1 b b2 c b3 OPT R1,b Rsom 2,c,, n 1 b1 c b2 b3 OPT R1,c Rsom 1,,,