$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
,O/LYHOOR0LFURDUFKLWHWWXUDLLL
$FXUDGL
/XFD%UHYHJOLHUL*LXVHSSH3R]]L
DEIPoliMI0LODQR
OXFDEUHYHJOLHULJLXVHSSHSR]]L#SROLPLLW
YHUVLRQHGHOO¶DSULOH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
,OPRGHOORGLPHPRULDHL
VRWWRSURJUDPPLGHO
SURFHVVRUHIJVM
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
6WUXWWXUD]LRQHGHOODPHPRULD
/DPHPRULDFHQWUDOHqVWUXWWXUDWDRYYHUR
qVXGGLYLVDLQDUHHQRQQHFHVVDULDPHQWH
FRQWLJXHDYHQWLXVLGLYHUVL
8Q¶DUHDSXzFRQWHQHUHDVHFRQGDGHOO¶XVR
DVVHJQDWROHFRGLFHHVHJXLELOHFRVWDQWL
FLRqGDWLILVVLGDWLFLRqYDULDELOL
ULIHULPHQWLDGDOWUHDUHHFLRqSXQWDWRULR
DOWULWLSLGLLQIRUPD]LRQLDQFRUD
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
/DPHPRULDFHQWUDOHGLIJVM
,OSURFHVVRUHIJVM GLVSRQHGLXQR
VSD]LRGLPHPRULDFHQWUDOHGL4 *E\WH
FLRq4 G × 8 ELWSDUROHGD8 ELW
Ê DQFKHSRVVLELOHYHGHUHODPHPRULD
FRPHXQYHWWRUHGL1 G × 32 ELWRYYHUR
VWUXWWXUDWDFRQSDUROHGDELW
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
0HPRULDHLVWUX]LRQL
/HLVWUX]LRQLPDFFKLQDGHOSURFHVVRUH
IJVM QRQYHGRQRGLUHWWDPHQWHJOL
LQGLUL]]LGHOODPHPRULDFHQWUDOH
(VVHRSHUDQRLPSOLFLWDPHQWHVXOOD
PHPRULDXWLOL]]DQGRGHJOLDSSRVLWL
UHJLVWULFRPHSXQWDWRULPCSPLV
CPP HUHJLVWULDOWULDQFRUD
3HUHVHPSLROHRSHUD]LRQLORJLFR
PDWHPDWLFKHYHQJRQRFDOFRODWHWUDPLWH
ODSLODGHOOHHVSUHVVLRQLUHJLVWURSP
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
0RGHOORGLPHPRULDGLIJVM
/DPHPRULDFHQWUDOHGHOSURFHVVRUH
IJVM qVXGGLYLVDLQ4 DUHHSULQFLSDOL
QRQQHFHVVDULDPHQWHWXWWHFRQWLJXH
± DUHDGHOOHFRVWDQWL&RQVWDQW3RRO$UHD
± SLODGHOOHDUHHGLDWWLYD]LRQH)UDPH6WDFN
$UHD
± SLODSHULOFDOFRORGHOOHHVSUHVVLRQL
2SHUDQG6WDFN$UHD
± DUHDGHOFRGLFHHVHJXLELOH([HFXWDEOH
&RGH$UHD
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
0RGHOORGLPHPRULDGLIJVM
AREA DELLE COSTANTI
AREA DI ATTIVAZIONE
DELLA PROCEDURA
NUMERO 1 AREA DI ATTIVAZIONE
DELLA PROCEDURA
NUMERO 2 AREA DI ATTIVAZIONE
DELLA PROCEDURA
NUMERO 3 PILA PER IL CALCOLO DELLE ESPRESSIONI
(PROC. 3)
CODICE ESEGUIBILE
DEL PROGRAMMA
PRINCIPALE E DELLE PROCEDURE
E FUNZIONI CPP
PC LV
Stack Pointer: SP puntatore alla cima della pila
Limit Value: puntatore alla base dell’area di attivazione della procedura correntemente
in esecuzione
Program Counter: puntatore alla prossima istruzione da mettere in esecuzione, quando
l’istruzione correntemente in esecuzione sarà terminata
Constant Pool Pointer:
puntatore alla base dell'area delle costanti
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHDGHOOHFRVWDQWL
$UHDGHOOHFRVWDQWLFRQWLHQHFRVWDQWL
QXPHULFKHHGLDOWURWLSRVWULQJKHILVVH
GLFDUDWWHULHSXQWDWRULDGDOWUHDUHHGL
PHPRULD
/¶DUHDYLHQHLQL]LDOL]]DWDTXDQGRLO
SURJUDPPDYLHQHFDULFDWRLQPHPRULD
,OSURJUDPPDQRQSXzPRGLILFDUHLO
FRQWHQXWRGHOO¶DUHD
,OSURJUDPPDDFFHGHDOO¶DUHDWUDPLWHLO
UHJLVWURSXQWDWRUHCPP
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHDGLDWWLYD]LRQH
$UHD GLDWWLYD]LRQHGHOSURJUDPPD
SULQFLSDOHGHOODSURFHGXUDHGHOOD
IXQ]LRQHFRQWLHQHDOFXQLSXQWDWRULGL
VHUYL]LRYHGHUHOH]LRQLVXFFHVVLYHXVDWL
QHOODJHVWLRQHGHOPHFFDQLVPRGL
FKLDPDWDULWRUQRGLVRWWRSURJUDPPD
FRQWLHQHLSDUDPHWULSDVVDWLDOODSURFHGXUD
RDOODIXQ]LRQHDOO¶DWWRGHOODVXD
FKLDPDWDHFRQWLHQHORVSD]LRULVHUYDWRSHU
OHYDULDELOLORFDOLGHOODSURFHGXUD
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHDGLDWWLYD]LRQH
/¶DUHDGLDWWLYD]LRQHYLHQHDOORFDWDVXOOD
FLPDGHOODSLODTXDQGRODSURFHGXUD
DVVRFLDWDHQWUDLQHVHFX]LRQH
/DSURFHGXUDFRUUHQWHPHQWHLQHVHFX]LRQH
XVDOHYDULDELOLORFDOLHLSDUDPHWUL
FRQWHQXWLQHOODSURSULDDUHDGLDWWLYD]LRQH
4XDQGRODSURFHGXUDFRUUHQWHPHQWHLQ
HVHFX]LRQHWHUPLQDO¶DUHDGLDWWLYD]LRQHLQ
FLPDDOODSLODYLHQHHOLPLQDWD
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHDGLDWWLYD]LRQH
6RSUDO¶DUHDGLDWWLYD]LRQHGHOSURJUDPPD
SULQFLSDOHSURFHGXUDRIXQ]LRQH
FRUUHQWHPHQWHLQHVHFX]LRQHVLQRWLFKH
VRSUDTXHVW¶DUHDGLDWWLYD]LRQHF¶qVHPSUH
VSD]LROLEHURSHUIDUHFUHVFHUH
XOWHULRUPHQWHODSLODYLHQHFRVWUXLWDOD
SLODSHULOFDOFRORGHOOHHVSUHVVLRQLQHL
PRPHQWLLQFXLLOSURJUDPPDGHYH
FDOFRODUHXQ¶HVSUHVVLRQHORJLFR
PDWHPDWLFD
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHDGLDWWLYD]LRQH
,OUHJLV WURLVFRQWHQXWRQHOSURFHVVRUH
IJVMYLHQHXVDWRSHUSXQWDUHDOODEDVH
GHOO¶DUHDGLDWWLYD]LRQHGHOODSURFHGXUD
FRUUHQWHPHQWHLQHVHFX]LRQH
,OUHJLV WURSPFRQWHQXWRQHOSURFHVVRUH
IJVMSXQWDDOODFLPDGHOODSLODRYYHUR
± DOODFLPDGHOO¶DUHDGLDWWLYD]LRQHFRUUHQWH
± RSSXUHDOODFLPDGHOODSLODGHOOHHVSUHVVLRQL
QHLPRPHQWLLQFXLTXHVWDQRQqYXRWDFLRq
TXDQGRqLQFRUVRLOFDOFRORGLXQ¶HVSUHVVLRQH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
3LODGHOOHHVSUHVVLRQL
/DSLODSHULOFDOFRORGHOOHHVSUHVVLRQL
qXQD]RQDGLVSD]LROLEHURGLGLPHQVLRQL
SUHILVVDWHULVHUYDWDSHUIDUHFUHVFHUHOD
SLODSHULOFDOFRORGHOOHHVSUHVVLRQLORJLFR
PDWHPDWLFKH
4XDQGRLOFRPSLODWRUHJHQHUDOHVHTXHQ]H
GLLVWUX]LRQLFKHFDOFRODQROHHVSUHVVLRQL
XVDQGRODSLODVLDVVLFXUDFKHODSLODQRQ
SRVVDFUHVFHUHLQPRGRHFFHVVLYRULVSHWWR
DOORVSD]LRGLPHPRULDODVFLDWROLEHUR
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHDGHOFRGLFHHVHJXLELOH
&RGLFHHVHJXLELOHGHOSURJUDPPD
SULQFLSDOHHGHOOHSURFHGXUHH
IXQ]LRQLFRQWLHQHLOFRGLFHHVHJXLELOH
GHOSURJUDPPDSULQFLSDOHHGHOOH
HYHQWXDOLSURFHGXUHHRIXQ]LRQLIDFHQWL
SDUWHGHOSURJUDPPDFRPSOHVVLYRGD
HVHJXLUHDOPHQRLOSURJUDPPD
SULQFLSDOHqVHPSUHSUHVHQWHPHQWUH
SURFHGXUHHRIXQ]LRQLVRQRIDFROWDWLYH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHDGHOFRGLFHHVHJXLELOH
/¶DUHDGHOFRGLFHHVHJXLELOHYLHQH
FDULFDWDLQPHPRULDFHQWUDOHTXDQGR
O¶LQWHURSURJUDPPDHQWUDLQHVHFX]LRQH
4XDQGRLOSURJUDPPDSULQFLSDOHHVHJXH
O¶LVWUX]LRQHGLWHUPLQD]LRQHLQOLQHDGL
SULQFLSLRLOFRQWHQXWRGHOO¶DUHDGLFRGLFH
HVHJXLELOHGLYHQWDLQXWLOHHSRWUHEEH
HVVHUHFDQFHOODWR
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHDGHOFRGLFHHVHJXLELOH
,OUHJLV WURPCFRQWHQXWRQHOSURFHVVRUH
IJVMYLHQHXVDWRSHUSXQWDUH
DOO¶LQWHUQRGHOO¶DUHDGLFRGLFHHVHJXLELOH
DOODSURVVLPDLVWUX]LRQHPDFFKLQDGD
PHWWHUHLQHVHFX]LRQHTXDQGR
O¶LVWUX]LRQHPDFFKLQDFRUUHQWHPHQWHLQ
HVHFX]LRQHVDUjWHUPLQDWDH
VXSSRQHQGRFKHO¶LVWUX]LRQHPDFFKLQD
FRUUHQWHQRQVLDXQ¶LVWUX]LRQHGLVDOWR
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
3UHFLVD]LRQLVXLUHJLVWUL
,UHJLV WULCPPLV HSPFRQWHQXWLQHO
SURFHVVRUHIJVMVRQRSXQWDWRULD
SDUROHGD32 ELWQRQDE\WHFLRq
± OHJJHUHDOODORFD]LRQHSXQWDWDSHVGDSP VLJQLILFDOHJJHUHODSDURODGD32 ELWQRQLO
E\WHVLWXDWRLQFLPDDOODSLOD
± OHJJHUHDOODORFD]LRQHSXQWDWDSHVGDLV + 1 VLJQLILFDOHJJHUHODSDURODGD32 ELW
QRQLOE\WHVLWXDWDVXELWRGRSRODSDUROD
GD32 ELWSXQWDWDGLUHWWDPHQWHGDLV
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
3UHFLVD]LRQLVXLUHJLVWUL
,OUHJLV WURPCFRQWHQXWRQHOSURFHVVRUH
IJVMqXQSXQWDWRUHDE\WHQRQDSDUROH
GD32 ELWFLRq
± OHJJHUHDOODORFD]LRQHSXQWDWDGDPCVLJQLILFD
OHJJHUHXQE\WHQRQXQDSDURODGD32 ELW IDFHQWHSDUWHGHOO¶LVWUX]LRQHGDPHWWHUHLQ
HVHFX]LRQH
± OHJJHUHDOODORFD]LRQHSXQWDWDGDPC + 1 VLJQLILFDOHJJHUHLOE\WHQRQODSDURODGD32 ELWVXFFHVVLYRDOO¶XOWLPRE\WHOHWWRIDFHQWH
SDUWHGHOO¶LVWUX]LRQHGDPHWWHUHLQHVHFX]LRQH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
3DUROHGLPHPRULDHUHJLVWUL
AREA DELLE COSTANTI
AREA DI ATTIVAZIONE
DELLA PROCEDURA
NUMERO 1 AREA DI ATTIVAZIONE
DELLA PROCEDURA
NUMERO 2 AREA DI ATTIVAZIONE
DELLA PROCEDURA
NUMERO 3 PILA PER IL CALCOLO
DELLE ESPRESSIONI
(PROC. 3)
CODICE ESEGUIBILE
DEL PROGRAMMA
PRINCIPALE E DELLE PROCEDURE
E FUNZIONI CPP
PC LV
SP
puntatore a parola da 32 bit
32 bit 32 bit 8 bit
puntatore a parola da 32 bit
puntatore a parola da 32 bit
puntatore a byte (parola da 8 bit)
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLRGLDOORFD]LRQHPHPRULD
6LFRQVLGHUDXQDSURJUDPPD-DYDPD
YDUUHEEHDQFKHSHUXQSURJUDPPDC FRVWLWXLWRGD
± SURJUDPPDSULQFLSDOHPDLQ
± IXQ]LRQHAFKLDPDWDGDOSURJSULQFLSDOH
± IXQ]LRQHBFKLDPDWDGDOODIXQ]LRQHA
,OSURJSULQFLSDOHqLQUHDOWjDQFK¶HVVR
XQDIXQ]LRQHFKHYLHQHFKLDPDWDSHU
SULPDGDSDUWHGHOVLVWHPDRSHUDWLYR
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLRGLDOORFD]LRQHPHPRULD
/DIXQ]LRQHA HVHJXHDOFXQH
HODERUD]LRQLSRLFKLDPDODIXQ]LRQHB
/DIXQ]LRQHB HVHJXHLOFDOFRORGL
XQ¶HVSUHVVLRQHSRLWHUPLQD
,OSURJSULQFLSDOHHOHIXQ]LRQLA HB IDQQRXVRGLDOFXQHFRVWDQWL
/DILJXUDLOOXVWUDORVWDWRGHOOHYDULHDUHH
GLPHPRULDGHOODPDFFKLQDIJVM
PHQWUHODIXQ]LRQHB qLQHVHFX]LRQHH
VWDDSSXQWRFDOFRODQGRO¶HVSUHVVLRQH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLRGLDOORFD]LRQHPHPRULD
puntatore
"Ciao!"
17 10
AREA DI ATTIVAZIONE
DEL PROGRAMMA
PRINCIPALE AREA DI ATTIVAZIONE
DELLA PROCEDURA
A AREA DI ATTIVAZIONE
DELLA PROCEDURA
B PILA DELLE ESPRESSIONI:
È IN CORSO IL CALCOLO DI
(1 + 2) × 3
Proc. B
CPP
PC LV
SP
Proc. A
Prog. principale spazio libero
{
area di attivazione della procedura correntemente in esecuzione (B)
}
codice eseguibile della procedura correntemente in esecuzione (B)
} la procedura
correntemente in esecuzione (B) sta
calcolando un'espressione
{
costanti usate da programma principale, procedure e
funzioni
pila delle aree di attivazione e pila delle espressioni area delle
costanti
area del codice eseguibile
prossima istruzione macchina da mettere
in esecuzione
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
2VVHUYD]LRQL
,OUHJLV WURLV /LPLW9DOXHSXQWDDOOD
EDVHGHOO¶DUHDGLDWWLYD]LRQHGHOOD
IXQ]LRQHBFRUUHQWHPHQWHLQHVHFX]LRQH
,OUHJLV WURSP 6WDFN3RLQWHUSXQWDDOOD
FLPDGHOODSLODGHOOHHVSUHVVLRQLFKH
FRQWLHQHGHLYDORULSHUFKpqLQFRUVRGD
SDUWHGLBLOFDOFRORGLXQ¶HVSUHVVLRQH
,OUHJLV WURPC 3URJUDP&RXQWHUSXQWD
QHOO¶DUHDGLFRGLFHHVHJXLELOHGL%DOOH
LVWUX]LRQLFKHFDOFRODQRO¶HVSUHVVLRQH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
6RWWRSURJUDPPL
,OOLQJXDJJLRPDFFKLQDIJVM DPPHWWH
FRPHVRWWRSURJUDPPLVRORIXQ]LRQL
QRQSURFHGXUHVLPLOPHQWHDO
OLQJXDJJLRC
8QDIXQ]LRQHIJVM UHVWLWXLVFHVHPSUH
XQQXPHURLQWHURFRPHYDORUHGLXVFLWD
6HODIXQ]LRQHYDXVDWDFRPH
SURFHGXUDLOYDORUHUHVWLWXLWRSXz
HVVHUHLJQRUDWREHQFKpVLDSUHVHQWH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
3DVVDJJLRDVRWWRSURJUDPPD
,OSURFHVVRUHIJVM GLVSRQHGLGXH
LVWUX]LRQLPDFFKLQDSHUODJHVWLRQHGHO
PHFFDQLVPRGLSDVVDJJLRD
VRWWRSURJUDPPDIXQ]LRQH
– INVOKEVIRTUAL spiazzamentoLO
VRWWRSURJUDPPDFKLDPDQWHDWWLYDLO
VRWWRSURJUDPPDVSHFLILFDWRWUDPLWH
O¶DUJRPHQWRspiazzamento
– IRETURNLOVRWWRSURJUDPPDFKLDPDWR
ULWRUQDDOVRWWRSURJUDPPDFKLDPDQWH
UHVWLWXHQGRJOLXQQXPHURLQWHUR
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
6SHFLILFDGHOFKLDPDWR
3HUVSHFLILFDUHODFROORFD]LRQHHOH
FDUDWWHULVWLFKHGHOVRWWRSURJUDPPDGD
FKLDPDUHO¶LVWUX]LRQHINVOKEVIRTUAL DGRWWDXQIRUPDWRGLVSHFLILFDDSSRVLWR
7DOHIRUPDWRVLEDVDVXXQ³GHVFULWWRUH´
GHOVRWWRSURJUDPPDGDFKLDPDUH
FRQWHQHQWHLQIRUPD]LRQLQHFHVVDULHSHU
XQDVXDFRUUHWWDPHVVDLQHVHFX]LRQH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLR
INVOKEVIRTUAL spz_B
"Ciao!"
17 CPP 10
puntatore a B
area delle costanti
area del codice eseguibile
spiazzamento (spz_B)
# di parametri di B dimensioni var. loc. di B opc. 1a istr. B
}}
}
2 byte
2 byte
1 byte
}
IRETURN
n byte
1 byte
}
{
"descrittore" del sottoprogramma (funzione) B (4 byte)
punta a 1° byte del descrittore di B
sottoprogramma (funzione) B
{
corpo del sottoprogramma (funzione) B (n + 2 byte)
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
)XQ]LRQDPHQWRGHOODFKLDPDWD
,OVRWWRSURJUDPPDFKLDPDQWHVFULYHVXOOD
FLPDGHOODSLODLOULIHULPHQWRDOO¶RJJHWWR
OBJREF SOHRQDVWLFRHLSDUDPHWULGD
SDVVDUHDOVRWWRSURJUDPPDFKLDPDWR
,OVRWWRSURJUDPPDFKLDPDQWHHVHJXH
O¶LVWUX]LRQH
– INVOKEVIRTUAL spiazzamento
GRYHspiazzamento LQGLFDYHGHUHOD
VWUXWWXUDGHVFULWWRUHLOVRWWRSURJUDPPD
FKLDPDWRFXLSDVVDUHO¶HVHFX]LRQH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
)XQ]LRQDPHQWRGHOULHQWUR
,OVRWWRSURJUDPPDFKLDPDWRPHWWHVXOOD
FLPDGHOODSLODLOYDORUHGDUHVWLWXLUHDO
VRWWRSURJUDPPDFKLDPDQWHXQLQWHUR
,OVRWWRSURJUDPPDFKLDPDWRHVHJXH
O¶LVWUX]LRQH
– IRETURN
FKHULSRUWDO¶HVHFX]LRQHDOVRWWRSURJUDPPD
FKLDPDQWHDOO¶LVWUX]LRQHVXFFHVVLYDD
INVOKEVIRTUAL
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
/¶LVWUX]LRQHINVOKEVIRTUAL
/¶LVWUX]LRQHINVOKEVIRTUAL
SUHGLVSRQHO¶DPELHQWHSHULOSDVVDJJLR
GHOO¶HVHFX]LRQHDOVRWWRSURJUDPPD
± LPSLODO¶DUHDGLDWWLYD]LRQHGHOFKLDPDWR
± LQVHULVFHQHOO¶DUHDGLDWWLYD]LRQH
LQIRUPD]LRQLQHFHVVDULHLQVHJXLWRSHU
JHVWLUHLOULHQWURGDVRWWRSURJUDPPD
± DJJLRUQDLUHJLVWULLVSP HPCGHO
SURFHVVRUHIJVM
± ODQFLDO¶HVHFX]LRQHGHOVRWWRSURJUDPPD
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&KLDPDWDDVRWWRSURJUDPPDI
Parametro 3
Parametro 1
LV Prog. Princ.
Ind. Rientro A Area delle variabili locali della funzione chiamante (A)
Punt. Rientro Parametro 2
LV Prog. Princ.
Ind. Rientro A Area delle variabili locali della funzione chiamante (A)
Punt. Rientro Parametro 2 Parametro 1 Parametro 1
Parametro 2
LV SP
LV SP pila prima
dell’impilamento dei parametri
pila dopo l’impilamento del parametri area di
attivazione del sottoprog.
chiamante
base dell’area di attivazione corrente prima del passaggio dei parametri
pacco dei parametri da passare
Rif. Oggetto cima della pila prima del
passaggio dei parametri
cima della pila dopo il passaggio dei parametri
la funzione A impila i parametri da passare alla funzione B
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&KLDPDWDDVRWWRSURJUDPPDII
Parametro 3
Parametro 1 Rif. Oggetto Parametro 2
LV Funzione A Ind. Rientro B
Parametro 3
Parametro 1
LV Prog. Princ.
Ind. Rientro A Area delle variabili locali della funzione chiamante (A)
Punt. Rientro Parametro 2
LV Prog. Princ.
Ind. Rientro A Area delle variabili locali della funzione chiamante (A)
Punt. Rientro Parametro 2 Punt. Rientro
Parametro 1 Parametro 1
Parametro 2 Area delle variabili locali della funzione
chiamata (B)
LV SP
LV SP
pila dopo l’impilamento dei parametri, ma prima di INVOKEVIRTUAL
pila dopo l’esecuzione dell’istruzione INVOKEVIRTUAL pacco dei
parametri da passare
area di attivazione
del sottoprog.
chiamante
base dell’area di attivazione corrente prima di INVOKEVIRTUAL
base dell’area di attivazione corrente dopo INVOKEVIRTUAL
area di attivazione
del sottoprog.
chiamato
la funzione A chiama la funzione B
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
/¶LVWUX]LRQHIRETURN
/¶LVWUX]LRQHIRETURN ULFRVWUXLVFH
O¶DPELHQWHGLHVHFX]LRQHGHO
VRWWRSURJUDPPDFKLDPDQWH
± VSLODO¶DUHDGLDWWLYD]LRQHGHOFKLDPDWR
± ODVFLDVXOODFLPDGHOODSLODGHOFKLDPDQWHLO
YDORUHUHVWLWXLWRGDOFKLDPDWR
± ULSULVWLQDLUHJLVWULLVSP HPC GHO
SURFHVVRUHIJVM DLYDORULSUHFHGHQWLOD
FKLDPDWD
± ULSRUWDO¶HVHFX]LRQHDOFKLDPDQWH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
5LHQWURGDVRWWRSURJUDPPD
LV Funzione A Ind. Rientro B
Parametro 3
Parametro 1
LV Prog. Princ.
Ind. Rientro A Area delle variabili locali della funzione chiamante (A)
Punt. Rientro Parametro 2 Punt. Rientro
Parametro 1 Parametro 2 Area delle variabili locali della funzione chiamata (B)
LV SP
pila prima dell’esecuzione dell’istruzione
IRETURN area di
attivazione del sottoprog.
chiamato
Valore restituito
LV Prog. Princ.
Ind. Rientro A Area delle variabili locali della funzione chiamante (A)
Punt. Rientro Parametro 2 Valore restituito
Parametro 1 LV SP pila dopo l’esecuzione
dell’istruzione IRETURN
base dell’area di attivazione corrente dopo IRETURN base dell’area
di attivazione corrente prima di IRETURN
cima della pila delle espressioni prima di IRETURN
cima della pila delle espressioni dopo IRETURN
area di attivazione
del sottoprog.
chiamante
la funzione B termina e la funzione A riprende l’esecuzione;
A riceve il valore
restituito da B
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
&RPHIXQ]LRQDIRETURN
/¶LVWUX]LRQHIRETURN LQYHUWHOH
RSHUD]LRQLGHOO¶LVWUX]LRQH
INVOKEVIRTUALRYYHUR
± ULSULVWLQDLYDORULRULJLQDOLGHLUHJLVWULLV H
PCXVDQGRLO³SXQWDWRUHBULHQWUR´OR
³LQGLUL]]RBGLBULHQWUR´HLO³LV )XQ]LRQH´
PHPRUL]]DWLQHOO¶DUHDGLDWWLYD]LRQHGHO
VRWWRSURJUDPPDFKLDPDWR
± DJJLRUQDLOYDORUHGHOUHJLVWURSP HODVFLDLO
YDORUHUHVWLWXLWRVXOODFLPDGHOO¶DUHDGL
DWWLYD]LRQHGHOVRWWRSURJUDPPDFKLDPDQWH
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
(VHPSLR
6LVXSSRQJDGLDYHUHXQSURJUDPPD
IJVM PRGXODUL]]DWRFRPHVHJXH
± SURJUDPPDSULQFLSDOH
± IXQ]LRQHA UHVWLWXLVFHXQQXPHURLQWHUR
± IXQ]LRQHB UHVWLWXLVFHXQQXPHURLQWHUR
,OSURJUDPPDSULQFLSDOHFKLDPDOD
IXQ]LRQHAFKHDVXDYROWDFKLDPDOD
IXQ]LRQHB
9LHQHPRVWUDWRLOSURFHVVRGLSDVVDJJLR
FKLDPDWDULHQWURGD$DB
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
$UHHGLDWWLYD]LRQH
/DSLODGHOSURFHVVRUHIJVM FRQWLHQH
GXQTXHO¶DUHDGLDWWLYD]LRQHGHO
SURJUDPPDSULQFLSDOHHVRSUDTXHVWD
TXHOODGHOODIXQ]LRQHA
,OSURFHVVRGLFKLDPDWDLQVWDOODO¶DUHDGL
DWWLYD]LRQHGHOODIXQ]LRQHB VRSUDO¶DUHD
GLA HFRVuGLVDWWLYDO¶DUHDGLA
,OSURFHVVRGLULHQWURGLVLQVWDOODO¶DUHDGL
DWWLYD]LRQHGHOODIXQ]LRQHBULDWWLYDQGR
O¶DUHDGLA
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
Parametro 3 Parametro 2 Parametro 1 OBJREF LV Prog. Princ.
Ind. Rientro A
Parametro 1 Punt. Rientro Parametro 2 Area delle variabili locali della funzione chiamante (A) area del
programma e delle procedure e funzioni
funzione B
IRETURN funzione A
IRETURN programma
principale altro …
IVKVRT spz_B PC
LV SP
salva parametri e oggetto in pila
subito dopo che A ha impilato il puntatore all'oggetto e i 3 parametri da passare a B, ma subito prima
che A esegua IVKVRT
IVKVRT spz_A Ind.
Rientro B
Ind.
Rientro A
descrittore di B 4 byte Ind.
Iniz. di B
Ind.
Iniz. Desc.
LV Funzione A
Area delle variabili locali della funzione chiamata (B) Parametro 3 Parametro 2 Parametro 1 Punt. Rientro LV Prog. Princ.
Ind. Rientro A
Parametro 1 Punt. Rientro Parametro 2 Area delle variabili locali della funzione chiamante (A) Ind. Rientro B area del
programma e delle procedure e funzioni
funzione B
IRETURN funzione A
IRETURN programma
principale altro …
IVKVRT spz_B
PC
LV SP
salva parametri e oggetto in pila
IVKVRT spz_A Ind.
Rientro B
Ind.
Rientro A
descrittore di B Ind.
Iniz. di B
Ind.
Iniz. Desc.
subito dopo che A ha eseguito IVKVRT e che B
è entrata in esecuzione
LV Prog. Princ.
Ind. Rientro A Area delle variabili locali della funzione chiamante (A)
Parametro 1 Punt. Rientro Parametro 2 area del
programma e delle procedure e funzioni
funzione B
IRETURN
IVKVRT spz_B funzione A
IRETURN programma
principale altro …
PC
LV SP
salva parametri e oggetto in pila
subito prima che A impili il puntatore all'oggetto e i 3 parametri da passare a B
IVKVRT spz_A Ind.
Rientro B
Ind.
Rientro A
descrittore di B 4 byte Ind.
Iniz. di B
Ind.
Iniz. Desc.
6LPXOD]LRQHGHOODFKLDPDWDAnimazione
la funzione A chiama la funzione B
Fine
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
Valore restituito LV Funzione A
Area delle variabili locali della funzione chiamata (B) Parametro 3 Parametro 2 Parametro 1 Punt. Rientro LV Prog. Princ.
Ind. Rientro A
Parametro 1 Punt. Rientro Parametro 2 Area delle variabili locali della funzione chiamante (A) Ind. Rientro B area del
programma e delle procedure e funzioni
funzione B
IRETURN funzione A
IRETURN programma
principale altro …
IVKVRT spz_B
PC
LV SP
salva parametri e oggetto in pila
IVKVRT spz_A Ind.
Rientro B
Ind.
Rientro A
descrittore di B Ind.
Iniz. di B
Ind.
Iniz. Desc.
subito prima che B esegua
IRETURN
LV Prog. Princ.
Ind. Rientro A Area delle variabili locali della funzione chiamante (A)
Parametro 1 Punt. Rientro Parametro 2 area del
programma e delle procedure e funzioni
funzione B
IRETURN
IVKVRT spz_B funzione A
IRETURN programma
principale altro …
PC
LV SP
salva parametri e oggetto in pila
subito dopo che B ha terminato di eseguire IRETURN, e che l'esecuzione è tornata ad A, all'istruzione successiva a IVKVRT
IVKVRT spz_A
Valore restituito
Ind.
Rientro B
Ind.
Rientro A
descrittore di B 4 byte Ind.
Iniz. di B
Ind.
Iniz. Desc.
6LPXOD]LRQHGHOULWRUQR Animazione
B termina e A riprende l’esecuzione
Fine
$SU ,QIRUPDWLFD,, ,OOLYHOORPLFURDUFKLWHWWXUD
2VVHUYD]LRQH
,OSURFHVVRGLFKLDPDWDGLXQDIXQ]LRQH
YLHQHYLVWRGDOODIXQ]LRQHFKLDPDQWH
FRPHXQFDOFRORGLHVSUHVVLRQH
± DOODFKLDPDWDODSLODSHULOFDOFRORGHOOH
HVSUHVVLRQLGHOFKLDPDQWHqYXRWD
± DOULHQWURODSLODSHULOFDOFRORGHOOH
HVSUHVVLRQLGHOFKLDPDQWHFRQWLHQHVRORLO
YDORUHUHVWLWXLWRGDOFKLDPDWRFRPHVH
IRVVHVWDWDFDOFRODWDXQ¶HVSUHVVLRQH
6LSRVVRQRSHUWDQWRFDOFRODUHIDFLOPHQWH
HVSUHVVLRQLFRQWHQHQWLIXQ]LRQL