Een echtere stack-machine - PowerPoint PPT Presentation

1 / 48
About This Presentation
Title:

Een echtere stack-machine

Description:

Title: Grammatica's en ontleden Author: Jeroen Fokker Last modified by: Doaitse Swierstra Created Date: 11/16/2002 10:02:14 PM Document presentation format – PowerPoint PPT presentation

Number of Views:32
Avg rating:3.0/5.0
Slides: 49
Provided by: Jeroen82
Category:
Tags: echtere | een | machine | stack

less

Transcript and Presenter's Notes

Title: Een echtere stack-machine


1
Een echtere stack-machine
  • Memory
  • Registers
  • Memory
  • Program
  • Stack
  • Memory
  • Registers
  • Progr.counter
  • Stack pointer
  • Mark pointer

2
Instructies load on stack
  • LDCLoad from constant

LDC 17
12
LDR R4
LDL 2
LDS -3
LDLA 1
LDA 2
NOP
HALT
59
63
75
31
81
43
3
Instructies load on stack
  • LDCLoad from constant

LDC 17
12
LDR R4
17
  • LDRLoad from register

LDL 2
LDS -3
LDLA 1
LDA 2
NOP
HALT
59
63
75
31
81
43
4
Instructies load on stack
  • LDCLoad from constant

LDC 17
12
LDR R4
17
  • LDRLoad from register

LDL 2
43
LDS -3
LDLA 1
  • LDLLoad from local

LDA 2
NOP
HALT
59
63
75
31
81
43
5
Instructies load on stack
  • LDCLoad from constant

LDC 17
12
LDR R4
17
  • LDRLoad from register

LDL 2
43
LDS -3
75
LDLA 1
  • LDLLoad from local

LDA 2
NOP
HALT
  • LDSLoad from stack

59
63
75
31
81
43
6
Instructies load on stack
  • LDCLoad from constant

LDC 17
12
LDR R4
17
  • LDRLoad from register

LDL 2
43
LDS -3
75
LDLA 1
12
  • LDLLoad from local

LDA 2
NOP
HALT
  • LDSLoad from stack

59
63
75
  • LDLALoad local address

31
81
43
7
Instructies load on stack
  • LDCLoad from constant

LDC 17
12
LDR R4
17
  • LDRLoad from register

LDL 2
43
LDS -3
75
LDLA 1
12
  • LDLLoad from local

LDA 2
NOP
HALT
  • LDSLoad from stack

59
63
75
  • LDLALoad local address

31
81
  • LDALoad via address

43
8
Instructies load on stack
  • LDCLoad from constant

LDC 17
12
LDR R4
17
  • LDRLoad from register

LDL 2
43
LDS -3
75
LDLA 1
12
  • LDLLoad from local

LDA 2
81
NOP
HALT
  • LDSLoad from stack

59
63
75
  • LDLALoad local address

31
81
  • LDALoad via address

43
9
Instructies load on stack
  • LDCLoad from constant

LDC 17
12
LDR R4
17
  • LDRLoad from register

LDL 2
43
LDS -3
75
LDLA 1
12
  • LDLLoad from local

LDA 2
81
NOP
HALT
  • LDSLoad from stack

59
63
75
  • LDLALoad local address

31
81
  • LDALoad via address

43
10
Instructies store from stack
  • LDCLoad from constant
  • LDRLoad from register
  • LDLLoad from local
  • LDSLoad from stack
  • LDLALoad local address
  • LDALoad via address

11
Instructies Register
  • LDRRLoad reg. to reg.

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
12
Instructies Register
  • LDRRLoad reg. to reg.

LDC 17
12
LDR R4
17
  • AJSAdjust stackpointer

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
13
Instructies Register
  • LDRRLoad reg. to reg.

LDC 17
12
LDR R4
17
  • AJSAdjust stackpointer

LDL 2
43
LDS -3
75
LDLA 1
12
  • BRABranch (Jump)

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
14
Instructies Register
  • LDRRLoad reg. to reg.

LDC 17
12
LDR R4
17
  • AJSAdjust stackpointer

LDL 2
43
LDS -3
75
LDLA 1
12
  • BRABranch (Jump)

LDA 2
81
NOP
LDRR 3 4
  • BSRBranch to subroutine

59
AJS -2
63
BRA 3
75
LDC 91
43
81
STR R3
RET
BSR -4
43
LDR R3
15
Instructies Register
  • LDRRLoad reg. to reg.

LDC 17
12
LDR R4
17
  • AJSAdjust stackpointer

LDL 2
43
LDS -3
75
LDLA 1
  • BRABranch (Jump)

LDA 2
81
NOP
LDRR 3 4
  • BSRBranch to subroutine

59
AJS -2
63
BRA 3
75
LDC 91
43
81
STR R3
RET
BSR -4
43
LDR R3
16
Instructies Register
  • LDRRLoad reg. to reg.

LDC 17
12
LDR R4
17
  • AJSAdjust stackpointer

LDL 2
43
LDS -3
75
LDLA 1
  • BRABranch (Jump)

