$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
,O/LYHOOR0LFURDUFKLWHWWXUDLL
$FXUDGL
/XFD%UHYHJOLHUL*LXVHSSH3R]]L
DEI PoliMI 0LODQR
OXFDEUHYHJOLHULJLXVHSSHSR]]L#SROLPLLW
YHUVLRQHGHOO¶DSULOH
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$SSURFFLRDOLYHOOLVWUXWWXUDWL
/LYHOOR 0LFURDUFKLWHWWXUD /LYHOOR /RJLFDGLJLWDOH /LYHOOR ,QVWUXFWLRQ6HW /LYHOOR 6LVWHPDRSHUDWLYR /LYHOOR /LQJXDJJLRDVVHPEODWRUH /LYHOOR /LQJXDJJLDSSOLFDWLYL
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UJRPHQWL
3URJUDPPD]LRQHGLUHWHHGLVLVWHPD
/LQJXDJJLDVVHPEODWRUL
6LVWHPDRSHUDWLYR
,QVWUXFWLRQVHWOLQJXDJJLRPDFFKLQD
0LFURDUFKLWHWWXUD,6$
/LYHOORORJLFRGLJLWDOH
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
2VVHUYD]LRQL
,OLQJXDJJLDVVHPEODWRULXWLOL]]DQRXQ
LQVLHPHGLLVWUX]LRQLLQVWUXFWLRQVHW IRUWHPHQWHGLSHQGHQWHGDOWLSRGL
PLFURDUFKLWHWWXUDDGRWWDWR
,OLQJXDJJLDVVHPEODWRULYHGRQR
GLUHWWDPHQWHLUHJLVWULGHOSURFHVVRUHHG
LOPRGHOORGLPHPRULD
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
/DSLODGHOSURFHVVRUH IJVM
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&RV¶qODSLOD I
/DSLODVWDFNqXQDVWUXWWXUDGDWLGL
PHPRULD
/DSLODqIRUPDWDGDXQDVXFFHVVLRQHGL
SDUROHGLPHPRULDFRQWLJXH
/DSLODKDXQIRQGRVWDFNEDVH
/DSLODKDXQDFLPDVWDFNWRS
,Q IJVM VLSXzSHQVDUHFKHRJQL
HOHPHQWRSDURODFRQWHQXWRQHOODSLOD
VLDXQQXPHURLQWHUR
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&RV¶qODSLOD II
/DILJXUDDODWR
PRVWUDXQDSLODGL 4 SDUROHHOHPHQWL
/DFLPDFRQWLHQHLO
QXPHUR 7
,OIRQGRFRQWLHQHLO
QXPHUR 3
/DSLODVWDQHOOD
PHPRULDFHQWUDOH
Memoria centrale
7 (cima)
−2 4
2° elem.
3 (fondo)
3° elem.
pila
1° elem.
4° elem.
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&RV¶qODSLOD III
6LXVDODSLODWUDPLWH
GXHUHJLVWUL
SXQWDWRUL
• SP 6WDFN3RLQWHU
SXQWDDOODFLPDGHOOD
SLOD
• SB 6WDFN%DVH
SXQWDDOIRQGRGHOOD
SLOD
Memoria centrale
7 (cima)
−2 4 3 (fondo)
pila
SP
SB puntatore alla cima della pila (Stack Pointer)
puntatore al fondo della pila
(Stack Base)
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
3LLQSURIRQGLWj
,OUHJLVWUR SP 6WDFN3RLQWHUFRQWLHQH
O¶LQGLUL]]RGLPHPRULDGHOODFLPDGHOOD
SLODFKHqLOSULPRHOHPHQWRGHOODSLOD
,OUHJLVWUR SB 6WDFN%DVHFRQWLHQH
O¶LQGLUL]]RGLPHPRULDGHOIRQGRGHOOD
SLODFKHqO¶XOWLPRHOHPHQWRGHOODSLOD
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&RPHIXQ]LRQDODSLOD
$OODSLODVLSRVVRQR
± DJJLXQJHUHHOHPHQWLVXOODFLPD
± WRJOLHUHHOHPHQWLGDOODFLPDVHODSLODQRQ
qJLjFRPSOHWDPHQWHYXRWD
$JJLXQJHUHXQHOHPHQWRLQFLPD PUSH
7RJOLHUHXQHOHPHQWRGDOODFLPD POP
1DWXUDOPHQWHVLGHYHDQFKHSRWHUH
VDSHUHVHODSLODqYXRWDRSSXUHVH
FRQWLHQHHOHPHQWL
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
/¶RSHUD]LRQH386+
6LVXSSRQJDGLYROHUHFRSLDUHLQSLODLO
FRQWHQXWRGHOUHJLVWUR R
– PUSH R
6LLQFUHPHQWDGL 1 LOUHJLVWURSXQWDWRUH
SP 6WDFN3RLQWHU
6LVFULYHLOYDORUHGL R QHOODFHOODGL
PHPRULDGLFLPDGHOODSLODFKHqOD
FHOODGLPHPRULDSXQWDWDGD SP
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLR PUSH R
Memoria centrale
7 (cima)
−2 4 3 (fondo)
pila
SP
SB puntatore alla cima della pila (Stack Pointer)
puntatore al fondo della pila
(Stack Base) 5 Registro R
Memoria centrale
7
−2 4 3 (fondo)
pila
5 (cima) SP + 1
SB puntatore alla cima della pila (Stack Pointer)
puntatore al fondo della pila
(Stack Base) 5 Registro R
Animazione Fine
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
/¶RSHUD]LRQH POP
6LVXSSRQJDGLYROHUHWRJOLHUHLOSULPR
HOHPHQWRGHOODSLODVSRVWDQGRORQHO
UHJLVWUR R
– POP R
6LFRSLDLOSULPRHOHPHQWRGHOODSLODFKH
VLWURYDQHOODFHOODGLPHPRULDSXQWDWD
GDOUHJLVWUR SP QHOUHJLVWUR R
6LGHFUHPHQWDGLXQRLOUHJLVWUR
SXQWDWRUH SP 6WDFN3RLQWHU
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLR POP R
Memoria centrale
−2 (cima) 4 3 (fondo)
pila
SP − 1
SB puntatore alla cima della pila (Stack Pointer)
puntatore al fondo della pila
(Stack Base) 7 Registro R Memoria
centrale
7 (cima)
−2 4 3 (fondo)
pila
SP
SB puntatore alla cima della pila (Stack Pointer)
puntatore al fondo della pila
(Stack Base) 5 Registro R
Animazione Fine
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
5LDVVXPHQGR
,QGLFDQGRFRQ M(SP) ODFHOODGL
PHPRULDFRUUHQWHPHQWHSXQWDWDGDO
UHJLVWUR SP, si ha:
± 2SHUD]LRQH PUSH R
• SP + 1 → SP // incrementa SP di uno
• R → M(SP) // copia R in M(SP)
± 2SHUD]LRQH POP R
• M(SP) → R // copia M(SP) in R
• SP − 1 → SP // decrementa SP di uno
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$OFXQLGHWWDJOL I
6XOODSLODVLSXzLPSLODUH PUSH DQFKH
XQDFRVWDQWH
– PUSH 5 LPSLODODFRVWDQWH 5
1RQVLSXzLQYHFHVSLODUH POP XQD
FRVWDQWHQRQDYUHEEHVHQVR
– POP 5 qLQVHQVDWR
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$OFXQLGHWWDJOL II
3ULPDGLLQL]LDUHDXVDUHODSLODRFFRUUH
ILVVDUHLOIRQGRGHOODSLODLQL]LDOL]]DQGRLO
UHJLVWUR SB 6WDFN%DVH
6HVLYHULILFDODFRQGL]LRQH
SP = SB - 1
ODSLODqYXRWD
$SLODYXRWDqYLHWDWRVSLODUH POP
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$OFXQLGHWWDJOL III
/DSLODPRVWUDWDLQSUHFHGHQ]DFUHVFH
YHUVRO¶DOWR
6LSXz³ULEDOWDUH´ODSLODIDFHQGROD
FUHVFHUHYHUVRLOEDVVR
Operazione: PUSH R SP − 1 → SP R → M(SP)
Operazione: POP R M(SP) → R SP + 1 → SP
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
/DSLODGL IJVM
,OLQJXDJJLGLSURJUDPPD]LRQHFRPHLO
C -DYDHDOWULDQFRUDSHUPHWWRQR
± GLDYHUHSURFHGXUHHIXQ]LRQLGRWDWHGL
YDULDELOLORFDOL
± GLDYHUHSURFHGXUHHIXQ]LRQLULFRUVLYH
/DSLODVHUYHSHUJHVWLUHO¶XVRFRUUHWWR
GHOOHYDULDELOLORFDOLHLOIXQ]LRQDPHQWR
GHOODULFRUVLRQH
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
8QFDVRVHPSOLFH I
6LSRWUHEEHVXSSRUUHGLDVVHJQDUHD
RJQLSURFHGXUDRIXQ]LRQHXQ¶DUHD
GLYHUVDGLPHPRULDFHQWUDOHLQFXLOD
SURFHGXUDWLHQHOHSURSULHYDULDELOLORFDOL
3UREOHPDVHODSURFHGXUDqULFRUVLYDOD
VHFRQGDFKLDPDWDGHOODSURFHGXUD
RSHUHUHEEHVXOODVWHVVHYDULDELOLORFDOL
GHOODSULPDFKHqXQHUURUH
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
8QFDVRVHPSOLFH II
/ ∗ proc. ricorsiva ∗ / void proc (int b) {
int a;
a = b + 1;
if (b < 10) proc (a);
printf (“%d”, a);
} / ∗ proc. ∗ /
Memoria
centrale
area diattivazione della procedura
a altre possibili
var. loc. di proc.
cella della var. loc. a
Animazione Fine
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
9DULDELOLORFDOL
ÊGXQTXHLPSRVVLELOHDOORFDUHOHYDULDELOL
ORFDOLGLSURFHGXUHHIXQ]LRQLLQFHOOHGL
PHPRULDGLLQGLUL]]RDVVROXWRFLRqGL
LQGLUL]]RILVVDWRGXUDQWHOD
FRPSLOD]LRQH
2FFRUUHXWLOL]]DUHXQDVWUDWHJLDGLYHUVD
ODSLODGLPHPRULDRVWDFN
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
9DULDELOLORFDOLLQSLOD
2JQLSURFHGXUDRIXQ]LRQHSRVVLHGHOH
SURSULHYDULDELOLORFDOL
/HYDULDELOLORFDOLGHOODSURFHGXUD
YHQJRQRDOORFDWHLQVXFFHVVLRQHLQ
XQ¶DUHDGLPHPRULDFKLDPDWD³DUHDGL
DWWLYD]LRQH´RIUDPHGHOODSURFHGXUD
/HDUHHGLDWWLYD]LRQHGHOOHSURFHGXUH
YHQJRQRLPSLODWHRSHUD]LRQH PUSH RSSXUHVSLODWHRSHUD]LRQH POP
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
6WUXWWXUDGHOO¶DUHDGLDWWLYD]LRQH
/¶DUHDFRQWLHQHOH
YDUORFGHOODSURF
a1 a2 H a3
,OUHJLVWUR SP SXQWD
DOODFLPDGHOO¶DUHD
ODYDU a3
,OUHJLVWR LV SXQWD
DOIRQGRGHOO¶DUHDOD
YDU a1
Memoria centrale
a3 a2 a1
area
SP
LV puntatore alla cima dell’area
puntatore al fondo dell’area
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLRGLDUHDGLDWWLYD]LRQH
/HYDUORF
RFFXSDQR
FLDVFXQD 4 E\WH
*OLLQGLUL]]LGL
PHPRULDVL
ULIHULVFRQRDL
E\WH
Memoria centrale
a3 a2 a1
area
108
100 puntatore alla cima dell’area
puntatore al fondo dell’area 108
104 100
indirizzi
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
6SLD]]DPHQWRQHOO¶DUHD GLDWWLYD]LRQH
2JQLYDULDELOHORFDOHKDXQR
VSLD]]DPHQWRRIIVHWDOO¶LQWHUQR
GHOO¶DUHDGLDWWLYD]LRQH
/RVSLD]]DPHQWRqFDOFRODWRFRPH
GLVWDQ]DLQE\WHDSDUWLUHGDOIRQGR
GHOO¶DUHDGLDWWLYD]LRQH
/DYDULDELOHORFDOHDOIRQGRGHOO¶DUHDGL
DWWLYD]LRQHKDVSLD]]DPHQWR 0
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLRGLVSLD]]DPHQWR
/DYDUORF a1 KD
VSLD]]DPHQWR 0
/DYDUORF a2 KD
VSLD]]DPHQWR 4
/DYDUORF a3 KD
VSLD]]DPHQWR 8
Memoria centrale
a3 a2 a1
area
108
100 puntatore alla cima dell’area
puntatore al fondo dell’area 108
104 100
indirizzi
2 1 0
indice della variabile
3HUFRPRGLWjOHYDULDELOLVLSRVVRQRLQGLFDUHWUDPLWHXQ
LQGLFHORJLFRQXPYDUSDUWHQGRGD]HURqVRORXQ
QXPHURSURJUHVVLYRXWLOHSHULQGLFDUHODYDULDELOH
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
,PSLODPHQWRGHOOHDUHH I
/DSURFHGXUD A KDXQ¶DUHDGL
DWWLYD]LRQHFRQWHQHQWH 3 YDULDELOLORFDOL
a1 a2 H a3
/DSURFHGXUD B KDXQ¶DUHDGL
DWWLYD]LRQHFRQWHQHQWH 4 YDULDELOLORFDOL
b1 b2 b3 H b4
/DSURFHGXUD A DXQFHUWRSXQWRGHOOD
VXDHVHFX]LRQHFKLDPDODSURFHGXUD B
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
,PSLODPHQWRGHOOHDUHH II
6XELWRGRSR
O¶HQWUDWDLQ
HVHFX]LRQHGL A OD
SLODFRQWLHQHO¶DUHD
GLDWWLYD]LRQHGL A
,OUHJLVWUR LV SXQWDDOIRQGR
GHOO¶DUHDGL
DWWLYD]LRQHGL A
Memoria centrale
a3 a2 a1 area di A
SP
LV puntatore alla cima dell’area
puntatore al fondo dell’area pila
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
,PSLODPHQWRGHOOHDUHH III
4XDQGR B YLHQH
FKLDPDWDGD A
VRSUDO¶DUHDGL
A VLLPSLOD
O¶DUHDGL B
,OUHJLVWUR LV SXQWDDOIRQGR
GHOO¶DUHDGL B
Memoria centrale
a3 a2 area di A a1
SP
LV puntatore alla cima dell’area
puntatore al fondo dell’area b3
b2 b1 b4
area di B
pila
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
,PSLODPHQWRGHOOHDUHH IV
4XDQGRVLLPSLODO¶DUHDGLDWWLYD]LRQH
GHOODSURFHGXUD B LOUHJLVWUR LV YLHQH
LQFUHPHQWDWRLQPRGRGDIDUORSXQWDUH
DOIRQGRGHOO¶DUHDGLDWWLYD]LRQHGL B H
QRQSLGL A
,QRJQLLVWDQWHOHYDUORFGHOO¶DUHDGL
DWWLYD]LRQHFRUULVSRQGHQWHDOOD
SURFHGXUDFRUUHQWHPHQWHLQHVHFX]LRQH
VRQRLQGLFDWHGDLULVSHWWLYLVSLD]]DPHQWL
ULVSHWWRDOUHJLVWUR LV
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&KLDPDWHPXOWLSOH I
6LFRQVLGHULODVHJXHQWHVHTXHQ]DGL
FKLDPDWHDSURFHGXUD
± /DSURFHGXUD A HQWUDLQHVHFX]LRQHFDVRD – A FKLDPDODSURFHGXUD B FDVR b
– B FKLDPDODSURFHGXUD C FDVR c
– C WHUPLQDHDQFKH B WHUPLQDH A FKLDPDOD
SURFHGXUD D FDVR d
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
a3 a2 a1 SP
LV
area di A
(a)
(QWUDLQHVHFX]LRQHODSURFHGXUD A
a3 a2 a1 SP
LV
area di A SP
LV
area di B
b3 b2 b1 b4
a3 a2 a1
(a) (b)
(QWUDLQHVHFX]LRQHODSURFHGXUD B
a3 a2 a1 SP
LV
area di A SP
LV
area di B
b3 b2 b1 b4
a3 a2 a1
SP LV
area di C
b3 b2 b1 b4
a3 a2 a1 c1 c2
(a) (b) (c)
(QWUDLQHVHFX]LRQHODSURFHGXUD C
a3 a2 a1 SP
LV
area di A SP
LV
area di B
b3 b2 b1 b4
a3 a2 a1
SP LV
area di C
b3 b2 b1 b4
a3 a2 a1 c1 c2
a3 a2 a1 SP
LV
area di D
d3
d1 d4
d2 d5
(a) (b) (c) (d)
C H B WHUPLQDQRHGHQWUDLQHVHFX]LRQH D
&KLDPDWHPXOWLSOH II
Animazione Fine
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHHGLDWWLYD]LRQH HSURFHGXUHULFRUVLYH
,OPHFFDQLVPRGHOOHDUHHGLDWWLYD]LRQH
qDQFKHLQJUDGRGLWHQHUHVHSDUDWHOH
YDULDELOLORFDOLGLFKLDPDWHULFRUVLYHGHOOD
VWHVVDSURFHGXUD
$RJQLFKLDPDWDULFRUVLYDVLLPSLODXQD
QXRYDDUHDGLDWWLYD]LRQHLGHQWLFDFRPH
VWUXWWXUDDTXHOODSUHFHGHQWH
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
a3 a2 a1 SP
LV
area di A
(a)
/DSURFHGXUD A HQWUDLQHVHFX]LRQHOD 1
aYROWD
a3 a2 a1 SP
LV
area di A SP
LV
area di A a3 a2 a1 a3 a2 a1
(a) (b)
A FKLDPDULFRUVLYDPHQWHVpVWHVVD 2
aYROWD
a3 a2 a1 SP
LV
area di A SP
LV
area di A a3 a2 a1 a3 a2 a1
SP
LV
area di A
a3 a2 a1 a3 a2 a1 a2 a3
(a) (b) (c)
a1
A FKLDPDULFRUVLYDPHQWHVpVWHVVD 3
aYROWD
,PSLODPHQWRGLDUHHULFRUVLYH
/DSURFHGXUD A ULFKLDPDVHVWHVVD 3 YROWH
Animazione Fine
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&DOFRORGHOOHHVSUHVVLRQL
/DSLODKDDQFKHXQUXRORIRQGDPHQWDOH
QHOFDOFRORGHOOHHVSUHVVLRQLORJLFR
PDWHPDWLFKHFRQWHQHQWLFLRq
RSHUD]LRQLORJLFKHRSSXUHDULWPHWLFR
DOJHEULFKH
,OFDOFRORGLXQ¶HVSUHVVLRQHSXzHVVHUH
VHPSUHULFRQGRWWRDXQDVXFFHVVLRQHGL
RSHUD]LRQL PUSH H POP LQWHUFDODWHGD
RSHUD]LRQLORJLFKHRPDWHPDWLFKH
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLR
&DOFRODUH 7 + (1 + 2) × (5 − 2FFRUUHSULPDULVFULYHUHO¶HVSUHVVLRQH
LQIRUPDSRVWILVVDSRVWIL[
$OJRULWPRSRVWIL[VLSDUWHGDJOLRSHUDWRULGL
1 o OLYHOORJOLXOWLPLGDFDOFRODUHH
– (1) VLVSRVWDO¶RSHUDWRUHDGHVWUDGHO 2
oRSHUDQGR – (2) VLFDQFHOODQROHHYHQWXDOLSDUHQWHVL
– (3) VLSDVVDDJOLRSHUDWRULGLOLYHOOR
LPPHGLDWDPHQWHVXSHULRUHWRUQDQGRD (1)
4XDQGRQRQFLVRQRSL RSHUDWRULWHUPLQD
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$QDOLVLGHOO¶HVSUHVVLRQH
7 + (1 + 2) × (5 −
2 o livello 1 o livello
3 o livello 3 o livello
7 + (1 + 2) × (5 −
2
o1
o1
o2
o1
o2
o1
o2
oGLVWULEX]LRQH
GHJOLRSHUDQGL
RSHUDWRUH + RSHUDWRUH × RSHUDWRUL+ e −
Animazione Fine
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
7UDVIRUPD]LRQHSRVWIL[
7 + (1 + 2) × (5 − 3) (635(66,21(25,*
7 + (1 + 2) × (5 − 3) - partenza
7 (1 + 2) × (5 − 3) + - VSRVWDWRO¶RSHUDWRUH + 7 (1 + 2) (5 − 3) × + - VSRVWDWRO¶RSHUDWRUH × 7 1 + 2 5 − 3 × + - FDQFHOODWHOHSDUHQWHVL
GHJOLRSHUDQGL GHOO¶RSHUDWRUH ×
7 1 2 + 5 3 − × + - VSRVWDWLJOLRSHUDWRUL + H − ; ILQH
7 1 2 + 5 3 − × + )250$3267),;
Animazione Fine
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
INIZIO: la pila è vuota … PUSH 7 7
7 … PUSH 1 1
7
7 1 … PUSH 2 2
1 7
7 1 2 … POP; POP; PUSH 1 + 2 3
7
7 1 2 + … PUSH 5 5
3 7
7 1 2 + 5 … PUSH 3 3
5 3 7
7 1 2 + 5 3 … POP; POP; PUSH 5 − 3 2
3 7
7 1 2 + 5 3 − … POP; POP; PUSH 3 × 2 6
7
7 1 2 + 5 3 − × … POP; POP; PUSH 7 + 6 13
7 1 2 + 5 3 − × + … POP
7 1 2 + 5 3 − × + FINE: pila vuota, risultato 13
&DOFRORWUDPLWHODSLOD
7 1 2 + 5 3 − × +
Animazione
6LPXOD]LRQHGHOSURFHGLPHQWRGLFDOFROR
Fine
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
6HTXHQ]DGLRSHUD]LRQL386+323
• PUSH 7
• PUSH 1
• PUSH 2
• POP R1
• POP R2
• R3 = R2 + R1
• PUSH R3
• PUSH 5
• PUSH 3
• POP R1
• POP R2
• R3 = R2 − R1
• PUSH R3
• POP R1
• POP R2
• R3 = R2 × R1
• PUSH R3
• POP R1
• POP R2
• R3 = R2 + R1
• PUSH R3
6LXVDQRLUHJLVWULWHPSRUDQHL R1 R2 H R3
,QSLODUHVWDXQVRORHOHPHQWRLOULVXOWDWR
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
7UDVIRUPD]LRQH
6LLQWURGXFDQROHLVWUX]LRQLVHJXHQWL
– IADD WRJOLLGXHQXPHULLQFLPDDOODSLOD
DGGL]LRQDOLHVFULYLODVRPPDLQFLPDDOODSLOD – ISUB WRJOLLGXHQXPHULLQFLPDDOODSLOD
VRWWUDLOLVLVXSSRQJDFKHLOSULPRQXPHURWROWR
VLDLOVRWWUDHQGRLOVHFRQGRLOPLQXHQGRH
VFULYLODGLIIHUHQ]DLQFLPDDOODSLOD
– IMUL WRJOLLGXHQXPHULLQFLPDDOODSLOD
PROWLSOLFDOLHVFULYLLOSURGRWWRLQFLPDDOODSLOD
6RQRLVWUX]LRQLGHOSURFHVVRUH IJVM (tranne IMUL, ma che si potrebbe introdurre)
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
,OSURJUDPPDGLFDOFROR LQOLQJXDJJLRPDFFKLQD IJVM
• PUSH 7 // scrivi 7 sulla cima della pila
• PUSH 1 // scrivi 1 sulla cima della pila
• PUSH 2 // scrivi 2 sulla cima della pila
• IADD // addiziona i 2 numeri in cima alla pila
• PUSH 5 // scrivi 5 sulla cima della pila
• PUSH 3 // scrivi 3 sulla cima della pila
• ISUB // sottrai i 2 numeri in cima alla pila
• IMUL // moltiplica i 2 numeri in cima alla pila
• IADD // addiziona i 2 numeri in cima alla pila
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
INIZIO: la pila è vuota PUSH 7 7
PUSH 1 1 7 PUSH 2
2 1 7 IADD
3 7 PUSH 5
5 3 7 PUSH 3
3 5 3 7 ISUB
2 3 7 IMUL
6 7 IADD
13
FINE: nella pila resta il risultato del calcolo
6LPXOD]LRQHGHOSURJUDPPD
7 1 2 + 5 3 − × +
Animazione
6LPXOD]LRQHGHOO¶HVHFX]LRQHGHOSURJUDPPD
IJVM SHULOFDOFRORGHOO¶HVSUHVVLRQH
Fine
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&RQVLGHUD]LRQL
,OFDOFRORGHOOHHVSUHVVLRQLWUDPLWHOD
SLODVLJHQHUDOL]]DIDFLOPHQWHDQFKHD
± HVSUHVVLRQLFRQWHQHQWLYDULDELOL
± HVSUHVVLRQLFRQWHQHQWLRSHUDWRULERROHDQL
± HVSUHVVLRQLFRQWHQHQWLRSHUDWRULUHOD]LRQDOL
± HVSUHVVLRQLFRQWHQHQWLRSHUDWRULDOJHEULFL
± HVSUHVVLRQLFRQQXPHULUHDOLFRPSOHVVL«
,OFRPSLODWRUHDQDOL]]DO¶HVSUHVVLRQHQH
FDOFRODODIRUPDSRVWIL[HJHQHUDLO
SURJUDPPDGLFDOFRORGHOO¶HVSUHVVLRQH
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD $SULO ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD