Comment Ca Marche - Communauté informatique  
   
Accueil - Encyclopédie informatiqueTélécharger l'encyclopédieContribuer à cet article

L'assembleur - Notions de pile

Pile Encyclopédie


Utilité d'une pile

Une pile est une zone de mémoire dans laquelle on peut stocker temporairement des registres. Il s'agit d'un moyen d'accéder à des données en les empilant, telle une pile de livres, puis en les dépilant pour les utiliser. Ainsi il est nécessaire de dépiler les valeurs stockées au sommet (les dernières à avoir été stockées) pour pouvoir accéder aux valeurs situées à la base de la pile.

En réalité il s'agit d'une zone de mémoire et d'un pointeur qui permettent de repérer le sommet de la pile.
La pile est de type LIFO (Last In First Out), c'est-à-dire que la première valeur empilée sera la dernière sortie. (Si vous empilez des livres, il vous faudra les dépiler en commençant par enlever les livres du dessus. Le premier livre empilé sera donc le dernier sorti !)

Les instructions PUSH et POP

Les instructions PUSH et POP sont les instructions qui servent à empiler et dépiler les données.

PUSH registre met le contenu du registre dans la pile (empilement).

POP registre récupère le contenu de la pile et le stocke dans le registre (dépilage).

Ainsi, l'instruction PUSH BX empile le contenu du registre BX, et l'instruction POP AX récupère le contenu du sommet de la pile et le transfère dans AX.

Utilisation de la pile sur un exemple

Dans l'exemple suivant, que l'on imaginera au milieu d'un programme, on stocke les valeurs contenues dans AX et BX pour pouvoir utiliser ces deux registres, puis une fois l'opération accomplie on remet les valeurs qu'ils contenaient précédemment...

PUSH AX
PUSH BX
MOV AX, [0140]
ADD BX, AX
MOV [0140], BX
POP BX
POP AX

Les registres SS et SP

Les registres SS et SP sont deux registres servant à gérer la pile :

  • SS (Stack Segment, dont la traduction est segment de pile) est un registre 16 bits contenant l'adresse du segment de pile courant. Il doit être initialisé au début du programme.
  • SP (Stack Pointer, littéralement pointeur de pile) est le déplacement pour atteindre le sommet de la pile (16 bits de poids faible).

SP pointe vers le sommet, c'est-à-dire sur le dernier bloc occupé de la pile. Lorsque l'on ajoute un élément à la pile, l'adresse contenue dans SP est décrémentée de 2 octets (car un emplacement de la pile fait 16 bits de longueur). En effet, lorsque l'on parcourt la pile de la base vers le sommet, les adresses décroissent.
Par contre l'instruction POP incrémente de 2 octets (16 bits) la valeur de SP.

  • PUSH : SP <- SP - 2
  • POP : SP <- SP + 2

Ainsi, lorsque la pile est vide SP pointe sous la pile (la case mémoire en dessous de la base de la pile) car il n'y a pas de case occupée. Un POP provoquera alors une erreur...

Déclarer une pile

Pour pouvoir utiliser une pile, il faut la déclarer, c'est-à-dire réserver un espace mémoire pour son utilisation, puis initialiser les registres avec les valeurs correspondant à la base de la pile, ainsi que son sommet (rappel : situé sous la pile lorsque celle-ci est vide).

Ainsi pour définir une pile il s'agit tout d'abord de la déclarer grâce à la directive SEGMENT stack.

Suite aux déclarations, il faut écrire une séquence d'initialisation :

ASSUME SS:segment_pile

MOV  AX, segment_pile
MOV  SS, AX		; initialise le segment de pile
MOV  SP, base_pile ; copie l'adresse de la base de la pile dans SP

Il n'est pas possible de faire directement MOV SS, segment_pile car cette instruction n'existe pas !

Trucs & astuces pertinents trouvés dans la base de connaissances

09/08 10h14 Changer la pile de la carte mère (Carte-mère)
Pile assembleur Plus d'astuces sur « Pile assembleur »

Discussions pertinentes trouvées dans le forum

03/01 18h03 assembleur pile Assembleur Pile Développement 06/01 21h25->sam300020
13/01 20h19 assembleur adresse base pile [Assembleur] adresse de base de la pile Développement 13/01 20h19->iNDi0
16/04 23h02 exercices assembleur pile qui a des exercices sur assembleur ou pile Windows 16/04 23h02->inconnue0
06/12 13h20 pile rechageable dure logngtps pb de pile rechageable qui dure pas logngtps Windows 22/07 07h55->clolotte4223
16/12 12h01 pile neo simply key 1go ou est la pile dans le neo simply key 1go? Audio numérique 06/01 20h21->Elodie16
01/11 10h38 nouveau pc via assembleur écran bleu nouveau PC via un assembleur : bug écran bleu Matériel (hardware) 22/02 11h21->pakistador13
27/11 16h09 pile carte mere une pile sur carte mere!!! Matériel (hardware) 28/11 18h27->rendservice12
29/07 10h08 lecteur mp3 zicplay recharger pile [lecteur mp3 zicplay] - Recharger la pile Audio numérique 11/02 21h23->Floch11
08/11 14h09 prog assembleur faire un prog en assembleur Développement 25/01 13h28->mina11
26/09 18h51 changement pile setup [CHANGEMENT PILE SETUP ] MacOS 06/10 09h48->j.m.theuillon6
Discussion fermée Problème résolu Pile assembleur Plus de discussions sur « Pile assembleur »

Ce document intitulé « L'assembleur - Notions de pile » issu de l'encyclopédie informatique Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.