LDA 2
91
NOP
LDRR 3 4
  • BSRBranch to subroutine

59
AJS -2
63
BRA 3
75
LDC 91
43
81
STR R3
RET
BSR -4
43
LDR R3
17
Instructies Register
  • LDRRLoad reg. to reg.

LDC 17
12
LDR R4
17
  • AJSAdjust stackpointer

LDL 2
43
LDS -3
75
LDLA 1
  • BRABranch (Jump)

LDA 2
91
NOP
LDRR 3 4
  • BSRBranch to subroutine

59
AJS -2
63
BRA 3
75
LDC 91
  • RETReturn from subroutine

91
81
STR R3
RET
BSR -4
43
LDR R3
18
Instructies Register
  • LDRRLoad reg. to reg.

LDC 17
12
LDR R4
17
  • AJSAdjust stackpointer

LDL 2
43
LDS -3
75
LDLA 1
  • BRABranch (Jump)

LDA 2
91
NOP
LDRR 3 4
  • BSRBranch to subroutine

59
AJS -2
63
BRA 3
75
LDC 91
  • RETReturn from subroutine

91
81
STR R3
RET
BSR -4
43
LDR R3
19
Instructies Register
  • LDRRLoad reg. to reg.

LDC 17
12
LDR R4
17
  • AJSAdjust stackpointer

LDL 2
43
LDS -3
75
LDLA 1
91
  • BRABranch (Jump)

LDA 2
91
NOP
LDRR 3 4
  • BSRBranch to subroutine

59
AJS -2
63
BRA 3
75
LDC 91
  • RETReturn from subroutine

91
81
STR R3
RET
BSR -4
43
LDR R3
20
Instructies Arithmetic
Haal twee waarden van de stack, en
vervang ze door het resultaat van
één of
  • ADD
  • SUB
  • MUL
  • DIV
  • MOD
  • AND
  • OR
  • XOR
  • EQ
  • NE
  • LT
  • GT
  • LE
  • GE
  • NOT
  • NEG

21
Instructies Branch
  • BRA Onvoorwaardelijke sprong
  • BSR Zet eerst returnadres op stack
  • BRT Voorwaardelijke sprong alleen als er True
    op stack staat
  • BRF Voorwaardelijke sprong False

22
Codegeneratie voor Expressies
23
Codegenereer-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)
24
Codegenereer-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)
25
Codegenereer-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)
26
Methodes met parameters
  • Method-aanroep

m(7, 12)
  • Method-definitie

void m(int x, int y) p(x37) q(xy)
27
Methodes met parameters
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

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
28
Methodes met parameters
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
7
  • Method-definitie

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
29
Methodes met parameters
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
44
  • Method-definitie

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
30
Methodes met parameters
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
44
  • Method-definitie

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
31
Methodes met parameters
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
96
  • Method-definitie

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
32
Methodes met parameters
  • Method-aanroep

LDC 7
m(7, 12)
LDC 12
12
BSR m
96
  • Method-definitie

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
33
Methodes met parameters
  • Method-aanroep

LDC 7
m(7, 12)
LDC 12
12
BSR m
96
  • Method-definitie

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
34
Methodes met parameters
  • Method-aanroep

LDC 7
m(7, 12)
LDC 12
12
BSR m
96
  • Method-definitie

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
35
Methodes 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
36
Methode met lokale variabelen
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

m
LDR MP
void m(int x, int y) int a, b a -x

37
Methode met lokale variabelen
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

m
LDR MP
void m(int x, int y) int a, b a -x

MPSP
38
Methode met lokale variabelen
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

m
LDR MP
void m(int x, int y) int a, b a -x

MPSP
AJS 2
39
Methode met lokale variabelen
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

m
LDR MP
void m(int x, int y) int a, b a -x

MPSP
AJS 2
40
Methode met lokale variabelen
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

m
LDR MP
void m(int x, int y) int a, b a -x

MPSP
-7
AJS 2
STL 1
41
Methode met lokale variabelen
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

-7
m
LDR MP
void m(int x, int y) int a, b a -x

MPSP
-7
AJS 2
STL 1
SPMP
42
Methode met lokale variabelen
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

-7
m
LDR MP
void m(int x, int y) int a, b a -x

MPSP
-7
AJS 2
STL 1
SPMP
STR MP
43
Methode met lokale variabelen
  • Method-aanroep

LDC 7
7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

-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
44
Methode met lokale variabelen
  • Method-aanroep

LDC 7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

-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
45
Methode met lokale variabelen
  • Method-aanroep

LDC 7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

-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
46
Methode met lokale variabelen
  • Method-aanroep

LDC 7
m(7, 12)
LDC 12
12
BSR m
  • Method-definitie

-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
47
Methode 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
48
Methoden met een resultaat
  • Laat het resultaat achter op de stack(nog meer
    gepruts bij het opruimen)
  • Laat het resultaat achter in R3

òf
Write a Comment
User Comments (0)
About PowerShow.com