90 likes | 213 Views
Système d’exploitation : Assembleur. Semaine 11 La pile. 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 , ...
E N D
Système d’exploitation : Assembleur Semaine 11 La pile
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).
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
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
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
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 movdest, [BP] où dest est un registre ou une mémoire add SP,2
La pile (ou Stack) (6/8) • Exemple d’utilisation 1: inverser le contenu de AX et BX push ax movax, bx pop bx • Exemple d’utilisation 2: calcul de la somme des 300 premiers entiers sans tableau .model small .stack 600 .code movbx,0 ; bx reçoit la somme des 300 nombres movax,1 movcx,300 charge : push ax; chargement des 300 entiers dans la pile incax loop charge movcx,300 somme : pop ax addbx,ax loop somme mov ah,4ch ; le résultat est dans bx int 21h end
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 movax,@data movds,ax leabx,tab ; ou movbx,offset tab mov al,1 movcx,5 xordi,di boucle_ext : push cx movcx,3 boucle_int :mov [bx][di],al inc al inc di loopboucle_int pop cx loopboucle_ext mov ah,4ch int 21h end La pile (ou Stack) (7/8)
La pile (ou Stack) (8/8) • L’instruction PUSHF • 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)