SOCS

55
1 SOCS Hoofdstuk 1 Computerarchitect uur

description

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 - PowerPoint PPT Presentation

Transcript of SOCS

Page 1: SOCS

1

SOCS

Hoofdstuk 1

Computerarchitectuur

Page 2: SOCS

2

Overzicht

Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren Macro’s

CC

Page 3: SOCS

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

Page 4: SOCS

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

Page 5: SOCS

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

Page 6: SOCS

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

Page 7: SOCS

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

Page 8: SOCS

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|

Page 9: SOCS

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

Page 10: SOCS

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

Page 11: SOCS

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

Page 12: SOCS

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

Page 13: SOCS

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

Page 14: SOCS

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)

Page 15: SOCS

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 |

Page 16: SOCS

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

Page 17: SOCS

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:

Page 18: SOCS

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

Page 19: SOCS

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

Page 20: SOCS

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:

Page 21: SOCS

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>, …

Page 22: SOCS

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

Page 23: SOCS

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:

Page 24: SOCS

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

Page 25: SOCS

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:

Page 26: SOCS

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>

Page 27: SOCS

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

Page 28: SOCS

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!

Page 29: SOCS

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: ……

Page 30: SOCS

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

Page 31: SOCS

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

Page 32: SOCS

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

Page 33: SOCS

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, …

Page 34: SOCS

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>

Page 35: SOCS

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

Page 36: SOCS

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

Page 37: SOCS

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

Page 38: SOCS

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

Page 39: SOCS

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

Page 40: SOCS

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,

Page 41: SOCS

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

Page 42: SOCS

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

Page 43: SOCS

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

Page 44: SOCS

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

Page 45: SOCS

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

Page 46: SOCS

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

Page 47: SOCS

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

Page 48: SOCS

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

Page 49: SOCS

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>

Page 50: SOCS

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::

Page 51: SOCS

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

Page 52: SOCS

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

Page 53: SOCS

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

Page 54: SOCS

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

Page 55: SOCS

55

Cursustekst

Hoofdstuk 1: pag. 165 einde