SOCS
description
Transcript of SOCS
1
SOCS
Hoofdstuk 1
Computerarchitectuur
2
Overzicht
Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren Macro’s
CC
3
Macro’s#define N 20#define DEBUG#define somkwad(x,y) x*x+y*yint 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
...}
CC
Naam Definitie
Directieven voor Directieven voor de voorvertalerde voorvertaler
Voorvertaler-directieven Definitie van constanten Verkorte notatie van
codefragmenten Voorwaardelijke code
4
Macro’s#define N 20#define DEBUG#define somkwad(x,y) x*x+y*yint 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];
...}
CC
5
Macro’s#define N 10
#define somkwad(x,y) x*x+y*yint 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];
...}
CC
6
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
7
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
8
Basisprincipe
Voorbeeld: y = | a | + | -3 * b * c | + | 4 + e |;
Code om R0 | R0 | ( naam ABSW) Programma: HIA R0,aHIA R0,a
ABSWABSWHIA R1,R0HIA R1,R0HIA.w R0,-3HIA.w R0,-3VER R0,bVER R0,bVER R0,cVER R0,cABSWABSWOPT R1,R0OPT R1,R0HIA.w R0,4HIA.w R0,4OPT R0,eOPT R0,eABSWABSWOPT R1,R0OPT R1,R0
Code inlassenCode inlassenom R0 om R0 |R0| |R0|
9
Eenvoudige DRAMA-macro’s
R1 (R1)6
| Macro ZesdeMacht| Macro ZesdeMacht| Resultaat: R1 | Resultaat: R1 (R1) (R1)66
| Wijzigt R1 (resultaat) en R2| Wijzigt R1 (resultaat) en R2MACROMACRO
ZesdeMachtZesdeMacht … … DRAMA code …DRAMA code …
MCREINDEMCREINDE
Directief
Directief
Hoofding• Naam• …
Lichaam/Romp
10
Eenvoudige DRAMA-macro’s
R1 (R1)6
| Macro ZesdeMacht| Macro ZesdeMacht| Resultaat: R1 | Resultaat: R1 (R1) (R1)66
| Wijzigt R1 (resultaat) en R2| Wijzigt R1 (resultaat) en R2MACROMACRO
ZesdeMachtZesdeMacht
MCREINDEMCREINDE
VER R1,R1VER R1,R1
VER R1,R2VER R1,R2VER R1,R2VER R1,R2
HIA R2,R1HIA R2,R1
11
Eenvoudige DRAMA-macro’s
Gebruik van de macro macro-oproep
| Macro ZesdeMacht| Macro ZesdeMacht| Resultaat: R1 | Resultaat: R1 (R1) (R1)66
| Wijzigt R1 en R2| Wijzigt R1 en R2MACROMACRO
ZesdeMachtZesdeMachtVER R1,R1VER R1,R1HIA R2,R1HIA R2,R1VER R1,R2VER R1,R2VER R1,R2VER R1,R2
MCREINDEMCREINDE
| d = (a| d = (a66 * b – c) * b – c)66
HIA R1,aHIA R1,a ……STPSTP
a:a: RESGR 1RESGR 1b:b: RESGR 1RESGR 1c:c: RESGR 1RESGR 1d:d: RESGR 1RESGR 1
Macro-oproepMacro-oproepZesdeMachtZesdeMacht
ZesdeMachtZesdeMacht
VER R1,bVER R1,bAFT R1,cAFT R1,c
BIG R1,dBIG R1,d
12
Voorvertaler
Voor-Voor-vertalevertale
rr
Bronprogramma(met macro-definities op -oproepen)
Bronprogramma(zonder macro-definities en oproepen)
MACROZesdeMachtVER R1,R1…
MCREINDEHIA R1,aZesdeMachtVER R1,bAFT R1,cZesdeMacht…
HIA R1,aVER R1,R1…VER R1,bAFT R1,cVER R1,R1……
DefinitieDefinitie
OproepOproep
OproepOproep
13
Voorvertaling
MACROMACROZesdeMachtZesdeMachtVER R1,R1VER R1,R1HIA R2,R1HIA R2,R1VER R1,R2VER R1,R2VER R1,R2VER R1,R2
MCREINDMCREINDHIA R1,aHIA R1,aZesdeMachtZesdeMachtVER R1,bVER R1,bAFT R1,cAFT R1,cZesdeMachtZesdeMachtBIG R1,dBIG R1,d……STPSTP
a:a: RESGR 1RESGR 1……
HIA R1,aHIA R1,aZesdemachtZesdemacht VER R1,bVER R1,bAFT R1,cAFT R1,cZesdemachtZesdemacht
BIG R1,dBIG R1,d……STPSTP
a:a: RESGR 1RESGR 1……
Macro-oproepMacro-expansie
VER R1,R1VER R1,R1HIA R2,R1HIA R2,R1VER R1,R2VER R1,R2VER R1,R2VER R1,R2
VER R1,R1VER R1,R1HIA R2,R1HIA R2,R1VER R1,R2VER R1,R2VER R1,R2VER R1,R2
14
Opmerkingen
LPT (assembleertaal)+ mogelijkheid macro’s te definieren= macro-assembleertaal
Macro-definitie moet textueel voor de eerste oproep staan
Afspraak: Vooraan in programma: alle macro-definities Daarna: Drama-programma (+ macro-oproepen)
15
Symbolische adressen
Lichaam van macro: Om het even wat Dus ook symbolische adressen
LUS: VGL.w R1,0 Voorbeeld:
Macro voor ABSW R0 | R0 |
16
Symbolische adressen
R0 | R0 | | y = |a|+|-3*b*c|+|4+e|| y = |a|+|-3*b*c|+|4+e|HIA R0,aHIA R0,aABSWABSWHIA R1,R0HIA R1,R0HIA.w R0,-3HIA.w R0,-3VER R0,bVER R0,bVER R0,cVER R0,cABSWABSWOPT R1,R0OPT R1,R0HIA.w R0,4HIA.w R0,4OPT R0,eOPT R0,eABSWABSWOPT R1,R0OPT R1,R0BIG R1,yBIG R1,y
| Macro ABSW| Macro ABSW| Resultaat: R0 | Resultaat: R0 |R0| |R0|| Wijzigt R0 (resultaat)| Wijzigt R0 (resultaat)MACROMACRO
ABSWABSW
MCREINDEMCREINDE
VGL.w R0,0VGL.w R0,0
VER R0,-1VER R0,-1einde:einde:
VSP NNEG,eindeVSP NNEG,einde
17
Voorvertaling
MACROMACROABSWABSW
VGL.w R0,0VGL.w R0,0VSP NNEG,eindeVSP NNEG,eindeVER R0,-1VER R0,-1
einde:einde: MCREINDMCREIND
HIA R0,aHIA R0,aABSWABSWHIA R1,R0HIA R1,R0HIA.w R0,-3HIA.w R0,-3VER R0,bVER R0,bVER R0,cVER R0,cABSWABSWOPT R1,R0OPT R1,R0HIA.w R0,4HIA.w R0,4OPT R0,eOPT R0,eABSWABSWOPT R1,R0OPT R1,R0BIG R1,yBIG R1,y
HIA R0,aHIA R0,aABSWABSW
HIA R1,R0HIA R1,R0HIA.w R0,-3HIA.w R0,-3VER R0,bVER R0,bVER R0,cVER R0,cABSWABSW
OPT R1,R0OPT R1,R0HIA.w R0,4HIA.w R0,4OPT R0,eOPT R0,eABSWABSW
OPT R1,R0OPT R1,R0BIG R1,yBIG R1,y
VGL.w R0,0VGL.w R0,0VSP NNEG,eindeVSP NNEG,eindeVER R0,-1VER R0,-1
einde:einde:
VGL.w R0,0VGL.w R0,0VSP NNEG,eindeVSP NNEG,eindeVER R0,-1VER R0,-1
einde:einde:
VGL.w R0,0VGL.w R0,0VSP NNEG,eindeVSP NNEG,eindeVER R0,-1VER R0,-1
einde:einde:
18
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
19
Lokale symbolische adressen
R0 | R0 | | y = |a|+|-3*b*c|+|4+e|| y = |a|+|-3*b*c|+|4+e|HIA R0,aHIA R0,aABSWABSWHIA R1,R0HIA R1,R0HIA.w R0,-3HIA.w R0,-3VER R0,bVER R0,bVER R0,cVER R0,cABSWABSWOPT R1,R0OPT R1,R0HIA.w R0,4HIA.w R0,4OPT R0,eOPT R0,eABSWABSWOPT R1,R0OPT R1,R0BIG R1,yBIG R1,y
| Macro ABSW| Macro ABSW| Resultaat: R0 | Resultaat: R0 |R0| |R0|| Wijzigt R0 (resultaat)| Wijzigt R0 (resultaat)MACROMACRO
ABSWABSW VGL.w R0,0VGL.w R0,0
VSP NNEG,eindeVSP NNEG,einde VER R0,-1VER R0,-1 einde:einde:MCREINDEMCREINDE$$
VSP NNEG,VSP NNEG,$$eindeeinde
20
Voorvertaling
MACROMACROABSWABSW
VGL.w R0,0VGL.w R0,0VSP NNEG,$eindeVSP NNEG,$eindeVER R0,-1VER R0,-1
$einde:$einde: MCREINDMCREIND
HIA R0,aHIA R0,aABSWABSWHIA R1,R0HIA R1,R0HIA.w R0,-3HIA.w R0,-3VER R0,bVER R0,bVER R0,cVER R0,cABSWABSWOPT R1,R0OPT R1,R0HIA.w R0,4HIA.w R0,4OPT R0,eOPT R0,eABSWABSWOPT R1,R0OPT R1,R0BIG R1,yBIG R1,y
HIA R0,aHIA R0,aABSWABSW
HIA R1,R0HIA R1,R0HIA.w R0,-3HIA.w R0,-3VER R0,bVER R0,bVER R0,cVER R0,cABSWABSW
OPT R1,R0OPT R1,R0HIA.w R0,4HIA.w R0,4OPT R0,eOPT R0,eABSWABSW
OPT R1,R0OPT R1,R0BIG R1,yBIG R1,y
VGL.w R0,0VGL.w R0,0VSP NNEG,_1eindeVSP NNEG,_1eindeVER R0,-1VER R0,-1
_1einde:_1einde:
VGL.w R0,0VGL.w R0,0VSP NNEG,_2eindeVSP NNEG,_2eindeVER R0,-1VER R0,-1
_2einde:_2einde:
VGL.w R0,0VGL.w R0,0VSP NNEG,_3eindeVSP NNEG,_3eindeVER R0,-1VER R0,-1
_3einde:_3einde:
21
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>, …
22
Macro-parameters
Ri | Ri | | y = |a|+|-3*b*c|+|4+e|| y = |a|+|-3*b*c|+|4+e|HIA R0,aHIA R0,aABSW R0ABSW R0HIA.w R1,-3HIA.w R1,-3VER R1,bVER R1,bVER R1,cVER R1,cABSW R1ABSW R1OPT R0,R1OPT R0,R1HIA.w R2,4HIA.w R2,4OPT R2,eOPT R2,eABSW R2ABSW R2OPT R0,R2OPT R0,R2BIG R0,yBIG R0,y
| Macro ABSW Ri| Macro ABSW Ri| Parameter Ri| Parameter Ri| Resultaat: Ri | Resultaat: Ri |Ri| |Ri|| Wijzigt Ri (resultaat)| Wijzigt Ri (resultaat)MACROMACRO
ABSW RiABSW Ri
MCREINDEMCREINDE
VGL.w <Ri>,0VGL.w <Ri>,0
VER <Ri>,-1VER <Ri>,-1$$einde:einde:
VSP NNEG,VSP NNEG,$$eindeeinde
Parameter
Parameter
23
Voorvertaling
MACROMACROABSW RiABSW Ri
VGL.w <Ri>,0VGL.w <Ri>,0VSP NNEG,$eindeVSP NNEG,$eindeVER <Ri>,-1VER <Ri>,-1
$einde:$einde: MCREINDMCREIND
HIA R0,aHIA R0,aABSW R0ABSW R0HIA.w R1,-3HIA.w R1,-3VER R1,bVER R1,bVER R1,cVER R1,cABSW R1ABSW R1OPT R0,R1OPT R0,R1HIA.w R2,4HIA.w R2,4OPT R2,eOPT R2,eABSW R2ABSW R2OPT R0,R2OPT R0,R2BIG R0,yBIG R0,y
HIA R0,aHIA R0,aABSW R0ABSW R0
HIA.w R1,-3HIA.w R1,-3VER R1,bVER R1,bVER R1,cVER R1,cABSW R1ABSW R1
OPT R0,R1OPT R0,R1HIA.w R2,4HIA.w R2,4OPT R2,eOPT R2,eABSW R2ABSW R2
OPT R0,R2OPT R0,R2BIG R0,yBIG R0,y
VGL.w VGL.w R0R0,0,0VSP NNEG,_1eindeVSP NNEG,_1eindeVER VER R0R0,-1,-1
_1einde:_1einde:
VGL.w VGL.w R1R1,0,0VSP NNEG,_2eindeVSP NNEG,_2eindeVER VER R1R1,-1,-1
_2einde:_2einde:
VGL.w VGL.w R2R2,0,0VSP NNEG,_3eindeVSP NNEG,_3eindeVER VER R2R2,-1,-1
_3einde:_3einde:
24
Macro-parameters
Ri | Ri | | y = |a|+|-3*b*c|+|4+e|| y = |a|+|-3*b*c|+|4+e|HIA R0,aHIA R0,aABSW 0ABSW 0HIA.w R1,-3HIA.w R1,-3VER R1,bVER R1,bVER R1,cVER R1,cABSW 1ABSW 1OPT R0,R1OPT R0,R1HIA.w R2,4HIA.w R2,4OPT R2,eOPT R2,eABSW 2ABSW 2OPT R0,R2OPT R0,R2BIG R0,yBIG R0,y
| Macro ABSW i| Macro ABSW i| Parameter i| Parameter i| Resultaat: Ri | Resultaat: Ri |Ri| |Ri|| Wijzigt Ri (resultaat)| Wijzigt Ri (resultaat)MACROMACRO
ABSW iABSW i
MCREINDEMCREINDE
VGL.w R<i>,0VGL.w R<i>,0
VER R<i>,-1VER R<i>,-1$$einde:einde:
VSP NNEG,VSP NNEG,$$eindeeinde
25
Voorvertaling
MACROMACROABSW iABSW i
VGL.w R<i>,0VGL.w R<i>,0VSP NNEG,$eindeVSP NNEG,$eindeVER R<i>,-1VER R<i>,-1
$einde:$einde: MCREINDMCREIND
HIA R0,aHIA R0,aABSW 0ABSW 0HIA.w R1,-3HIA.w R1,-3VER R1,bVER R1,bVER R1,cVER R1,cABSW 1ABSW 1OPT R0,R1OPT R0,R1HIA.w R2,4HIA.w R2,4OPT R2,eOPT R2,eABSW 2ABSW 2OPT R0,R2OPT R0,R2BIG R0,yBIG R0,y
HIA R0,aHIA R0,aABSW 0ABSW 0
HIA.w R1,-3HIA.w R1,-3VER R1,bVER R1,bVER R1,cVER R1,cABSW 1ABSW 1
OPT R0,R1OPT R0,R1HIA.w R2,4HIA.w R2,4OPT R2,eOPT R2,eABSW 2ABSW 2
OPT R0,R2OPT R0,R2BIG R0,yBIG R0,y
VGL.w RVGL.w R00,0,0VSP NNEG,_1eindeVSP NNEG,_1eindeVER RVER R00,-1,-1
_1einde:_1einde:
VGL.w RVGL.w R11,0,0VSP NNEG,_2eindeVSP NNEG,_2eindeVER RVER R11,-1,-1
_2einde:_2einde:
VGL.w RVGL.w R22,0,0VSP NNEG,_3eindeVSP NNEG,_3eindeVER RVER R22,-1,-1
_3einde:_3einde:
26
Macro-parameters
z x*x + y*y
| Macro SomKwad| Macro SomKwad| Parameter z,x,y| Parameter z,x,y| Resultaat: z| Resultaat: zx*x+y*yx*x+y*y| Wijzigt R1 en R2| Wijzigt R1 en R2MACROMACRO
SomKwad z,x,ySomKwad z,x,y
MCREINDEMCREINDE
HIA R1,<x>HIA R1,<x>VER R1,<x>VER R1,<x>HIA R2,<y>HIA R2,<y>VER R2,<y>VER R2,<y>OPT R1,R2OPT R1,R2BIG R1,<z>BIG R1,<z>
27
Macro-parameters
z x*x + y*y SomKwad a,b,cSomKwad a,b,c
SomKwad e,R5,fSomKwad e,R5,f
| Macro SomKwad| Macro SomKwad| Parameter z,x,y| Parameter z,x,y| Resultaat: z| Resultaat: zx*x+y*yx*x+y*y| Wijzigt R1 en R2| Wijzigt R1 en R2MACROMACRO
SomKwad z,x,ySomKwad z,x,y
MCREINDEMCREINDE
HIA R1,<x>HIA R1,<x>VER R1,<x>VER R1,<x>HIA R2,<y>HIA R2,<y>VER R2,<y>VER R2,<y>OPT R1,R2OPT R1,R2BIG R1,<z>BIG R1,<z>
HIA R1,bHIA R1,bVER R1,bVER R1,bHIA R2,cHIA R2,cVER R2,cVER R2,cOPT R1,R2OPT R1,R2BIG R1,aBIG R1,a
HIA R1,R5HIA R1,R5VER R1,R5VER R1,R5HIA R2,fHIA R2,fVER R2,fVER R2,fOPT R1,R2OPT R1,R2BIG R1,eBIG R1,e
28
Macro-parameters
z x*x + y*y SomKwad R5,b,cSomKwad R5,b,c
SomKwad e,10,fSomKwad e,10,f
| Macro SomKwad| Macro SomKwad| Parameter z,x,y| Parameter z,x,y| Resultaat: z| Resultaat: zx*x+y*yx*x+y*y| Wijzigt R1 en R2| Wijzigt R1 en R2MACROMACRO
SomKwad z,x,ySomKwad z,x,y
MCREINDEMCREINDE
HIA R1,<x>HIA R1,<x>VER R1,<x>VER R1,<x>HIA R2,<y>HIA R2,<y>VER R2,<y>VER R2,<y>OPT R1,R2OPT R1,R2BIG R1,<z>BIG R1,<z>
HIA R1,bHIA R1,bVER R1,bVER R1,bHIA R2,cHIA R2,cVER R2,cVER R2,cOPT R1,R2OPT R1,R2BIG R1,R5BIG R1,R5
HIA R1,10HIA R1,10VER R1,10VER R1,10HIA R2,fHIA R2,fVER R2,fVER R2,fOPT R1,R2OPT R1,R2BIG R1,eBIG R1,e
OngeldigOngeldigDrama-Drama-bevelbevel
NietNietverwachtverwachtresultaat!resultaat!
29
Macro-parameters
If-then-else constructie
if (x <= y) {if (x <= y) {… … kleiner of gelijk …kleiner of gelijk …
} else {} else {… … groter dan …groter dan …
}}
IfThenElse x,y,KLG,klg,grd,1IfThenElse x,y,KLG,klg,grd,1
klg:klg: … | kleiner of gelijk… | kleiner of gelijk
……
SPR endifSPR endif
grd:grd: … | groter dan… | groter dan
……
endif:endif: ……
30
Macro-parameters
If-then-else constructie IfThenElse x,y,KLG,klg,grd,1IfThenElse x,y,KLG,klg,grd,1
klg:klg: … | kleiner of … | kleiner of gelijkgelijk
……
SPR endifSPR endif
grd:grd: … | groter dan… | groter dan
……
endif:endif: ……
| Macro IfThenElse| Macro IfThenElse| Parameters:| Parameters:| a,b,vw,dan,anders,reg| a,b,vw,dan,anders,reg| Resultaat: | Resultaat: | if (a vw b) SPR dan| if (a vw b) SPR dan| else SPR anders| else SPR anders| Wijzigt register Rreg| Wijzigt register RregMACROMACRO IfThenElse a,b,vw,dan,\IfThenElse a,b,vw,dan,\ anders,reg anders,reg
MCREINDEMCREINDE
HIA R<reg>,<a>HIA R<reg>,<a>VGL R<reg>,<b>VGL R<reg>,<b>VSP <vw>,<dan>VSP <vw>,<dan>
klg:klg: … | kleiner of gelijk… | kleiner of gelijk……SPR endifSPR endif
grd:grd: … | groter dan… | groter dan……
endif:endif: ……SPR <anders>SPR <anders>
HIA R1,xHIA R1,xVGL R1,yVGL R1,yVSP KLG,klgVSP KLG,klgSPR grdSPR grd
31
Macro-variabelen Doel
Tijdens de expansie berekening uitvoeren Geen declaratie
Bestaan zodra eerste toekenning MEVA-directief
MEVA variabele,expressie Voorbeeld:
MEVA A,10 MEVA B,<A>-20
Beperkingen: Uitdrukking gehele waarde Uitdrukking: macro-variabelen, -parameters, +, -, *, /, (, ) Lokale variabele! na oproep verdwenen
32
Macro-variabelen
Ri Ri-1 + Ri + Ri+1 TelOp 4TelOp 4
TelOp 8TelOp 8
TelOp 9TelOp 9
TelOp 0TelOp 0
| Macro TelOp| Macro TelOp| Parameter i (0<i<9)| Parameter i (0<i<9)| Resultaat: R| Resultaat: Rii+=R+=Ri-1i-1+R+Ri+1i+1
MACROMACROTelOp iTelOp i
MCREINDEMCREINDE
MEVA reg,<i>-1MEVA reg,<i>-1OPT R<i>,R<reg>OPT R<i>,R<reg>MEVA reg,<i>+1MEVA reg,<i>+1OPT R<i>,R<reg>OPT R<i>,R<reg>
OPT R4,R3OPT R4,R3OPT R4,R5OPT R4,R5
OPT R8,R7OPT R8,R7OPT R8,R9OPT R8,R9 OngeldigOngeldig
Adres als Adres als R10 niet ge-R10 niet ge-definieerddefinieerd
OPT R9,R8OPT R9,R8OPT R9,R10OPT R9,R10
OPT R0,R-1OPT R0,R-1OPT R0,R1OPT R0,R1
OngeldigOngeldigAdres als Adres als R niet ge-R niet ge-definieerddefinieerd
33
Voorwaardelijke macro-opbouw
Doel: Gelijkaardige maar niet identieke code inlassen
Parameters 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, …
34
Voorwaardelijk macro-opbouw
Res A1 + … + An (n=1 .. 3) | d | d a + b + c a + b + cSom 3,d,a,b,cSom 3,d,a,b,c
| k | k l + m l + mSom 2,k,l,mSom 2,k,l,m
| x | x y ySom 1,x,ySom 1,x,y
| Macro Som| Macro Som| Resultaat: Res = A| Resultaat: Res = A11+…+A+…+ANN
| Wijzigt R1| Wijzigt R1MACROMACRO
Som N,Res,A1,A2,A3Som N,Res,A1,A2,A3
MCREINDEMCREINDE
HIA R1,<A1>HIA R1,<A1>
OPT R1,<A2>OPT R1,<A2>
HIA R1,aHIA R1,aOPT R1,bOPT R1,bOPT R1,cOPT R1,cBIG R1,dBIG R1,d
HIA R1,lHIA R1,lOPT R1,mOPT R1,mBIG R1,kBIG R1,k
HIA R1,yHIA R1,yBIG R1,xBIG R1,x
MVGL <N>,1MVGL <N>,1MVSP GEL,$bergwegMVSP GEL,$bergweg
MVGL <N>,2MVGL <N>,2MVSP GEL,$bergwegMVSP GEL,$bergwegOPT R1,<A3>OPT R1,<A3>
$bergweg: MNTS$bergweg: MNTSBIG R1,<Res>BIG R1,<Res>
35
Macro-directievenDirectief Betekenis
MACRO Nieuwe macro-definitie
MCREINDE Einde van macro-definitie
MVGL uitdr1,uitdr2 MCC resultaat van vergelijking uitdr1 en uitdr2
MVSP conditie,$etiket Indien MCC aan conditie voldoet, ga verder bij $etiket
MSPR $etiket Ga verder bij lijn met $etiket
MEVA variabele,uitdrukking Variabele uitdrukking
MNTS Loos directief
(om macro-etiket voor te plaatsen)
MFOUT “foutenboodschap” Voorvertaler drukt “foutenboodschap” af en stopt de voorvertaling
36
Voorwaardelijk macro-opbouw
Res (Getal)Exp (0 <= Exp) | b | b a a33
Macht b,a,3,R1Macht b,a,3,R1
| y | y x x00
Macht y,x,0,R0Macht y,x,0,R0
| k | k m m-1-1
Macht k,m,-1,R3Macht k,m,-1,R3
| Macro Macht| Macro Macht| Resultaat: Res = (Getal)| Resultaat: Res = (Getal)ExpExp
| Wijzigt R| Wijzigt RRegReg
MACROMACROMacht Res,Getal,Exp,RegMacht Res,Getal,Exp,Reg
MCREINDEMCREINDE
HIA.w <Reg>,1HIA.w <Reg>,1
VER <Reg>,<Getal>VER <Reg>,<Getal>
HIA.w R1,1HIA.w R1,1VER R1,aVER R1,aVER R1,aVER R1,aVER R1,aVER R1,aBIG R1,bBIG R1,b
HIA.w R0,1HIA.w R0,1BIG R0,yBIG R0,y
$lus: MVGL <Exp>,0$lus: MVGL <Exp>,0MVSP GEL,$bergwegMVSP GEL,$bergweg
MSPR $lusMSPR $lusMEVA Exp,<Exp>-1MEVA Exp,<Exp>-1
$bergweg: MNTS$bergweg: MNTSBIG <Reg>,<Res>BIG <Reg>,<Res>
MVGL <Exp>,0MVGL <Exp>,0MVSP GRG,$lusMVSP GRG,$lusMFOUT “Exp moet >= 0”MFOUT “Exp moet >= 0”
HIA.w R3,1HIA.w R3,1*** fout *** Exp moet >= 0*** fout *** Exp moet >= 0
37
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
38
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0)
| Macro Som| Macro Som| Res=a| Res=a11+…+a+…+ann (0<n<=4) (0<n<=4)| Wijzigt R1| Wijzigt R1MACROMACRO
Som Res,n,a1,a2,a3,a4Som Res,n,a1,a2,a3,a4
MCREINDEMCREINDE
HIA R1,<a1>HIA R1,<a1>Rsom <n>,<a2>,<a3>,<a4>Rsom <n>,<a2>,<a3>,<a4>BIG R1,<Res>BIG R1,<Res>
MVGL <n>,0MVGL <n>,0MVSP GR,$posMVSP GR,$posMFOUT “n moet >= 0”MFOUT “n moet >= 0”
| Macro RSom| Macro RSom| R1 += b| R1 += b11+…+b+…+bn-1n-1
MACROMACRORsom n,b1,b2,b3Rsom n,b1,b2,b3
MCREINDEMCREINDE
MEVA n,<n>-1MEVA n,<n>-1MVGL <n>,1MVGL <n>,1MVSP KL,$eindeMVSP KL,$eindeOPT R1,<b1>OPT R1,<b1>Rsom <n>,<b2>,<b3>Rsom <n>,<b2>,<b3>
$einde: MNTS$einde: MNTS$pos: MVGL <n>,4$pos: MVGL <n>,4
MVSP KLG,$okMVSP KLG,$okMFOUT “n moet <= 4”MFOUT “n moet <= 4”
$ok:$ok: MNTSMNTS
39
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c| Macro Som| Macro Som
| Res=a| Res=a11+…+a+…+ann (0<n<=4) (0<n<=4)| Wijzigt R1| Wijzigt R1MACROMACRO
Som Res,n,a1,a2,a3,a4Som Res,n,a1,a2,a3,a4
MCREINDEMCREINDE
HIA R1,<a1>HIA R1,<a1>Rsom <n>,<a2>,<a3>,<a4>Rsom <n>,<a2>,<a3>,<a4>BIG R1,<Res>BIG R1,<Res>
MVGL <n>,0MVGL <n>,0MVSP GR,$posMVSP GR,$posMFOUT “n moet >= 0”MFOUT “n moet >= 0”
$pos: MVGL <n>,4$pos: MVGL <n>,4MVSP KLG,$okMVSP KLG,$okMFOUT “n moet <= 4”MFOUT “n moet <= 4”
$ok:$ok: MNTSMNTS
HIA R1,aHIA R1,a
40
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c| Macro Som| Macro Som
| Res=a| Res=a11+…+a+…+ann (0<n<=4) (0<n<=4)| Wijzigt R1| Wijzigt R1MACROMACRO
Som Res,n,a1,a2,a3,a4Som Res,n,a1,a2,a3,a4
MCREINDEMCREINDE
HIA R1,<a1>HIA R1,<a1>Rsom <n>,<a2>,<a3>,<a4>Rsom <n>,<a2>,<a3>,<a4>BIG R1,<Res>BIG R1,<Res>
MVGL <n>,0MVGL <n>,0MVSP GR,$posMVSP GR,$posMFOUT “n moet >= 0”MFOUT “n moet >= 0”
$pos: MVGL <n>,4$pos: MVGL <n>,4MVSP KLG,$okMVSP KLG,$okMFOUT “n moet <= 4”MFOUT “n moet <= 4”
$ok:$ok: MNTSMNTS
HIA R1,aHIA R1,a
Rsom 3,b,c,Rsom 3,b,c,
41
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c
HIA R1,aHIA R1,a
Rsom 3,b,c,Rsom 3,b,c,
| Macro RSom| Macro RSom| R1 += b| R1 += b11+…+b+…+bn-1n-1
MACROMACRORsom n,b1,b2,b3Rsom n,b1,b2,b3
MCREINDEMCREINDE
MEVA n,<n>-1MEVA n,<n>-1MVGL <n>,1MVGL <n>,1MVSP KL,$eindeMVSP KL,$eindeOPT R1,<b1>OPT R1,<b1>Rsom <n>,<b2>,<b3>Rsom <n>,<b2>,<b3>
$einde: MNTS$einde: MNTS
OPT R1,bOPT R1,b
Rsom 2,c,,Rsom 2,c,,
nn 3 3b1b1 bbb2b2 ccb3b3
nn 2 2b1b1 bbb2b2 ccb3b3
42
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c
HIA R1,aHIA R1,a
Rsom 3,b,c,Rsom 3,b,c,
| Macro RSom| Macro RSom| R1 += b| R1 += b11+…+b+…+bn-1n-1
MACROMACRORsom n,b1,b2,b3Rsom n,b1,b2,b3
MCREINDEMCREINDE
MEVA n,<n>-1MEVA n,<n>-1MVGL <n>,1MVGL <n>,1MVSP KL,$eindeMVSP KL,$eindeOPT R1,<b1>OPT R1,<b1>Rsom <n>,<b2>,<b3>Rsom <n>,<b2>,<b3>
$einde: MNTS$einde: MNTS
OPT R1,bOPT R1,b
Rsom 2,c,,Rsom 2,c,,
OPT R1,cOPT R1,c
Rsom 1,,,Rsom 1,,,
nn 2 2b1b1 bbb2b2 ccb3b3
nn 2 2b1b1 ccb2b2 b3b3
nn 1 1b1b1 ccb2b2 b3b3
43
nn 1 1b1b1 b2b2 b3b3
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c
HIA R1,aHIA R1,a
Rsom 3,b,c,Rsom 3,b,c,
| Macro RSom| Macro RSom| R1 += b| R1 += b11+…+b+…+bn-1n-1
MACROMACRORsom n,b1,b2,b3Rsom n,b1,b2,b3
MCREINDEMCREINDE
MEVA n,<n>-1MEVA n,<n>-1MVGL <n>,1MVGL <n>,1MVSP KL,$eindeMVSP KL,$eindeOPT R1,<b1>OPT R1,<b1>Rsom <n>,<b2>,<b3>Rsom <n>,<b2>,<b3>
$einde: MNTS$einde: MNTS
OPT R1,bOPT R1,b
Rsom 2,c,,Rsom 2,c,,
OPT R1,cOPT R1,c
Rsom 1,,,Rsom 1,,,
nn 2 2b1b1 bbb2b2 ccb3b3
nn 1 1b1b1 ccb2b2 b3b3
nn 0 0b1b1 b2b2 b3b3
44
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c
HIA R1,aHIA R1,a
Rsom 3,b,c,Rsom 3,b,c,
| Macro RSom| Macro RSom| R1 += b| R1 += b11+…+b+…+bn-1n-1
MACROMACRORsom n,b1,b2,b3Rsom n,b1,b2,b3
MCREINDEMCREINDE
MEVA n,<n>-1MEVA n,<n>-1MVGL <n>,1MVGL <n>,1MVSP KL,$eindeMVSP KL,$eindeOPT R1,<b1>OPT R1,<b1>Rsom <n>,<b2>,<b3>Rsom <n>,<b2>,<b3>
$einde: MNTS$einde: MNTS
OPT R1,bOPT R1,b
Rsom 2,c,,Rsom 2,c,,
OPT R1,cOPT R1,c
Rsom 1,,,Rsom 1,,,
nn 2 2b1b1 bbb2b2 ccb3b3
nn 1 1b1b1 ccb2b2 b3b3
45
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c
HIA R1,aHIA R1,a
Rsom 3,b,c,Rsom 3,b,c,
| Macro RSom| Macro RSom| R1 += b| R1 += b11+…+b+…+bn-1n-1
MACROMACRORsom n,b1,b2,b3Rsom n,b1,b2,b3
MCREINDEMCREINDE
MEVA n,<n>-1MEVA n,<n>-1MVGL <n>,1MVGL <n>,1MVSP KL,$eindeMVSP KL,$eindeOPT R1,<b1>OPT R1,<b1>Rsom <n>,<b2>,<b3>Rsom <n>,<b2>,<b3>
$einde: MNTS$einde: MNTS
OPT R1,bOPT R1,b
Rsom 2,c,,Rsom 2,c,,
OPT R1,cOPT R1,c
nn 2 2b1b1 bbb2b2 ccb3b3
46
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c
HIA R1,aHIA R1,a
Rsom 3,b,c,Rsom 3,b,c,
| Macro RSom| Macro RSom| R1 += b| R1 += b11+…+b+…+bn-1n-1
MACROMACRORsom n,b1,b2,b3Rsom n,b1,b2,b3
MCREINDEMCREINDE
MEVA n,<n>-1MEVA n,<n>-1MVGL <n>,1MVGL <n>,1MVSP KL,$eindeMVSP KL,$eindeOPT R1,<b1>OPT R1,<b1>Rsom <n>,<b2>,<b3>Rsom <n>,<b2>,<b3>
$einde: MNTS$einde: MNTS
OPT R1,bOPT R1,b
OPT R1,cOPT R1,c
47
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c
HIA R1,aHIA R1,a
OPT R1,bOPT R1,b
OPT R1,cOPT R1,c
| Macro Som| Macro Som| Res=a| Res=a11+…+a+…+ann (0<n<=4) (0<n<=4)| Wijzigt R1| Wijzigt R1MACROMACRO
Som Res,n,a1,a2,a3,a4Som Res,n,a1,a2,a3,a4
MCREINDEMCREINDE
HIA R1,<a1>HIA R1,<a1>Rsom <n>,<a2>,<a3>,<a4>Rsom <n>,<a2>,<a3>,<a4>BIG R1,<Res>BIG R1,<Res>
MVGL <n>,0MVGL <n>,0MVSP GR,$posMVSP GR,$posMFOUT “n moet >= 0”MFOUT “n moet >= 0”
$pos: MVGL <n>,4$pos: MVGL <n>,4MVSP KLG,$okMVSP KLG,$okMFOUT “n moet <= 4”MFOUT “n moet <= 4”
$ok:$ok: MNTSMNTS
BIG R1,xBIG R1,x
48
Genestelde en recursieve macro-oproepen
Res A1 + … + AN (N > 0) | x | x a + b + c a + b + cSom x,3,a,b,cSom x,3,a,b,c
HIA R1,aHIA R1,aOPT R1,bOPT R1,bOPTOPT R1,cR1,cBIGBIG R1,xR1,x
| Macro Som| Macro Som| Res=a| Res=a11+…+a+…+ann (0<n<=4) (0<n<=4)| Wijzigt R1| Wijzigt R1MACROMACRO
Som Res,n,a1,a2,a3,a4Som Res,n,a1,a2,a3,a4
MCREINDEMCREINDE
HIA R1,<a1>HIA R1,<a1>Rsom <n>,<a2>,<a3>,<a4>Rsom <n>,<a2>,<a3>,<a4>BIG R1,<Res>BIG R1,<Res>
MVGL <n>,0MVGL <n>,0MVSP GR,$posMVSP GR,$posMFOUT “n moet >= 0”MFOUT “n moet >= 0”
$pos: MVGL <n>,4$pos: MVGL <n>,4MVSP KLG,$okMVSP KLG,$okMFOUT “n moet <= 4”MFOUT “n moet <= 4”
$ok:$ok: MNTSMNTS
49
Globale macro-variabelen
Doel: Waarden langer bewaren (over macro-oproepen heen) Constanten
Werkwijze: MEVA buiten macro-definitie
MEVA LAB,1MEVA LAB,1……MACROMACRO SpringSpring SPR NAAR<LAB>SPR NAAR<LAB> MEVA LAB,<LAB>+1MEVA LAB,<LAB>+1 … …MCREINDEMCREINDE……
MEVA N,10MEVA N,10
……VGL.w R1,VGL.w R1,<N><N>VSP GEL,endwhVSP GEL,endwh……
A:A: RESGR RESGR <N><N>
50
Globale macro-variabelen
MEVA LAB,1MEVA LAB,1MACROMACRO ReserveerPlaats NReserveerPlaats N
SPR NAAR<LAB>SPR NAAR<LAB> MEVA LAB,<LAB>+1MEVA LAB,<LAB>+1 RESGR <N>RESGR <N>NAAR<LAB>:NAAR<LAB>:MCREINDEMCREINDEHIA.w R1,10HIA.w R1,10ReserveerPlaats 10ReserveerPlaats 10OPT R1,bOPT R1,b……HIA.w R2,100HIA.w R2,100ReserveerPlaats 20ReserveerPlaats 20AFT R2,R1AFT R2,R1……
HIA.w R1,10HIA.w R1,10ReserveerPlaats 10ReserveerPlaats 10
OPT R1,bOPT R1,b……HIA.w R2,100HIA.w R2,100ReserveerPlaats 20ReserveerPlaats 20
AFT R2,R1AFT R2,R1……
SPR NAARSPR NAAR11RESGR RESGR 1010
NAARNAAR11::
SPR NAARSPR NAAR22RESGR RESGR 2020
NAARNAAR22::
51
Globale macro-variabelen
MEVA N,10MEVA N,10……VGL.w R1,VGL.w R1,<N><N>VSP GEL,endwhVSP GEL,endwhHIA.w R2,10HIA.w R2,10……STPSTP
A:A: RESGR RESGR <N><N>
……VGL.w R1,VGL.w R1,1010VSP GEL,endwhVSP GEL,endwhHIA.w R2,10HIA.w R2,10……STPSTP
A:A: RESGR RESGR 1010
MEVA N,30MEVA N,30……VGL.w R1,VGL.w R1,<N><N>VSP GEL,endwhVSP GEL,endwhHIA.w R2,10HIA.w R2,10……STPSTP
A:A: RESGR RESGR <N><N>
……VGL.w R1,VGL.w R1,3030VSP GEL,endwhVSP GEL,endwhHIA.w R2,10HIA.w R2,10……STPSTP
A:A: RESGR RESGR 3030
52
Directieven buiten macro-definitie
MEVA, MVGL, MVSP, MSPR, MFOUT Ook buiten macro-definitie te gebruiken Voorbeeld:
Voorwaardelijke programma-opbouw Vb. Bepaalde stukken code overslaan
MEVA DEBUG,1MEVA DEBUG,1| Berekening van tussenres. in R1| Berekening van tussenres. in R1
……MVGL <DEBUG>,1MVGL <DEBUG>,1MVSP NGEL,$nodebugMVSP NGEL,$nodebug
HIA R0,R1HIA R0,R1DRUDRU
$nodebug: MNTS$nodebug: MNTS……
Bevelen ingelast als DEBUG=1Bevelen ingelast als DEBUG=1
53
Directieven buiten macro-definitie
MEVA DEBUG,1MEVA DEBUG,1……HIA.w R1,aHIA.w R1,aAFT R1,bAFT R1,bMVGL <DEBUG>,1MVGL <DEBUG>,1MVSP NGEL,$gdbMVSP NGEL,$gdbHIA R0,R1HIA R0,R1DRUDRU
$gdb:$gdb: MNTSMNTSBIG R1,cBIG R1,c……
……HIA.w R1,aHIA.w R1,aAFT R1,bAFT R1,b
HIA R0,R1HIA R0,R1DRUDRU
BIG R1,cBIG R1,c……
Debugcode Debugcode aanwezigaanwezig
54
Directieven buiten macro-definitie
MEVA DEBUG,MEVA DEBUG,00……HIA.w R1,aHIA.w R1,aAFT R1,bAFT R1,bMVGL <DEBUG>,1MVGL <DEBUG>,1MVSP NGEL,$gdbMVSP NGEL,$gdbHIA R0,R1HIA R0,R1DRUDRU
$gdb:$gdb: MNTSMNTSBIG R1,cBIG R1,c……
……HIA.w R1,aHIA.w R1,aAFT R1,bAFT R1,b
BIG R1,cBIG R1,c……
Debugcode Debugcode weggelatenweggelaten
55
Cursustekst
Hoofdstuk 1: pag. 165 einde