TITRE
description
Transcript of TITRE
© A
lexa
ndre
Par
odi -
200
5
TITRE
SOUS-PROGRAMMESOUS-PROGRAMME
voir l'animation: Diaporama / Visualiser ...avancer: Barre d'espace reculer: p
© A
lexa
ndre
Par
odi -
200
5
DEFINITION
Un sous-programme ("subroutine" ou "subprogram")est une séquence d'instructions
que l'on veut pouvoir utiliser plusieurs fois.
© A
lexa
ndre
Par
odi -
200
5
SEQUENCE A REUTILISER
précédente1ère instruction Séquence2ème instruction à ré-utiliser
...suivanteencore
© A
lexa
ndre
Par
odi -
200
5
APPEL & RETOUR
précédente ProgrammeSaut au
sous-programmePrincipal
suivanteencore
1ère instruction2ème instruction Sous
... ProgrammeRetour du
Sous-Programme
Adresse de retour
Adresse du sous-programme
Signifie ici:"saute vers"
"branche sur"
Signifie ici:"saute vers"
"branche sur"
© A
lexa
ndre
Par
odi -
200
5
APPEL
Le saut au sous-programme("Jump to SubRoutine")
est souvent appeléAppel au sous-programme
("Call").
© A
lexa
ndre
Par
odi -
200
5
USAGE EN POO
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.
appelle le sous-programme "boost"de l'objet "toto".
toto.boost() ;
© A
lexa
ndre
Par
odi -
200
5
UTILISATION MULTIPLE
précédente 11ère instruction Séquence2ème instruction utilisée
... 1ère foissuivante 1encore 1
précédente 21ère instruction Séquence2ème instruction utilisée
...... 2ème foissuivante 2encore 2
© A
lexa
ndre
Par
odi -
200
5
APPELS CONSECUTIFS
précédente 1 Programmesaut au sous-progr. principal
suivante 1encore 1
précédente 2 Suitesaut au sous-progr. programme
suivante 2 principalencore 2
1ère instruction2ème instruction Sous-
... Programmeretour sous-prog.
Adresse de retour 1
Adresse du sous-programme
Adresse de retour 2
Comment savoir où revenir ?
- ou -Comment savoir où revenir ?
- ou -
© A
lexa
ndre
Par
odi -
200
5
ADRESSE DE RETOUR
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"
© A
lexa
ndre
Par
odi -
200
5
APPELS CONSECUTIFS
précédente 1 Programmesaut au sous-progr. principal
suivante 1encore 1
précédente 2 Suitesaut au sous-progr. programme
suivante 2 principalencore 2
1ère instruction2ème instruction Sous-
... Programmeretour sous-prog.
Adresse de retour 1
Adresse du sous-programme
Adresse de retour 2
Mémorisation retour :
Adresse de retour 1Adresse de retour 2
© A
lexa
ndre
Par
odi -
200
5
SAUVEGARDE DE L'ADRESSE DE RETOUR
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 ?
© A
lexa
ndre
Par
odi -
200
5
APPELS IMBRIQUES
précédente 1 Programmesaut sous-progr. 1 principal
suivante 1encore 1
instruction(s)saut sous-progr. 2
suivante 2 Sous-retour sous-prog. Programme 1
1ère instruction2ème instruction Sous-
... Programme 2retour sous-prog.
Adresse de retour 1
Adresse du sous-programme
Adresse de retour 2
CE QUI DEVRAIT ARRIVER
© A
lexa
ndre
Par
odi -
200
5
Adresse de retour 1
IMBRICATION +MEMORISATION
précédente 1 Programmesaut sous-progr. 1 principal
suivante 1encore 1
instruction(s)saut sous-progr. 2
suivante 2 Sous-retour sous-prog. Programme 1
1ère instruction2ème instruction Sous-
... Programme 2retour sous-prog.
Adresse de retour 1
Adresse du sous-programme
Adresse de retour 2
Mémorisation retour :
Adresse de retour 2
CE QUI ARRIVE
© A
lexa
ndre
Par
odi -
200
5
SAUVEGARDE DE L'ADRESSE DE RETOUR
On sauvegarde l'adresse de retour sur la pile.
© A
lexa
ndre
Par
odi -
200
5
IMBRICATION + PILE
précédente 1 Programmesaut sous-progr. 1 principal
suivante 1encore 1
instruction(s)saut sous-progr. 2
suivante 2 Sous-retour sous-prog. Programme 1
1ère instruction2ème instruction Sous-
... Programme 2retour sous-prog.
Adresse de retour 1
Adresse du sous-programme
Adresse de retour 2
Adresse de retour 1
Adresse de retour 2
L'adresse de retour est pointéeL'adresse de retour est pointée
© A
lexa
ndre
Par
odi -
200
5
RE-ENTRANCE et RECURSIVITE
Ceci permet des sous-programmes ré-entrants (qui s'appellent eux-mêmes)
et donc récursifs !
Autre solution : liste chaînée(rare car pas adaptée ici: pas d'avantage, compliquée, volumineuse et moins rapide)
Mais la pile est limitée ...
© A
lexa
ndre
Par
odi -
200
5
ACTIONS D'UN APPEL
Un appel à sous-programme :
empile l'adresse de retour ;
saute à la 1ère instruction du sous-programme .
© A
lexa
ndre
Par
odi -
200
5
PROGRAMME D'APPEL
Une instruction spéciale n'est pas nécessaire !
MPC R2 ; // charge le contenu du PC dans R2// MPC = Move PC
ADQ 2,R2 ;// ajout 2 à R2
STW R2, -(SP) ; // empile l'adresse de retour// -(SP) = mode d’@ basé prédecrémenté SP = Stack //Pointer
JEA (R1) ; // saute au sous-prog. pointé par R1
© A
lexa
ndre
Par
odi -
200
5
INSTRUCTION JSR
Le saut au sous-programmeest effectué par l'instruction:
"Jump to SubRoutine"
JSR
© A
lexa
ndre
Par
odi -
200
5
OPERANDE DE JSR
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.
© A
lexa
ndre
Par
odi -
200
5
MODES D'ADRESSAGE DE JSR
JSR opérande
MODE D'ADRESSAGE NOTATION ASSEMBLEUR
ADRESSE DU SOUS-PROGRAMME
COMMENTAIRE
Basé JSR (R) (machine RISK)
R simple et générique
Direct JSR @address address = IE = M[PC] adresse fixe Indexé JSR (R)disp R + disp = R + IE compliqué Indirect pré-indexé JSR *(R)disp M[R + disp] = M[R +
IE] très compliqué
Basé pré-décrémenté JSR -(R) R-2 peu cohérent ici Basé post-incrémenté JSR (R)+ R peu cohérent ici
Immédiat - PC incohérent ici Registre - - aberrant
© A
lexa
ndre
Par
odi -
200
5
ACTIONS DE JSR
JSR:
empile l'adresse de retour ;
saute à l'instruction de l'opérande .
© A
lexa
ndre
Par
odi -
200
5
PileSP adresse sommet blabla
précédente ProgrammeR1 adresse ss-prog JSR (R1) Principal
suivanteIR instruct. courante encore
PC adresse mot suiv
adresse ss-prog 1ère instruction... Sous... Programme
RTS
JSR (R1)
AVANT
Signifie ici:"pointe sur"
"est l'adresse de"
Signifie ici:"pointe sur"
"est l'adresse de"
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 PileSP 1006 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal
4006 suivanteIR JSR (R1) 4008 encore
400A
PC 40068000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
JSR (R1)
AVANT
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 adresse de retour PileSP 1004 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal
4006 suivanteIR JSR (R1) 4008 encore
400A
PC 40068000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
JSR (R1)
EMPILAGE ADRESSE DE RETOUR
SP SP - 2 ;M[SP] adresse de retour;
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1004 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal
4006 suivanteIR JSR (R1) 4008 encore
400A
PC 40068000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
JSR (R1)
EMPILAGE ADRESSE DE RETOUR
SP SP - 2 ;M[SP] PC;
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1004 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal
4006 suivanteIR 1ère instruction 4008 encore
400A
PC 80048000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
JSR (R1)
SAUT A LA 1ère INSTRUCTION
IR M[adresse ss-prog] ,PC adresse ss-prog # 2 ;
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1004 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal
4006 suivanteIR 1ère instruction 4008 encore
400A
PC 80048000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
JSR (R1)
SAUT A LA 1ère INSTRUCTION
IR M[R1] ,PC R1 # 2 ;
© A
lexa
ndre
Par
odi -
200
5
PileSP blabla
précédente ProgrammeR1 JSR (R1) Principal
suivanteIR 1ère instruction encore
PC
1ère instruction2ème instruction Sous
... ProgrammeRTS
JSR (R1)
APRES
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1004 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 8002 4004 JSR (R1) Principal
4006 suivanteIR 1ère instruction 4008 encore
400A
PC 80048000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
1ère instruction
EXECUTIONSOUS-PROGRAMME
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1004 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 4004 JSR (R1) Principal
4006 suivanteIR 2ème instruction 4008 encore
400A
PC 80068000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
2ème instruction
EXECUTIONSOUS-PROGRAMME
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1004 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 4004 JSR (R1) Principal
4006 suivanteIR ... instruction 4008 encore
400A
PC 80088000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
... instruction
EXECUTIONSOUS-PROGRAMME
© A
lexa
ndre
Par
odi -
200
5
ACTIONS DU RETOUR
Le retour de sous-programme :
dépile l'adresse de retour ;
saute à l'instruction à cette adresse .
© A
lexa
ndre
Par
odi -
200
5
RETOUR DE SOUS-PROGRAMME
Une instruction spéciale n'est pas nécessaire !
LDW R1,(SP)+ ; // dépile l'adresse de retour dans R1 // j’incrémente le SP
JEA (R1) ; // saute à l'instruction de retour
© A
lexa
ndre
Par
odi -
200
5
IINSTRUCTION RTS
Le retour du sous-programmeest effectué par l'instruction:
”ReTurn from Subroutine"
RTS
© A
lexa
ndre
Par
odi -
200
5
ACTIONS DE RTS
RTS:
dépile l'adresse de retour ;
saute à l'instruction suivant JSR .
© A
lexa
ndre
Par
odi -
200
5
adresse de retour PileSP blabla
précédente ProgrammeR1 JSR (R1) Principal
suivanteIR RTS encore
PC
1ère instruction2ème instruction Sous
... ProgrammeRTS
RTS
AVANT
Signifie ici:"pointe sur"
"est l'adresse de"
Signifie ici:"pointe sur"
"est l'adresse de"
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1004 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 4004 JSR (R1) Principal
4006 suivanteIR RTS 4008 encore
400A
PC 800A8000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
RTS
AVANT
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1006 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 4004 JSR (R1) Principal
4006 suivanteIR RTS 4008 encore
400A
PC adresse de retour8000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
RTS
DEPILAGE ADRESSE DE RETOUR
PC adresse de retour ,SP SP # 2 ;
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1006 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 4004 JSR (R1) Principal
4006 suivanteIR RTS 4008 encore
400A
PC 40068000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
RTS
DEPILAGE ADRESSE DE RETOUR
PC M[SP] ,SP SP # 2 ;
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1006 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 4004 JSR (R1) Principal
4006 suivanteIR suivante 4008 encore
400A
PC 40088000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
RTS
PREPARATIONINSTRUCTION SUIVANTE
IR M[PC] ,PC PC # 2 ;
© A
lexa
ndre
Par
odi -
200
5
PileSP blabla
précédente ProgrammeR1 JSR (R1) Principal
suivanteIR suivante encore
PC
1ère instruction2ème instruction Sous
... ProgrammeRTS
suivante
APRES
© A
lexa
ndre
Par
odi -
200
5
1000
1002
1004 4006 PileSP 1006 1006 blabla
1008
100A
4000
4002 précédente ProgrammeR1 4004 JSR (R1) Principal
4006 suivanteIR suivante 4008 encore
400A
PC 40088000
8002 1ère instruction8004 2ème instruction Sous8006 ... Programme8008 RTS800A
suivante
APRES
© A
lexa
ndre
Par
odi -
200
5
APPEL à ADRESSE FIXE(mode direct)
Dans les langages non-objet, le sous-programme
est souvent à une adresse fixeconnue à l'avance.
JSR @SPRG_ADDRESS ;// appelle sprog d'adresse SPRG_ADDRESS
© A
lexa
ndre
Par
odi -
200
5
PileSP adresse sommet blabla
précédente ProgrammeJSR @ Principal
SPRG_ADDRESSIR JSR @ suivante
PC adresse mot suiv
adresse ss-prog 1ère instruction... Sous... Programme
RTS
JSR @SPRG_ADDRESS
AVANT
Signifie ici:"pointe sur"
"est l'adresse de"
Signifie ici:"pointe sur"
"est l'adresse de"
© A
lexa
ndre
Par
odi -
200
5
adresse de retour PileSP blabla
précédente ProgrammeJSR @ Principal
SPRG_ADDRESSIR 1ère instruction suivante
PC
1ère instruction2ème instruction Sous
... ProgrammeRTS
JSR @SPRG_ADDRESS
APRES
© A
lexa
ndre
Par
odi -
200
5
APPEL à ADRESSE FIXEsans mode direct !
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
© A
lexa
ndre
Par
odi -
200
5
APPEL de METHODE
Dans les langages à objet, 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 !
© A
lexa
ndre
Par
odi -
200
5
R4entête Objet
champ1 "toto"boost
...
1ère instruction2ème instruction Sous
... ProgrammeRTS
EXEMPLE SIMPLE D'APPEL DE METHODE(mode indirect pré-indexé)
JSR *(R4)6 ; // appelle boost de l'objet pointé par R4
+6
R4 + 6pointe sur le champ
boost de l'objet
R4 pointe sur l'objet Le champ boost pointe sur le sous-programme
© A
lexa
ndre
Par
odi -
200
5
EXEMPLE D'APPEL DE METHODEsans mode indirect pré-indexé !
Le mode indirect pré-indexé n'est pas nécessaire !
LDW R2, R4 ; // R2 pointe sur l'objet toto// charger R2 ac le contenu de R4
ADQ 6, R2 ; // R2 pointe sur le champ boost de toto
LDW R2, (R2) ; // R2 pointe sur le sous-programme
JSR (R2) ; // saute au sous-programme boost de toto
© A
lexa
ndre
Par
odi -
200
5
PARAMETRES
Le fonctionnement d'un sous-programmepeut 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é".
© A
lexa
ndre
Par
odi -
200
5
PASSAGE
Ils peuvent être représentés par :
leur valeur (simple et rapide: C, C++, ...) ;
leur adresse (Var de Pascal ...) ;
© A
lexa
ndre
Par
odi -
200
5
MECANISMES DE PASSAGE
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é) ;
© A
lexa
ndre
Par
odi -
200
5
FONCTION
Un sous-programme qui retourne une information par la gauche s'appelle une fonction ("function") ;
Cette information est stockéepréalablement au retour :
dans un registre précis (e.g. R0: courant);
sur la pile ;
© A
lexa
ndre
Par
odi -
200
5
STACK FRAME
Divers procédés sont utilisés pour échanger des informations entre programme et sous-programme.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.
© A
lexa
ndre
Par
odi -
200
5
SP
disponible
BP
R0
PILE AVANT APPEL
© A
lexa
ndre
Par
odi -
200
5
SP
disponible
BPnb paramètresparamètre n°1 paramètres
R0 paramètre n°2...
paramètre n°n
EXEMPLE DE FRAME juste avant L'APPEL
LDQ 0, R0 ; // initialise R0...STW Ri,-(SP) ; // empile un paramètre depuis RiADQ 1, R0 ; // compte le paramètre...STW R0,-(SP) ; // empile le nb de param.
© A
lexa
ndre
Par
odi -
200
5
SP adresse sommet
disponible
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 paramètre n°2...
paramètre n°n
EXEMPLE DE FRAME juste après L'APPEL
JSR @adresse_du_sous_prog // appelle le sous-prog.
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 paramètre n°2...
paramètre n°n
EXEMPLE DE FRAME D'EXECUTION
LDW BP,SP ; // BP pointe sur adresse retourADQ #10, SP ; // réserve 5 mots sur la pile
"Base Pointer"Registre de pointage
de base de pile.e.g. R1
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 paramètre n°1 paramètre n°2...
paramètre n°n
ACCES PARAMETRE (mode indexé: déplacement > 0)
LDW R0,(BP)4 ; // charge le paramètre n°1 dans R0
+4
BP + 4pointe sur le
paramamètre n°1
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 paramètre n°1 paramètre n°2...
paramètre n°n
ACCES PARAMETRE (sans mode indexé !)
LDW R0,BP ; // charge BP dans R0ADQ 4, R0; // ajoute 4 à R0, R0 pointe sur param. 1LDW R0, (R0); // charge paramètre n°1 dans R0
+4
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 variable n°2 paramètre n°2...
paramètre n°n
ACCES VARIABLE LOCALE(mode indexé: déplacement < 0 )
LDW R0,(BP)-4 ; // charge la variable n°2 dans R0
-4
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 'p' paramètre n°2...
paramètre n°n
ACCES INDIRECT (mode indirect pré-indexé)
+6
LDW R0,*(BP)6 ; // charge M[M[BP+6]] dans R0
'p' 'i' 'a' 'n' 'o' NUL
Chaîne de caractères"piano" ailleurs
en mémoire.
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 'p' paramètre n°2...
paramètre n°n
ACCES INDIRECT (sans mode indirect pré-indexé !)
+6
LDW R0,BP ; // charge BP dans R0ADQ 6, R0 ; // ajoute 6 à R0; R0 pointe sur param.2LDB R0, (R0); // charge octet n°0 dans R0
'p' 'i' 'a' 'n' 'o' NUL
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 'n' paramètre n°2...
paramètre n°n
ACCES INDIRECT PRE & POST-INDEXE (pré (+6) et post (+5) indexé ...)
+6
LDW R0,(BP)6 ; // charge paramètre n°2 dans R0LDB R0,(R0)5 ; // charge octet n°5 de la chaîne ds R0
'p' 'i' 'a' 'n' 'o' NUL
+5
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 'n' paramètre n°2...
paramètre n°n
ACCES INDIRECT PRE & POST-INDEXE (sans mode indexé !)
+6
LDW R0,BP ; // charge BP dans R0ADQ 6, R0 ; // ajoute 6 à R0; R0 pointe sur param.2LDW R0, (R0); // charge paramètre n°2 dans R0ADQ 5, R0 ; // ajoute 5 à R0; R0 pointe sur 'n'LDB R0, (R0); // charge octet n°5 de la chaîne ds R0
'p' 'i' 'a' 'n' 'o' NUL
+5
© A
lexa
ndre
Par
odi -
200
5
adresse de retour empilé parétat de retour l'interrupt.
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 paramètre n°2...
paramètre n°n
PILE juste après INTERRUPTION
En cas d'interruption,les données locales
sont protégées !
En cas d'interruption,les données locales
sont protégées !
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 valeur retournée paramètre n°2...
paramètre n°n
EXEMPLE DE FRAME juste avant le RETOUR
LDW R0, ... ; // charge la valeur à retourner dans R0LDW SP, BP ; // SP pointe sur l'adresse de retour
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 valeur retournée paramètre n°2...
paramètre n°n
FRAME juste après le RETOUR
RTS // retourne du sous-programme
© A
lexa
ndre
Par
odi -
200
5
disponible
SP adresse sommet données localesdonnées locales
... donnéesvariable locale n° 2 localesvariable locale n°.1
BP adresse de retournb paramètresparamètre n°1 paramètres
R0 valeur retournée paramètre n°2...
paramètre n°n
PILE juste après nettoyage
LDW R2, (SP)2 ; // R2 = nb de paramSHL R2, R2 ; // R2 = taille de la zone de param.ADQ 2, R2 : // y compris le mot nb_param ...ADD R2, SP, SP ; // SP pointe en dessous
© A
lexa
ndre
Par
odi -
200
5
FIN
FIN DE LA PRESENTATION
© A
lexa
ndre
Par
odi -
200
5
FIN
FIN DE LA PRESENTATION