Système d’exploitation : Assembleur

9
Système d’exploitation : Assembleur Semaine 11 La pile

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

Transcript of Système d’exploitation : Assembleur

Page 1: Système d’exploitation : Assembleur

Système d’exploitation : Assembleur

Semaine 11La pile

Page 2: Système d’exploitation : Assembleur

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).

Page 3: Système d’exploitation : Assembleur

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

Page 4: Système d’exploitation : Assembleur

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

Page 5: Système d’exploitation : Assembleur

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

Page 6: Système d’exploitation : Assembleur

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

Page 7: Système d’exploitation : Assembleur

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

Page 8: Système d’exploitation : Assembleur

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

Page 9: Système d’exploitation : Assembleur

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)