Télécharger la présentation
1
Système d’exploitation : Assembleur
Semaine 11 La pile
2
La pile (ou Stack) (1/8) Zone de mémoire utilisée comme zone de travail Sauvegarde temporaire d’information (par exemple : contenu d’un registre, valeur des indicateurs, adresse, …) Utilisée par CALL (procédures), INT, ... Réservation de la pile à l’aide de la directive .STACK (opérande: taille de la pile, en octets) Exemple : .STACK 100h (256 octets dans le Stack Segment) .STACK (Pas d’opérande, réservation de 1 Ko) La pile fonctionne comme une pile d’assiettes : dernier entré, premier sorti. (LIFO = Last In First Out) Attention : la pile fonctionne de haut en bas. Les informations sont donc stockées dans la mémoire de la partie haute vers la partie basse (≠ data, ≠ code : de bas en haut).
3
La pile (ou Stack) (2/8) Registre pointeur associé au fonctionnement de la pile : SP (Stack Pointer = pointeur de pile) Au chargement du programme, il reçoit la taille de la pile Exemple : si .STACK 100h alors SP = 0100 si .STACK alors SP = 0400 SP POINTE AU-DESSUS DE LA PILE ! Registre de segment associé au fonctionnement de la pile : SS (Stack Segment = segment de pile) Au chargement du programme, il reçoit le n° de paragraphe de chargement de la pile. Quelles opérations peut-on effectuer sur la pile ? déposer une donnée sur la pile : PUSH retirer une donnée sur la pile : POP
4
La pile (ou Stack) (3/8) Fonctionnement des instructions PUSH et POP
Attention : Les mots déposés sur la pile doivent être retirés en sens inverse ! A B B A
5
La pile (ou Stack) (4/8) L’instruction PUSH
Place une donnée de 2 octets sur le sommet de la pile Utilisation : PUSH reg (16) PUSH mem (16) Exemples : PUSH AX PUSH DS PUSH ES:[3] PUSH [3] (rappel : DS est le segment de données par défaut !) Fonctionnement : SP est décrémenté de 2 et ensuite l’opérande source est placée dans le stack segment à l’adresse effective contenue dans SP. c’est-à-dire sub SP,2 mov BP,SP mov [BP], source où source est un registre ou une mémoire
6
La pile (ou Stack) (5/8) L’instruction POP
Va chercher dans la pile 2 octets au sommet de la pile Utilisation : POP reg (16) POP mem (16) Exemples : POP AX POP DS POP ES:[3] POP [3] (rappel : DS est le segment de données par défaut !) Fonctionnement : Le mot dans SS à l’adresse effective SP est transféré dans l’opérande destination et ensuite SP est incrémenté de 2 . c’est-à-dire mov BP,SP mov dest, [BP] où dest est un registre ou une mémoire add SP,2
7
La pile (ou Stack) (6/8) Exemple d’utilisation 1: inverser le contenu de AX et BX push ax mov ax, bx pop bx Exemple d’utilisation 2: calcul de la somme des 300 premiers entiers sans tableau .model small .stack 600 .code mov bx, ; bx reçoit la somme des 300 nombres mov ax,1 mov cx,300 charge : push ax ; chargement des 300 entiers dans la pile inc ax loop charge somme : pop ax add bx,ax loop somme mov ah,4ch ; le résultat est dans bx int 21h end
8
La pile (ou Stack) (7/8) Exemple d’utilisation 3 : sauvegarde de données quand pas de registres disponibles registre particulier utilisé remplissage d’un tableau de 5 lignes et 3 colonnes avec les 15 premiers entiers (nb : utilisation de boucles imbriquées) .model small .data tab db 5 dup(3 dup(?)) ;tableau de 5 lignes et 3 colonnes .stack 2 .code mov mov ds,ax lea bx,tab ; ou mov bx,offset tab mov al,1 mov cx,5 xor di,di boucle_ext : push cx mov cx,3 boucle_int : mov [bx][di],al inc al inc di loop boucle_int pop cx loop boucle_ext mov ah,4ch int 21h end
9
La pile (ou Stack) (8/8) L’instruction PUSHF L’instruction POPF
Empile le registre des indicateurs d’état. Les indicateurs d’état ne sont pas modifiés par l’opération. Utilisation : PUSHF (pas d’opérande) L’instruction POPF Retire le mot situé au sommet de la pile et le copie dans le registre des indicateurs d’état. Les indicateurs sont tous affectés par cette opération. Utilisation : POPF (pas d’opérande)
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.