10
Système d’exploitation : Assembleur Semaine 12 Les procédures

Système d’exploitation : Assembleur

  • Upload
    ashanti

  • View
    41

  • Download
    0

Embed Size (px)

DESCRIPTION

Système d’exploitation : Assembleur. Semaine 12 Les procédures. Les procédures (1/9). Blocs d’instructions permettant de réaliser un traitement spécifique. - PowerPoint PPT Presentation

Citation preview

Page 1: Système d’exploitation : Assembleur

Système d’exploitation : Assembleur

Semaine 12Les procédures

Page 2: Système d’exploitation : Assembleur

Les procédures (1/9)• Blocs d’instructions permettant de réaliser un traitement spécifique.

• Les procédures permettent de découper un programme en modules distincts qui pourront être appelés depuis n’importe quel point du programme.

• 2 étapes dans l’écriture d’une procédure :la DECLARATION et l’APPEL

• DECLARATION d’une procédure :Forme générale : nom PROC

……RET

nom ENDP ; end of procedureoù nom est le label (c’est le nom de la procédure)

PROC est l’instruction qui indique le début de la procédure nomENDP est l’instruction qui indique la fin de la procédure nomRET est l’instruction qui rend la main au programme appelant

Page 3: Système d’exploitation : Assembleur

Les procédures (2/9)• APPEL d’une procédure

– Forme générale : CALL nom où CALL est l’instruction qui permet d’exécuter une procédure

nom est le nom de la procédureCALL va réaliser : 1) un PUSH

2) une modification de IP• FONCTIONNEMENT

– L’instruction CALL provoque le dépôt automatique sur la pile (c.à.d. un PUSH) de l’adresse de retour, c.à.d. l’adresse de l’instruction qui suit CALL en mémoire.

– Appel intra-segment : seul IP est empilé :

– Appel inter-segment : CS et IP sont empilés :

avant après

A A

BB

IPSP

SP

avant après

A A

B

IP

B

CS

SP

SP

Page 4: Système d’exploitation : Assembleur

Les procédures (3/9)• FONCTIONNEMENT (suite)

– L’instruction RET met fin à l’exécution de la procédure et provoque l’exécution de l’instruction dont l’adresse se trouve sur la pile (c.à.d. l’adresse de retour qui fut empilée par le CALL).

– RET effectue donc un POP qui vient charger IP (cas d’un appel intra-segment) ou CS et IP (cas d‘un appel inter-segment).

– Rem importante : Etant donné que l’utilisation des procédures nécessite le passage par la pile, ne pas oublier

d’utiliser la directive .STACK !!

• TYPE D’UNE PROCEDURE– Le type de la procédure (NEAR ou FAR) est donné en argument de PROC

Exemple : nom PROC NEAR

– Si le type n’est pas indiqué, le type est en accord avec le .model NEAR pour “small” et “compact” ;FAR pour “medium”, ”large” et “huge”.Avec NEAR, seul IP est empilé.Avec FAR, CS et IP sont empilés.

– Si le type par défaut ne convient pas, utiliser NEAR ou FAR

Page 5: Système d’exploitation : Assembleur

Les procédures (4/9)• PASSAGE DE PARAMETRES A UNE PROCEDURE

– Il existe plusieurs manières de passer des paramètres à une procédure :• par les registres

Le plus rapide, mais nombre limité de registres.• par la pile :

il suffit d’empiler avant le CALL.le paramètre peut être une valeur ou une adresse (= un pointeur).La procédure peut alors faire varier la valeur de la variable en utilisant le pointeur.Le registre BP (Base Pointer - lié à SS) sera utilisé pour accéder aux paramètres

situés dans la pile.

• PASSAGE DES PARAMETRES EN LANGAGE C– Lors de l’appel à une fonction, le programme appelant empile lui-même les paramètres à passer à la

fonction et dépile les paramètres de retour.

Page 6: Système d’exploitation : Assembleur

Les procédures (5/9)• REGLE DE BONNE PRATIQUE

– La procédure commencera par une zone de commentaires :• nom PROC

;==================================================;; Indiquer brièvement ici ce que fait la procédure ;; ;; Paramètres d’entrée : ;; Paramètres de sortie : ;;==================================================;

• EXEMPLE 1 : procédure qui met à FFFF les registres ax,bx,cx,dx.model small.stack.codecall proc1mov ah,4chint 21h

proc1 proc ; mise à FFFF de 4 registres ; paramètres d’entrée : aucun ; paramètres de sortie : aucun

mov ax,0FFFFhmov bx,0FFFFhmov cx,0FFFFhmov dx,0FFFFhret

proc1 endpend

Page 7: Système d’exploitation : Assembleur

Les procédures (6/9)• EXEMPLE 2 : calcul de la somme de 2 nombres passés comme paramètres en

utilisant les registres AX et BX (passage par valeur)..model small.stack.data

a dw 1234hb dw 5678h

.codemov ax,@datamov ds,axmov ax, amov bx, b call sommemov ah,4ch

int 21hsomme proc ; calcul de la somme de 2 nombres ; paramètres d’entrée : les opérandes en AX et BX ; paramètres de sortie : le résultat dans AX

add ax,bxret

somme endpend

Page 8: Système d’exploitation : Assembleur

Les procédures (7/9)• EXEMPLE 3 :

– Somme de 2 nombres passés comme paramètres en utilisant les registres SI, DI et BX (passage par adresse).

.model small

.stack

.dataa dw 1234hb dw 5678hresult dw ?

.codemov ax,@datamov ds,axmov si,offset amov di,offset b mov bx,offset resultcall sommemov ah,4chint 21h

somme proc ; calcul de la somme de 2 nombres ; paramètres d’entrée : adresse des opérandes en SI et DI ; paramètres de sortie : Résultat à l’adresse pointée par BX ; (c.à.d. dans result) mov ax,[si]

add ax,[di]mov [bx],axret

somme endpend

Remarque: :Etant donné que AX est utilisé dans la procédure, si la valeur de AX avait été importante pour la suite du programme, AX aurait été sauvé sur la pile avant le CALL (en utilisant PUSH AX)

Page 9: Système d’exploitation : Assembleur

Les procédures (8/9)• EXEMPLE 4 :

– calcul de la somme de 2 nombres (16 bits) passés comme paramètres en utilisant la pile.

.model small

.stack

.dataa dw 1234hb dw 5678hresult dw ?

.codemov ax,@datamov ds,axpush resultpush b ; passage despush a ; paramètrescall sommepop apop bpop resultmov ah,4chint 21h

somme proc ; calcul de la somme de 2 nombres ; paramètres d’entrée : les opérandes a et b dans la pile ; paramètres de sortie : le résultat dans la pile push bp ; sauve bp

mov bp,spmov ax,[bp+4]add ax, [bp+6]mov [bp+8],axpop bp ; récupère bpret

somme endpend

Page 10: Système d’exploitation : Assembleur

Les procédures (9/9)• EXEMPLE 4 (suite): Que se passe-t-il dans la pile ?

RESULTSP : 0A

SP : 02

SP : 04

SP : 06

SP : 08RESULT RESULT RESULT

B B B

A A

IP

Début .CODE Après PUSH RESULT Après PUSH B Après PUSH A Après CALL

SP : 00

RESULT

B

A

IPSP : 02

RESULT

B

A

IPSP : 04

RESULT

B

ASP : 06

RESULT

B

BP ...

Après PUSH BP Après POP BP Après RET Après POP A