© alexandre parodi - 2005 titre pile voir l'animation: diaporama / visualiser... avancer:...
TRANSCRIPT
© A
lexa
ndre
Par
odi -
200
5
TITRE
PILEPILE
voir l'animation: Diaporama / Visualiser ...avancer: Barre d'espace reculer: p
© A
lexa
ndre
Par
odi -
200
5
DEFINITION
PILE("STACK")
=zone de la mémoire
où stockertemporairementdes informations
par empilage et dépilage
© A
lexa
ndre
Par
odi -
200
5
LIFO
LIFO=
"Last In - First Out"
dernier entré -
premier sorti
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 Pile1006 1007 "Stack"1008 1009
R0 100A 100B
EMPILEMENT
EMPILEMENT DE R0
babe
Donnée à empiler Dernière donnée empilée
1ère case disponible
Données empilées
Cases disponibles Pile =zone de lamémoire
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 Pile1006 1007 "Stack"1008 1009
R0 100A 100B
PUSH
PuSH Word from R0
babebabebabebabe babe
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R0 100A 100B
1006 pam
PUSH
bifbof
AVANT
SP pointe sur la donnée au sommet de la pile"Top Of Stack"
babe
SP est le pointeur de pile"Stack Pointer"
SP pointe donc sur la dernière donnée empilée
Il contient donc l'adresse de la dernière donnée empilée
PUSH Word from R0
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R0 100A 100B
SP SP-2
1004
PUSH
DECREMENTATION DE SP
babe
pam1006
-2
SP pointe provisoirementsur la 1ère case disponible
bifbof
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R0 100A 100B
1004
PUSH
SAUVEGARDE DE R0
R0 M[SP]
pambabebifbof
babe
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R0 100A 100B
1004
PUSH
APRES
pam
babe
babe
SP pointe à nouveau sur la dernière donnée empilée
© A
lexa
ndre
Par
odi -
200
5
PROGRAMME DE PUSH
Une instruction spécialen'est pas nécessaire !
ADQ -2, SP ; // décrémente SP; // SP pointe ensuite sur // la 1ère case disponible
STW R0, (SP) ; // stocke le contenu de R0 // ds la case pointée par SP // donc la 1ère disponible
© A
lexa
ndre
Par
odi -
200
5
MODE BASE PRE-DEC.
Utilisation du mode “basé pré-décrémenté”:
STW R0, -(SP) ; // décrémente SP, puis // stocke le contenu de R0 // ds la case pointée par SP
© A
lexa
ndre
Par
odi -
200
5
PuSh Word
Dans beaucoup de machines, il existe une instruction spécifique et optimisée pour SP:
PuSh Word
PSW R0 ; // décrémente SP, puis // stocke le contenu de R0 // ds la case pointée par SP
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 Pile1006 1007 "Stack"1008 1009
R1 100A 100B
DEPILEMENT
POP Word to R1
babe
DEPILEMENT DANS R1
Dernière donnée empiléeà récupérer
Registre où charger cette donnée
POP
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R1 100A 100B
1004
PoP Word
AVANT
pam
POP Word to R1
0101
SP pointe sur la donnée au sommet de la pile
SP est le pointeur de pile"Stack Pointer"
babe
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R1 100A 100B
1004
PoP Word
CHARGEMENT DE R1 R1 M[SP]
pam
babe0101
babe
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R1 100A 100B
SP SP+2
1006
PoP Word
INCREMENTATION DE SP
babe
pam1004
+2
SP pointe sur la dernière donnée empilée avant celle qui vient d'être récupérée
babe
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R1 100A 100B
1006 pam
PoP Word
APRES
babe
SP pointe sur le sommet de pile
La case au-dessus est à nouveau disponible
babe
© A
lexa
ndre
Par
odi -
200
5
PROGRAMME DE POP
LDW R0, (SP) ; // charge R0 avec le // sommet de pile
ADQ 2, SP ; // incrémente SP
Une instruction spécialen'est pas nécessaire !
© A
lexa
ndre
Par
odi -
200
5
MODE BASE POST-INC.
Utilisation du mode “basé post-incrémenté”:
LDW R0, (SP)+ ; // charge R0 avec le // sommet de pile puis // incrémente SP
© A
lexa
ndre
Par
odi -
200
5
PoP Word
Dans beaucoup de machines, il existe une instruction spécifique et optimisée pour SP:
PoP Word ou PulL Word
PPW R0 ; // charge R0 avec le // sommet de pile puis // incrémente SP
© A
lexa
ndre
Par
odi -
200
5
GESTION D’OCTETS
Comment empiler et dépilerdes octets ("Bytes") ?
PuSh BytePoP Byte
Avec les instructions:
STB R, -(SP)LDB R, (SP)+
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R0 100A 100B
1006 pam
STB R0, -(SP)
ba be
bof
AVANT
PUSH Byte from R0
SP pointe sur la dernière donnée empilée
bif
La donnée à empilerest un octet
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R0 100A 100B
1006
SP SP-1
1005
STB R0, -(SP)
DECREMENTATION DE SP
pam
-1
SP pointe sur une case disponible de la taille de la donnée,
donc ici d'un octet
bif bof
ba be
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R0 100A 100B
1005
STB R0, -(SP)
SAUVEGARDE DE R0
R0 M[SP]
pambebif bof
OCTET
ba be
© A
lexa
ndre
Par
odi -
200
5
1000 1001
1002 1003
1004 1005 PileSP 1006 1007 "Stack"
1008 1009
R0 100A 100B
1005
STB R0, -(SP)
APRES
pambebif
ba be
© A
lexa
ndre
Par
odi -
200
5
INITIALISATION
La base de pile doit être spécifiée avant usage.
LDW SP, #2048 // initialise SP
© A
lexa
ndre
Par
odi -
200
5
DEBORDEMENT
Lorsque l'on empile trop d'informations, la pile déborde ("stack overflow"), et écrase les données juste au dessus.
© A
lexa
ndre
Par
odi -
200
5
05FA données05FC système05FE
SP 0600
0602 PileR0 0604 "Stack"
0600 pam
DEBORDEMENT
vector
AVANT
babe
PUSH Word from R0
Limite haute de la pile
© A
lexa
ndre
Par
odi -
200
5
05FA données05FC système05FE
SP 0600
0602 PileR0 0604 "Stack"
05FE
DEBORDEMENT
DECREMENTATION DE SP AU DESSUS
DE LA LIMITE
babe
pam0600
-2vector
© A
lexa
ndre
Par
odi -
200
5
05FA données05FC système05FE
SP 0600
0602 PileR0 0604 "Stack"
05FE
DEBORDEMENT
SAUVEGARDE AU DELA DE LA LIMITE DE PILE
pambabevector
babe
La donnée système "vector" a été écrasée
© A
lexa
ndre
Par
odi -
200
5
USAGE
La pile est utilisée pour stocker des informations en LIFO:
informations lors de l'appel et du retour des sous-programmes;
informations locales à un bloc ;
données intermédiaires lors du calcul.
© A
lexa
ndre
Par
odi -
200
5
FIN DE LA PRESENTATION
© A
lexa
ndre
Par
odi -
200
5
FIN DE LA PRESENTATION