PILE voir l'animation: Diaporama / Visualiser ... avancer: Barre d'espace reculer: p TITRE
par empilage et dépilage PILE ("STACK") = zone de la mémoire où stocker temporairement des informations par empilage et dépilage DEFINITION
LIFO = "Last In - First Out" dernier entré - premier sorti LIFO
Dernière donnée empilée EMPILEMENT DE R0 1ère case disponible Cases disponibles Pile = zone de la mémoire Données empilées babe Donnée à empiler Dernière donnée empilée EMPILEMENT
babe babe babe babe babe PuSH Word from R0 PUSH
SP est le pointeur de pile "Stack Pointer" AVANT SP est le pointeur de pile "Stack Pointer" bifbof pam 1006 babe SP pointe sur la donnée au sommet de la pile "Top Of Stack" 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 PUSH
SP pointe provisoirement sur la 1ère case disponible DECREMENTATION DE SP SP SP-2 -2 bifbof 1006 pam 1004 babe SP pointe provisoirement sur la 1ère case disponible PUSH
SAUVEGARDE DE R0 R0 M[SP] bifbof babe pam 1004 babe PUSH
la dernière donnée empilée APRES babe pam 1004 babe SP pointe à nouveau sur la dernière donnée empilée PUSH
Une instruction spéciale n'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 PROGRAMME DE PUSH
“basé pré-décrémenté”: 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 MODE BASE PRE-DEC.
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 PuSh Word
DEPILEMENT DANS R1 POP Dernière donnée empilée à récupérer babe Registre où charger cette donnée POP Word to R1 DEPILEMENT
SP est le pointeur de pile "Stack Pointer" AVANT SP est le pointeur de pile "Stack Pointer" babe pam 1004 0101 SP pointe sur la donnée au sommet de la pile POP Word to R1 PoP Word
CHARGEMENT DE R1 R1 M[SP] babe pam 1004 babe 0101 PoP Word
SP pointe sur la dernière donnée empilée INCREMENTATION DE SP SP SP+2 +2 babe pam 1004 1006 babe SP pointe sur la dernière donnée empilée avant celle qui vient d'être récupérée PoP Word
est à nouveau disponible APRES La case au-dessus est à nouveau disponible babe pam 1006 babe SP pointe sur le sommet de pile PoP Word
Une instruction spéciale n'est pas nécessaire ! LDW R0, (SP) ; // charge R0 avec le // sommet de pile ADQ 2, SP ; // incrémente SP PROGRAMME DE POP
“basé post-incrémenté”: Utilisation du mode “basé post-incrémenté”: LDW R0, (SP)+ ; // charge R0 avec le // sommet de pile puis // incrémente SP MODE BASE POST-INC.
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 PoP Word
STB R, -(SP) LDB R, (SP)+ Comment empiler et dépiler des octets ("Bytes") ? PuSh Byte PoP Byte Avec les instructions: STB R, -(SP) LDB R, (SP)+ GESTION D’OCTETS
dernière donnée empilée AVANT SP pointe sur la dernière donnée empilée bif bof pam 1006 ba be La donnée à empiler est un octet PUSH Byte from R0 STB R0, -(SP)
de la taille de la donnée, DECREMENTATION DE SP SP SP-1 -1 bif bof 1006 pam 1005 ba be SP pointe sur une case disponible de la taille de la donnée, donc ici d'un octet STB R0, -(SP)
SAUVEGARDE DE R0 R0 M[SP] be bif bof pam ba be OCTET STB R0, -(SP) 1005 OCTET ba be STB R0, -(SP)
APRES bif be pam 1005 ba be STB R0, -(SP)
La base de pile doit être spécifiée avant usage. LDW SP, #2048 // initialise SP INITIALISATION
Lorsque l'on empile trop d'informations, la pile déborde ("stack overflow"), et écrase les données juste au dessus. DEBORDEMENT
AVANT vector pam babe Limite haute de la pile PUSH Word from R0 0600 babe Limite haute de la pile PUSH Word from R0 DEBORDEMENT
DECREMENTATION DE SP AU DESSUS DE LA LIMITE -2 vector pam 0600 05FE babe DEBORDEMENT
AU DELA DE LA LIMITE DE PILE La donnée système "vector" a été écrasée SAUVEGARDE AU DELA DE LA LIMITE DE PILE La donnée système "vector" a été écrasée vector babe pam 05FE babe DEBORDEMENT
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. USAGE
FIN DE LA PRESENTATION
FIN DE LA PRESENTATION