330 likes | 422 Views
PILE. voir l'animation: Diaporama / Visualiser ... avancer : Barre d'espace reculer : p. TITRE. PILE ("STACK") = zone de la mémoire où stocker temporairement des informations par empilage et dépilage. DEFINITION. LIFO = "Last In - First Out"
E N D
PILE voir l'animation: Diaporama / Visualiser ... avancer: Barre d'espace reculer: p TITRE
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
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
AVANT SP est le pointeur de pile "Stack Pointer" bifbof pam 1006 babe SP pointe donc sur la dernière donnée empilée SP pointe sur la donnée au sommet de la pile "Top Of Stack" Il contient donc l'adresse de la dernière donnée empilée PUSH Word from R0 PUSH
DECREMENTATION DE SP -2 SP SP-2 bifbof pam 1006 1004 babe SP pointe provisoirement sur la 1ère case disponible PUSH
SAUVEGARDE DE R0 R0 M[SP] babe bifbof pam 1004 babe PUSH
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
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 instructionspé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 Dernière donnée empilée à récupérer POP babe Registre où charger cette donnée POP Word to R1 DEPILEMENT
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
INCREMENTATION DE SP +2 SP SP+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
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
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 instructionspé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
Comment empiler et dépiler des octets ("Bytes") ? PuSh Byte PoP Byte Avec les instructions: STB R, -(SP) LDB R, (SP)+ GESTION D’OCTETS
AVANT SP pointe sur la dernière donnée empilée bof bif pam 1006 ba be La donnée à empiler est un octet PUSH Byte from R0 STB R0, -(SP)
DECREMENTATION DE SP -1 SP SP-1 bof bif pam 1006 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 OCTET R0 M[SP] be bof bif pam 1005 ba be STB R0, -(SP)
APRES be bif 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 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
SAUVEGARDE AU DELA DE LA LIMITE DE PILE La donnée système "vector" a été écrasée babe vector 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