1 / 9

Système d’exploitation : Assembleur

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

axelle
Download Presentation

Système d’exploitation : Assembleur

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 movdest, [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 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

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

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

More Related