Transcript sprg.ppt

© Alexandre Parodi - 2005-2007
SOUS-PROGRAMME
voir l'animation: Diaporama / Visualiser ...
avancer:
Barre d'espace ou clic gauche
reculer:
p
TITRE
© Alexandre Parodi - 2005-2007
Un sous-programme
("subroutine" ou "subprogram")
est une séquence d'instructions
que l'on veut pouvoir utiliser
plusieurs fois.
DEFINITION
© Alexandre Parodi - 2005-2007
précédente
1ère instruction
2ème instruction
...
suivante
encore
Séquence
à ré-utiliser
SEQUENCE A REUTILISER
© Alexandre Parodi - 2005-2007
Adresse de retour
Adresse du sous-programme
précédente
Saut au
sous-programme
suivante
encore
1ère instruction
2ème instruction
...
Retour du
Sous-Programme
Programme
Principal
Sous
Programme
Signifie ici:
"saute vers"
"branche sur"
APPEL & RETOUR
© Alexandre Parodi - 2005-2007
Le saut au sous-programme
("Jump to SubRoutine")
est souvent appelé
Appel au sous-programme
("Call").
APPEL
© Alexandre Parodi - 2005-2007
Les fonctions-membre ou méthodes
des objets des langages orientés objet
(e.g. JAVA, C++, C#, Eiffel ...)
sont implémentées par
des sous-programmes.
toto.boost() ;
appelle le sous-programme "boost"
de l'objet "toto".
USAGE EN POO
© Alexandre Parodi - 2005-2007
précédente 1
1ère instruction
2ème instruction
...
suivante 1
encore 1
précédente 2
1ère instruction
2ème instruction
......
suivante 2
encore 2
Séquence
utilisée
1ère fois
Séquence
utilisée
2ème fois
UTILISATION MULTIPLE
© Alexandre Parodi - 2005-2007
Programme
précédente 1
principal
saut au sous-progr.
suivante 1
Adresse de retour 1
encore 1
Adresse de retour 2
Adresse du sous-programme
Suite
précédente 2
saut au sous-progr. programme
principal
suivante 2
encore 2
1ère instruction
2ème instruction
...
retour sous-prog.
SousProgramme
Comment savoir où revenir ?
- ou APPELS CONSECUTIFS
© Alexandre Parodi - 2005-2007
Pour retourner à
l'instruction suivant l'appel
dans le programme principal,
il faut avoir d'abord
sauvegardé son adresse.
Elle s'appelle "adresse de retour"
ADRESSE DE RETOUR
© Alexandre Parodi - 2005-2007
Programme
précédente 1
principal
saut au sous-progr.
suivante 1
Adresse de retour 1
encore 1
Adresse de retour 2
Adresse du sous-programme
Suite
précédente 2
saut au sous-progr. programme
principal
suivante 2
encore 2
1ère instruction
2ème instruction
...
retour sous-prog.
SousProgramme
Mémorisation retour :
Adresse de retour 2
1
APPELS CONSECUTIFS
© Alexandre Parodi - 2005-2007
Sauvegarde de l'adresse de retour
dans un registre ou une case mémoire fixe:
Et si l'on appelle un sous-programme
depuis le sous-programme ?
SAUVEGARDE DE L'ADRESSE DE RETOUR
© Alexandre Parodi - 2005-2007
CE QUI DEVRAIT ARRIVER
Adresse de retour 1
Adresse de retour 2
Adresse du sous-programme
précédente 1
saut sous-progr. 1
suivante 1
encore 1
instruction(s)
saut sous-progr. 2
suivante 2
retour sous-prog.
1ère instruction
2ème instruction
...
retour sous-prog.
Programme
principal
SousProgramme 1
SousProgramme 2
APPELS IMBRIQUES
© Alexandre Parodi - 2005-2007
CE QUI ARRIVE
Adresse de retour 1
Adresse de retour 2
Adresse du sous-programme
précédente 1
saut sous-progr. 1
suivante 1
encore 1
instruction(s)
saut sous-progr. 2
suivante 2
retour sous-prog.
1ère instruction
2ème instruction
...
retour sous-prog.
Programme
principal
SousProgramme 1
SousProgramme 2
Mémorisation retour :
Adresse de retour 2
1
IMBRICATION +MEMORISATION
© Alexandre Parodi - 2005-2007
 On sauvegarde l'adresse de retour
sur la pile.
SAUVEGARDE DE L'ADRESSE DE RETOUR
© Alexandre Parodi - 2005-2007
Adresse de retour 1
Adresse de retour 2
Adresse du sous-programme
précédente 1
saut sous-progr. 1
suivante 1
encore 1
instruction(s)
saut sous-progr. 2
suivante 2
retour sous-prog.
1ère instruction
2ème instruction
...
retour sous-prog.
Programme
principal
SousProgramme 1
SousProgramme 2
Adresse de retour 2
Adresse de retour 1
L'adresse de retour est pointée
IMBRICATION + PILE
© Alexandre Parodi - 2005-2007
 Ceci permet des sous-programmes
ré-entrants (qui s'appellent eux-mêmes)
et donc récursifs !
Mais la pile est limitée ...
Autre solution : liste chaînée
(rare car pas adaptée ici: pas d'avantage,
compliquée, volumineuse et moins rapide)
RE-ENTRANCE et RECURSIVITE
© Alexandre Parodi - 2005-2007
Un appel à sous-programme :
 empile l'adresse de retour ;
 saute à la 1ère instruction
du sous-programme .
ACTIONS D'UN APPEL
© Alexandre Parodi - 2005-2007
Une instruction spéciale n'est pas nécessaire !
MPC R2 ;
// charge le contenu du PC dans R2
ADQ 6, R2 ;
// R2 contient l’adresse de retour
STW R2, -(SP) ; // empile l'adresse de retour
JEA (R1) ;
// saute au sous-prog. pointé par R1
PROGRAMME D'APPEL
© Alexandre Parodi - 2005-2007
Le saut au sous-programme
est effectué par l'instruction:
"Jump to SubRoutine"
JSR
INSTRUCTION JSR
© Alexandre Parodi - 2005-2007
L'opérande de l'instruction JSR est un
sous-programme.
L'adresse de cet opérande est donc
l'adresse du sous-programme,
c'est à dire
l'adresse de sa 1ère instruction.
OPERANDE DE JSR
© Alexandre Parodi - 2005-2007
JSR opérande
MODE D'ADRESSAGE
NOTATION
ASSEMBLEUR
Basé
JSR (R)
Direct
JSR @address
Indexé
JSR (R)disp
Indirect pré-indexé
JSR *(R)disp
Basé pré-décrémenté JSR -(R)
Basé post-incrémenté JSR (R)+
Immédiat
Registre
-
ADRESSE DU
SOUS-PROGRAMME
R
address = IE = M[PC]
R + disp = R + IE
M[R + disp] = M[R + IE]
R-2
R
PC
-
COMMENTAIRE
simple et générique
adresse fixe
compliqué
très compliqué
peu cohérent ici
peu cohérent ici
incohérent ici
aberrant
MODES D'ADRESSAGE DE JSR
© Alexandre Parodi - 2005-2007
JSR:
 empile l'adresse de retour ;
 saute à l'instruction de l'opérande .
ACTIONS DE JSR
© Alexandre Parodi - 2005-2007
AVANT
Pile
SP
R1
adresse sommet
adresse ss-prog
IR instruct. courante
blabla
précédente
JSR (R1)
suivante
encore
Programme
Principal
PC adresse mot suiv
adresse ss-prog
Signifie ici:
"pointe sur"
"est l'adresse de"
1ère instruction
...
...
RTS
Sous
Programme
JSR (R1)
© Alexandre Parodi - 2005-2007
AVANT
SP
1006
R1
8002
IR
JSR (R1)
PC
4006
1000
1002
1004
1006
1008
100A
Pile
blabla
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Programme
Principal
Sous
Programme
JSR (R1)
© Alexandre Parodi - 2005-2007
EMPILAGE
ADRESSE DE RETOUR
SP
1004
R1
8002
IR
JSR (R1)
PC
4006
SP  SP - 2 ;
M[SP]  adresse de retour;
1000
1002
1004
1006
1008
100A
adresse de retour
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
JSR (R1)
© Alexandre Parodi - 2005-2007
SP  SP - 2 ;
M[SP]  PC;
EMPILAGE
ADRESSE DE RETOUR
SP
1004
R1
8002
IR
JSR (R1)
PC
4006
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
JSR (R1)
© Alexandre Parodi - 2005-2007
SAUT A LA 1ère
INSTRUCTION
SP
1004
R1
8002
IR
1ère instruction
PC
8004
IR  M[adresse ss-prog] ,
PC  adresse ss-prog # 2 ;
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
JSR (R1)
© Alexandre Parodi - 2005-2007
SAUT A LA 1ère
INSTRUCTION
SP
1004
R1
8002
IR
1ère instruction
PC
8004
IR  M[R1] ,
PC  R1 # 2 ;
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
JSR (R1)
© Alexandre Parodi - 2005-2007
APRES
Pile
SP
blabla
R1
IR
1ère instruction
précédente
JSR (R1)
suivante
encore
Programme
Principal
PC
1ère instruction
2ème instruction
...
RTS
Sous
Programme
JSR (R1)
© Alexandre Parodi - 2005-2007
EXECUTION
SOUS-PROGRAMME
SP
1004
R1
8002
IR
1ère instruction
PC
8004
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
1ère instruction
© Alexandre Parodi - 2005-2007
EXECUTION
SOUS-PROGRAMME
SP
1004
R1
IR
2ème instruction
PC
8006
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
2ème instruction
© Alexandre Parodi - 2005-2007
EXECUTION
SOUS-PROGRAMME
SP
1004
R1
IR
... instruction
PC
8008
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
... instruction
© Alexandre Parodi - 2005-2007
Le retour de sous-programme :
 dépile l'adresse de retour ;
 saute à l'instruction à cette adresse .
ACTIONS DU RETOUR
© Alexandre Parodi - 2005-2007
Une instruction spéciale n'est pas nécessaire !
LDW R1,(SP)+ ; // dépile l'adresse de retour dans R1
JEA (R1) ;
// saute à l'instruction de retour
RETOUR DE SOUS-PROGRAMME
© Alexandre Parodi - 2005-2007
Le retour du sous-programme
est effectué par l'instruction:
”ReTurn from Subroutine"
RTS
IINSTRUCTION RTS
© Alexandre Parodi - 2005-2007
RTS:
 dépile l'adresse de retour ;
 saute à l'instruction suivant JSR .
ACTIONS DE RTS
© Alexandre Parodi - 2005-2007
AVANT
SP
R1
IR
RTS
adresse de retour
blabla
Pile
précédente
JSR (R1)
suivante
encore
Programme
Principal
PC
Signifie ici:
"pointe sur"
"est l'adresse de"
1ère instruction
2ème instruction
...
RTS
Sous
Programme
RTS
© Alexandre Parodi - 2005-2007
AVANT
SP
1004
R1
IR
RTS
PC
800A
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
RTS
© Alexandre Parodi - 2005-2007
DEPILAGE
ADRESSE DE RETOUR
SP
1006
R1
IR
RTS
PC  adresse de retour ,
SP  SP # 2 ;
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
PC adresse de retour
Sous
Programme
RTS
© Alexandre Parodi - 2005-2007
DEPILAGE
ADRESSE DE RETOUR
SP
1006
R1
IR
RTS
PC
4006
PC  M[SP] ,
SP  SP # 2 ;
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
RTS
© Alexandre Parodi - 2005-2007
IR  M[PC] ,
PC  PC # 2 ;
PREPARATION
INSTRUCTION SUIVANTE
SP
1006
R1
IR
suivante
PC
4008
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
RTS
© Alexandre Parodi - 2005-2007
APRES
Pile
SP
blabla
R1
IR
suivante
précédente
JSR (R1)
suivante
encore
Programme
Principal
PC
1ère instruction
2ème instruction
...
RTS
Sous
Programme
suivante
© Alexandre Parodi - 2005-2007
APRES
SP
1006
R1
IR
suivante
PC
4008
1000
1002
1004
1006
1008
100A
4006
blabla
Pile
4000
4002
4004
4006
4008
400A
précédente
JSR (R1)
suivante
encore
Programme
Principal
8000
8002
8004
8006
8008
800A
1ère instruction
2ème instruction
...
RTS
Sous
Programme
suivante
© Alexandre Parodi - 2005-2007
Dans les langages non-objet,
le sous-programme
est souvent à une adresse fixe
connue à l'avance.
JSR @SPRG_ADDRESS ;// appelle sprog d'adresse SPRG_ADDRESS
APPEL à ADRESSE FIXE
(mode direct)
© Alexandre Parodi - 2005-2007
AVANT
Pile
SP
IR
adresse sommet
blabla
JSR @
précédente
JSR @
SPRG_ADDRESS
suivante
Programme
Principal
PC adresse mot suiv
adresse ss-prog
Signifie ici:
"pointe sur"
"est l'adresse de"
1ère instruction
...
...
RTS
Sous
Programme
JSR @SPRG_ADDRESS
© Alexandre Parodi - 2005-2007
APRES
Pile
SP
adresse de retour
blabla
Programme
Principal
IR
précédente
JSR @
SPRG_ADDRESS
suivante
1ère instruction
PC
1ère instruction
2ème instruction
...
RTS
Sous
Programme
JSR @SPRG_ADDRESS
© Alexandre Parodi - 2005-2007
Le mode direct n'est pas nécessaire !
LDW R2, #SPRG_ADDRESS ; // charge R2 avec SPRG_ADDRESS
JSR (R2) ;
// saute au sous-prog. pointé par R2
APPEL à ADRESSE FIXE
sans mode direct !
© Alexandre Parodi - 2005-2007
Dans les langages à objets,
l'adresse du sous-programme
n'est connue qu'à l'exécution.
Le codage des objets varie d'un langage
et d'une implémentation à l'autre !
APPEL de METHODE
© Alexandre Parodi - 2005-2007
R4 pointe sur l'objet
Le champ boost pointe
sur le sous-programme
R4
+6
R4 + 6
pointe sur le champ
boost de l'objet
entête
champ1
boost
...
1ère instruction
2ème instruction
...
RTS
Objet
"toto"
Sous
Programme
JSR *(R4)6 ; // appelle boost de l'objet pointé par R4
EXEMPLE SIMPLE D'APPEL DE METHODE
(mode indirect pré-indexé)
© Alexandre Parodi - 2005-2007
Le mode indirect pré-indexé
n'est pas nécessaire !
LDW
ADQ
LDW
JSR
R2, R4 ;
//
6, R2 ;
//
R2, (R2) ; //
(R2) ;
//
R2 pointe sur l'objet toto
R2 pointe sur le champ boost de toto
R2 pointe sur le sous-programme
saute au sous-programme boost de toto
EXEMPLE D'APPEL DE METHODE
sans mode indirect pré-indexé !
© Alexandre Parodi - 2005-2007
Le fonctionnement d'un sous-programme
peut dépendre de paramètres
("arguments" ou "parameters") :
toto.boost(5, "piano") ;
5
: entier ;
 "piano" : chaîne de caractères.
Le nombre de paramètres s'appelle "arité".
PARAMETRES
© Alexandre Parodi - 2005-2007
Ils peuvent être représentés par :
 leur valeur (simple et rapide: C, C++, ...) ;
 leur adresse (Var de Pascal ...) ;
PASSAGE
© Alexandre Parodi - 2005-2007
Ces paramètres sont passés du programme
principal au sous-programme par stockage
préalable à l'appel :
 dans des registres (simple et rapide) ;
 sur la pile (nombre quasi-illimité) ;
 dans un descripteur en mémoire (rare:
économise la pile mais compliqué) ;
MECANISMES DE PASSAGE
© Alexandre Parodi - 2005-2007
Un sous-programme qui retourne une
information par la gauche s'appelle une
fonction ("function") ;
Cette information est stockée
préalablement au retour :
 dans un registre précis (e.g. R0: courant);
 sur la pile ;
FONCTION
© Alexandre Parodi - 2005-2007
Divers procédés sont utilisés pour échanger
des informations entre programme et sousprogramme.
Ils dépendent du langage évolué utilisé et de
son implémentation sur chaque machine.
Ils sont basés sur la configuration des
informations sur la pile à l'appel, pendant
l'exécution et au retour.
La configuration de la pile s'appelle
"stack frame" ou
modèle de pile ou environnement.
STACK FRAME
© Alexandre Parodi - 2005-2007
SP
disponible
BP
R0
PILE AVANT APPEL
© Alexandre Parodi - 2005-2007
LDQ
...
STW
ADQ
...
STW
0, R0
; // initialise R0
Ri,-(SP) ; // empile un paramètre depuis Ri
1, R0 ;
// compte le paramètre
R0,-(SP) ; // empile le nb de param.
SP
disponible
BP
R0
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
paramètres
EXEMPLE DE FRAME juste avant L'APPEL
© Alexandre Parodi - 2005-2007
JSR @adresse_du_sous_prog
SP
// appelle le sous-prog.
adresse sommet
disponible
BP
R0
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
paramètres
EXEMPLE DE FRAME juste après L'APPEL
© Alexandre Parodi - 2005-2007
LDW BP,SP ;
ADQ #10, SP ;
// BP pointe sur adresse retour
// réserve 5 mots sur la pile
disponible
SP
adresse sommet
BP
R0
"Base Pointer"
Registre de pointage
de base de pile.
e.g. R1
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
EXEMPLE DE FRAME D'EXECUTION
© Alexandre Parodi - 2005-2007
LDW R0,(BP)4 ;
// charge le paramètre n°1 dans R0
disponible
SP
adresse sommet
BP
R0
+4
paramètre n°1
BP + 4
pointe sur le
paramamètre n°1
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
ACCES PARAMETRE
(mode indexé: déplacement > 0)
© Alexandre Parodi - 2005-2007
LDW R0,BP ;
// charge BP dans R0
ADQ 4, R0;
// ajoute 4 à R0, R0 pointe sur param. 1
LDW R0, (R0); // charge paramètre n°1 dans R0
disponible
SP
adresse sommet
BP
R0
+4
paramètre n°1
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
ACCES PARAMETRE
(sans mode indexé !)
© Alexandre Parodi - 2005-2007
LDW R0,(BP)-4 ;
// charge la variable n°2 dans R0
disponible
SP
adresse sommet
-4
BP
R0
variable n°2
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
ACCES VARIABLE LOCALE
(mode indexé: déplacement < 0 )
© Alexandre Parodi - 2005-2007
LDW R0,*(BP)6 ;
// charge M[M[BP+6]] dans R0
disponible
SP
adresse sommet
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
BP
R0
'p'
+6
Chaîne de caractères
"piano" ailleurs
en mémoire.
données
locales
paramètres
'p'
'a'
'o'
ACCES INDIRECT
(mode indirect pré-indexé)
'i'
'n'
NUL
© Alexandre Parodi - 2005-2007
LDW R0,BP ;
// charge BP dans R0
ADQ 6, R0 ;
// ajoute 6 à R0; R0 pointe sur param.2
LDB R0, (R0); // charge octet n°0 dans R0
disponible
SP
adresse sommet
BP
R0
'p'
+6
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
'p'
'a'
'o'
'i'
'n'
NUL
ACCES INDIRECT
(sans mode indirect pré-indexé !)
© Alexandre Parodi - 2005-2007
LDW R0,(BP)6 ; // charge paramètre n°2 dans R0
LDB R0,(R0)5 ; // charge octet n°5 de la chaîne ds R0
disponible
SP
adresse sommet
BP
R0
'n'
+6
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
+5
'p'
'a'
'o'
'i'
'n'
NUL
ACCES INDIRECT PRE & POST-INDEXE
(pré (+6) et post (+5) indexé ...)
© Alexandre Parodi - 2005-2007
LDW
ADQ
LDW
ADQ
LDB
R0,BP ;
6, R0 ;
R0, (R0);
5, R0 ;
R0, (R0);
//
//
//
//
//
charge
ajoute
charge
ajoute
charge
BP dans R0
6 à R0; R0 pointe sur param.2
paramètre n°2 dans R0
5 à R0; R0 pointe sur 'n'
octet n°5 de la chaîne ds R0
disponible
SP
adresse sommet
BP
R0
'n'
+6
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
+5
'p'
'a'
'o'
'i'
'n'
NUL
ACCES INDIRECT PRE & POST-INDEXE
(sans mode indexé !)
© Alexandre Parodi - 2005-2007
En cas d'interruption,
les données locales
sont protégées !
SP
BP
R0
adresse sommet
adresse de retour
état de retour
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
empilé par
l'interrupt.
données
locales
paramètres
PILE juste après INTERRUPTION
© Alexandre Parodi - 2005-2007
LDW R0, ... ; // charge la valeur à retourner dans R0
LDW SP, BP ; // SP pointe sur l'adresse de retour
disponible
SP
adresse sommet
BP
R0
valeur retournée
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
EXEMPLE DE FRAME juste avant le RETOUR
© Alexandre Parodi - 2005-2007
RTS
// retourne du sous-programme
disponible
SP
adresse sommet
BP
R0
valeur retournée
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
FRAME juste après le RETOUR
© Alexandre Parodi - 2005-2007
LDW
SHL
ADQ
ADD
R2, (SP)2
R2, R2
2, R2
R2, SP, SP
;
;
:
;
//
//
//
//
R2 = nb de param
R2 = taille de la zone de param.
y compris le mot nb_param ...
SP pointe en dessous
disponible
SP
adresse sommet
BP
R0
valeur retournée
données locales
données locales
...
variable locale n° 2
variable locale n°.1
adresse de retour
nb paramètres
paramètre n°1
paramètre n°2
...
paramètre n°n
données
locales
paramètres
PILE juste après nettoyage
FIN DE LA PRESENTATION
FIN
© Alexandre Parodi - 2005-2007
FIN DE LA PRESENTATION
FIN
© Alexandre Parodi - 2005-2007