Title: Een echtere stack-machine
1Een echtere stack-machine
- Memory
- Program
- Stack
- Memory
- Registers
- Progr.counter
- Stack pointer
- Mark pointer
2Instructies load on stack
LDC 17
12
LDR R4
LDL 2
LDS -3
LDLA 1
LDA 2
NOP
HALT
59
63
75
31
81
43
3Instructies load on stack
LDC 17
12
LDR R4
17
LDL 2
LDS -3
LDLA 1
LDA 2
NOP
HALT
59
63
75
31
81
43
4Instructies load on stack
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
LDLA 1
LDA 2
NOP
HALT
59
63
75
31
81
43
5Instructies load on stack
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
LDA 2
NOP
HALT
59
63
75
31
81
43
6Instructies load on stack
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
12
LDA 2
NOP
HALT
59
63
75
31
81
43
7Instructies load on stack
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
12
LDA 2
NOP
HALT
59
63
75
31
81
43
8Instructies load on stack
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
12
LDA 2
81
NOP
HALT
59
63
75
31
81
43
9Instructies load on stack
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
12
LDA 2
81
NOP
HALT
59
63
75
31
81
43
10Instructies store from stack
11Instructies Register
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
12
LDA 2
81
NOP
LDRR 3 4
59
AJS -2
63
BRA 3
75
LDC 91
31
81
STR R3
RET
BSR -4
43
LDR R3
12Instructies Register
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
12
LDA 2
81
NOP
LDRR 3 4
59
AJS -2
63
BRA 3
75
LDC 91
43
81
STR R3
RET
BSR -4
43
LDR R3
13Instructies Register
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
12
LDA 2
81
NOP
LDRR 3 4
59
AJS -2
63
BRA 3
75
LDC 91
43
81
STR R3
RET
BSR -4
43
LDR R3
14Instructies Register
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
12
LDA 2
81
NOP
LDRR 3 4
59
AJS -2
63
BRA 3
75
LDC 91
43
81
STR R3
RET
BSR -4
43
LDR R3
15Instructies Register
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
LDA 2
81
NOP
LDRR 3 4
59
AJS -2
63
BRA 3
75
LDC 91
43
81
STR R3
RET
BSR -4
43
LDR R3
16Instructies Register
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
LDA 2
91
NOP
LDRR 3 4
59
AJS -2
63
BRA 3
75
LDC 91
43
81
STR R3
RET
BSR -4
43
LDR R3
17Instructies Register
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
LDA 2
91
NOP
LDRR 3 4
59
AJS -2
63
BRA 3
75
LDC 91
- RETReturn from subroutine
91
81
STR R3
RET
BSR -4
43
LDR R3
18Instructies Register
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
LDA 2
91
NOP
LDRR 3 4
59
AJS -2
63
BRA 3
75
LDC 91
- RETReturn from subroutine
91
81
STR R3
RET
BSR -4
43
LDR R3
19Instructies Register
LDC 17
12
LDR R4
17
LDL 2
43
LDS -3
75
LDLA 1
91
LDA 2
91
NOP
LDRR 3 4
59
AJS -2
63
BRA 3
75
LDC 91
- RETReturn from subroutine
91
81
STR R3
RET
BSR -4
43
LDR R3
20Instructies Arithmetic
Haal twee waarden van de stack, en
vervang ze door het resultaat van
één of
21Instructies Branch
- BRA Onvoorwaardelijke sprong
- BSR Zet eerst returnadres op stack
- BRT Voorwaardelijke sprong alleen als er True
op stack staat - BRF Voorwaardelijke sprong False
22Codegeneratie voor Expressies
23Codegenereer-Algebra
code b foldExpr codeAlg b where codeAlg
ExpAlg Code (\n ? ,\x y ? ,\x
y ? ,\x y ? ,\x y z ? )
data Expr Con Int Add Expr Expr
Mul Expr Expr Eq Expr Expr If Expr
Expr Expr
(Env?Code)
LDC n
x y ADD
x y MUL
x y EQ
yey e zez e
let sysize y szsize
z in
x BRF (sy1) y BRA sz z
\e ?
,\s ? ,\s d b ?
Var Str Let Str Expr Expr
LDL s
LDL (e?s)
\e ?
d e STL (length e) b ((s,a)e)
24Codegenereer-Algebra
code b foldStEx codeAlg b where codeAlg
StExAlg Code ((\s d ?\e ? ,\c b
a ?\e ? ,\c b ?\e ? ,\m ps ?\e ? ), ())
data Stat Asmt Str Expr If Expr Stat
Stat While Expr Stat Call Str Expr
(Env?Code)
d e STL (e?s)
ce BRF(size be1) be BRA(size ae)ae
ce BRF (n1) be BRA (nk2) where n
size be k size ce
concat p e p?ps BSR (f e m)
25Codegenereer-Algebra
code b foldStEx codeAlg b where codeAlg
StExAlg Code ((\s d ?\e ? ,\c b
a ?\e ? ,\c b ?\e ? ,\m ps ?\e ? ), ())
data Stat Asmt Str Expr If Expr Stat
Stat While Expr Stat Call Str Expr
(Env?Code)
d e STL (e?s)
ce BRF(size be) be BRA(size ae)ae
BRA n be ce BRT (nk1) where n
size be k size ce
concat p e p?ps BSR (f e m)
26Methodes met parameters
m(7, 12)
void m(int x, int y) p(x37) q(xy)
27Methodes met parameters
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
m
LDS -2
void m(int x, int y) p(x37) q(xy)
LDC 37
ADD
BSR p
LDS -2
LDS -2
MUL
BSR q
STS -2
AJS -1
RET
28Methodes met parameters
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
7
37
m
LDS -2
void m(int x, int y) p(x37) q(xy)
LDC 37
ADD
BSR p
LDS -2
LDS -2
MUL
BSR q
STS -2
AJS -1
RET
29Methodes met parameters
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
44
37
m
LDS -2
void m(int x, int y) p(x37) q(xy)
LDC 37
ADD
BSR p
LDS -2
LDS -2
MUL
BSR q
STS -2
AJS -1
RET
30Methodes met parameters
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
44
37
m
LDS -2
void m(int x, int y) p(x37) q(xy)
LDC 37
ADD
BSR p
LDS -2
LDS -2
MUL
Wij ruimen onze eigen rommel op!
BSR q
STS -2
AJS -1
RET
31Methodes met parameters
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
96
12
m
LDS -2
void m(int x, int y) p(x37) q(xy)
LDC 37
ADD
BSR p
LDS -2
LDS -2
MUL
Wij ruimen onze eigen rommel op!
BSR q
STS -2
AJS -1
RET
32Methodes met parameters
LDC 7
m(7, 12)
LDC 12
12
BSR m
96
12
m
LDS -2
void m(int x, int y) p(x37) q(xy)
LDC 37
ADD
BSR p
LDS -2
LDS -2
MUL
Wij ruimen onze eigen rommel op!
BSR q
STS -2
AJS -1
RET
33Methodes met parameters
LDC 7
m(7, 12)
LDC 12
12
BSR m
96
12
m
LDS -2
void m(int x, int y) p(x37) q(xy)
LDC 37
ADD
BSR p
LDS -2
LDS -2
MUL
Wij ruimen onze eigen rommel op!
BSR q
STS -2
AJS -1
RET
34Methodes met parameters
LDC 7
m(7, 12)
LDC 12
12
BSR m
96
12
m
LDS -2
void m(int x, int y) p(x37) q(xy)
LDC 37
ADD
BSR p
LDS -2
LDS -2
MUL
Wij ruimen onze eigen rommel op!
BSR q
STS -2
AJS -1
RET
35Methodes met n parameters
- Methode-aanroep
- Zet parametersop de stack
- Call
- Methode-definitie
- Gebruik parameters
- Ruim stack op
- Return
BSR m
LDS (nd)
LDS (1d)
STS n
AJS (n-1)
RET
36Methode met lokale variabelen
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
m
LDR MP
void m(int x, int y) int a, b a -x
37Methode met lokale variabelen
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
38Methode met lokale variabelen
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
AJS 2
39Methode met lokale variabelen
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
AJS 2
40Methode met lokale variabelen
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
-7
AJS 2
STL 1
41Methode met lokale variabelen
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
-7
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
-7
AJS 2
STL 1
SPMP
42Methode met lokale variabelen
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
-7
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
-7
AJS 2
STL 1
SPMP
STR MP
43Methode met lokale variabelen
LDC 7
7
m(7, 12)
LDC 12
12
BSR m
-7
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
-7
AJS 2
STL 1
SPMP
STR MP
STS -2
44Methode met lokale variabelen
LDC 7
m(7, 12)
LDC 12
12
BSR m
-7
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
-7
AJS 2
STL 1
SPMP
STR MP
STS -2
AJS -1
45Methode met lokale variabelen
LDC 7
m(7, 12)
LDC 12
12
BSR m
-7
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
-7
AJS 2
STL 1
SPMP
STR MP
STS -2
AJS -1
RET
46Methode met lokale variabelen
LDC 7
m(7, 12)
LDC 12
12
BSR m
-7
m
LDR MP
void m(int x, int y) int a, b a -x
MPSP
-7
AJS 2
STL 1
SPMP
STR MP
STS -2
AJS -1
RET
47Methode met n parameters en k lokale variabelen
LINK k
- Creëer ruimte voor lokalen
- Bewaar oude MP
- MP wijst naar stukje stack
- Gebruik variabelen in de body
- Parameters
- Lokale variabelen
- Opruimen
- Lokale variabelen
- Parameters
LDR MP
UNLINK
RET
48Methoden met een resultaat
- Laat het resultaat achter op de stack(nog meer
gepruts bij het opruimen) - Laat het resultaat achter in R3
òf