Upload
axelle
View
36
Download
0
Embed Size (px)
DESCRIPTION
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 , ... - PowerPoint PPT Presentation
Citation preview
Système d’exploitation : Assembleur
Semaine 11La 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 AXPUSH DSPUSH 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,SPmov [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 AXPOP DSPOP 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,SPmov dest, [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 axmov ax, bxpop bx
• Exemple d’utilisation 2: calcul de la somme des 300 premiers entiers sans tableau .model small
.stack 600
.codemov bx,0 ; bx reçoit la somme des 300 nombresmov ax,1mov cx,300
charge : push ax ; chargement des 300 entiers dans la pileinc axloop chargemov cx,300
somme : pop axadd bx,axloop sommemov ah,4ch ; le résultat est dans bxint 21hend
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
.datatab db 5 dup(3 dup(?))
;tableau de 5 lignes et 3 colonnes
.stack 2
.codemov ax,@datamov ds,axlea bx,tab
; ou mov bx,offset tabmov al,1mov cx,5xor di,di
boucle_ext : push cxmov cx,3
boucle_int : mov [bx][di],alinc al
inc diloop boucle_intpop cxloop boucle_extmov ah,4ch int 21h
end
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)