Vous êtes sur la page 1sur 16

Ministère de l’Enseignement Supérieur, de la Recherche Scientifique

et des Technologies de l’Information et de la Communication


Université de Carthage
Institut Supérieur des Technologies de l’Information et de la Communication
Plan
de Borj Cedria
1. Introduction
2. Les instructions de transfert + Types d’adressage
SYSTÈMES INFORMATIQUES ET ASSEMBLEUR 3. Les instructions arithmétiques
4. Les instructions logiques
Chapitre 6
5. Les instructions de branchement
La Programmation en Assembleur du saut inconditionnel
sauts conditionnels
Microprocesseur 8086 appel de sous-programmes (procédure)

1ière LA Informatique Industrielle

2015 - 2016 Mr. Hassène Gritli Mme. Wafa Fourati 2

1. Introduction 1. Introduction

Chaque microprocesseur reconnait un ensemble d’instructions appelé jeu Une instruction est définie par son code opératoire, valeur numérique
d’instructions (Instruction Set) fixé par le constructeur. binaire difficile à manipuler par l’être humain.

On utilise donc une notation symbolique pour représenter les


Pour les microprocesseurs classiques, le nombre d’instructions reconnues
instructions : les mnémoniques.
varie entre 75 et 150 (microprocesseurs CISC : Complex Instruction Set
Computer). Un programme constitué de mnémoniques est appelé programme en
assembleur.
Ilexiste aussi des microprocesseurs dont le nombre d’instructions est très
Les instructions peuvent être classées en groupes :
réduit (microprocesseurs RISC : Reduced Instruction Set Computer) : entre
Instructions de transfert de données ;
10 et 30 instructions, permettant d’améliorer le temps d’exécution des
programmes. Instructions arithmétiques ;

Instructions logiques ;
Instructions de branchement ;
3 ... 4
2. Les instructions de transfert 2. Les instructions de transfert + Mode d’adressage

Elles permettent de déplacer des données d’une source vers une Adressage par registre :
destination : mov ax,bx : charge le contenu du registre BX dans le registre AX. Dans
registre vers mémoire ; ce cas, le transfert se fait de registre à registre.
registre vers registre ; 
Adressage immédiat :
mémoire vers registre. mov al,12H : charge le registre AL avec la valeur 12H. La donnée est

Remarque : le microprocesseur 8086 n’autorise pas les transferts de fournie immédiatement avec l’instruction. De plus, mov tabl[adr],val_im
mémoire vers mémoire (pour ce faire, il faut passer par un registre Exemples :
intermédiaire). MOV AX, 243 : charger le registre AX par le nombre décimal 243
Syntaxe : MOV destination , source ADD AX, 243h : additionner le registre AX avec le nombre hexadécimal 243
MOV AX, 0xA243 : Quand le chiffre de gauche du nombre hexadécimal est une
Remarque : MOV est l’abbréviation du verbe « to move » : déplacer. lettre, il est préférable d'utiliser le préfix 0x pour l'hexadécimal
MOV AX, 'a' : Charger le registre AH par 00 et le registre AL par le code ASCII
Ilexiste différentes façons de spécifier l’adresse d’une case mémoire du caractère 'a'
dans une instruction : ce sont les modes d’adressage.
5 MOV AX,'ab' : Charger AH par 'a' et AL par 'b' 6

2. Les instructions de transfert + Mode d’adressage 2. Les instructions de transfert + Mode d’adressage

Remarque : Dans le cas de l’adressage immédiat de la mémoire, il faut 


Adressage direct :
indiquer le format de la donnée : octet ou mot (2 octets) car le mov bl,[1200H] : transfère le contenu de la case mémoire d’adresse
microprocesseur 8086 peut manipuler des données sur 8 bits ou 16 bits. effective (offset) 1200H vers le registre BL. L’instruction comporte
Pour cela, on doit utiliser un spécificateur de format : l’adresse de la case mémoire où se trouve la donnée. L’adresse
mov byte ptr [1100H],65H : transfère la valeur 65H (sur 1 octet) effective représente l’offset de la case mémoire dans le segment de
dans la case mémoire d’offset 1100H ; données : segment par défaut.
mov word ptr [1100H],65H : transfère la valeur 0065H (sur 2 octets)
dans les cases mémoire d’offset 1100H et 1101H.

7 8
2. Les instructions de transfert + Mode d’adressage 2. Les instructions de transfert + Mode d’adressage


Adressage direct : 
Adressage direct :
mov bl,[1200H] : transfère le contenu de la case mémoire d’adresse On peut changer le segment lors d’un adressage direct en ajoutant un
effective (offset) 1200H vers le registre BL. L’instruction comporte préfixe de segment, exemple : mov bl,es:[1200H]. On parle alors de
l’adresse de la case mémoire où se trouve la donnée. L’adresse forçage de segment.
effective représente l’offset de la case mémoire dans le segment de
données : segment par défaut.

On trouve aussi l’instruction : mov table[adr] , val_im

Exemples :
MOV AX,[243] : Copier le contenu de la mémoire d'adresse DS:243 dans AX
MOV [123H],AX : Copier le contenu de AX dan la mémoire d'adresse DS:123h
MOV AX, [SS:243H] : Copier le contenu de la mémoire SS:243h dans AX
9 10

2. Les instructions de transfert + Mode d’adressage 2. Les instructions de transfert + Mode d’adressage


Adressage indirect : 
Adressage indirect :
Un des deux opérandes se trouve en mémoire. L’offset de l’adresse
n’est pas précisé directement dans l'instruction, il se trouve dans l’un Exemples :
des 4 registres d’offset BX, BP, SI ou DI et c’est le registre qui sera MOV AX, [BX] ; Charger AX par le contenu de la mémoire d'adresse DS:BX
précisé dans l’instruction : [Rseg : Roff]. Si Rseg n'est pas spécifié, le MOV AX, [BP] ; Charger AX par le contenu de la mémoire d'adresse SS:BP
segment par défaut sera utilisé. MOV AX, [SI] ; Charger AX par le contenu de la mémoire d'adresse DS:SI
MOV AX, [DI] ; Charger AX par le contenu de la mémoire d'adresse DS:DI
INST R , [Rseg : Roff] MOV AX, [ES:BP] ; Charger AX par le contenu de la mémoire d'adresse ES:BP
INST [Rseg : Roff] , R MOV [DI],AX ; Charger la mémoire d'adresse DS:DI par le contenu de AX
INST table [Rseg : Roff] , im MOV [BX],5h ; Charger la mémoire d'adresse DS:BX par la valeur 5h

Remarque : L’adressage indirect est divisé en 3 catégories selon le registre


d’offset utilisé. On distingue ainsi, l’adressage Basé, l’adressage indexé et
l’adressage basé indexé.
11 12
2. Les instructions de transfert + Mode d’adressage 2. Les instructions de transfert + Mode d’adressage


Adressage basé : 
Adressage basé :
l’offsetest contenu dans un registre de base BX ou BP. On peut
préciser un déplacement qui sera ajouté au contenu de Roff pour
déterminer l’offset.
INST R , [Rseg : Rb+dep]
INST [Rseg : Rb+dep] , R
INST Table [Rseg : Rb+dep] , im

Exemples :
mov al,[bx] : transfère la donnée dont l’offset est contenu dans le
Autres exemples possibles :
registre de base BX vers le registre AL. Le segment associé par
MOV AX, [BX] : Charger AX par le contenu de la mémoire d'adresse DS:BX
défaut au registre BX est le segment de données : on dit que
l’adressage est basé sur DS; MOV AX, [BX+5] : Charger AX par le contenu de la mémoire d'adresse DS:BX+5

mov al,[bp] : le segment par défaut associé au registre de base BP


MOV AX, [BP-200] : Charger AX par le contenu de la mémoire d'adresse SS:BX-200
est le segment de pile. Dans ce cas, l’adressage est basé sur SS. 13 MOV AX, [ES:BP] : Charger AX par le contenu de la mémoire d'adresse ES:BP 14

2. Les instructions de transfert + Mode d’adressage 2. Les instructions de transfert + Mode d’adressage

 Adressage indexé :  Adressage indexé :


Semblable à l’adressage basé, sauf que l’offset est contenu dans un Remarque :
registre d’index SI ou DI, associés par défaut au registre DS.
Les modes d’adressage basés ou indexés permettent la manipulation de
Exemples : tableaux rangés en mémoire. Exemple :
mov al,[si] : charge le registre AL avec le contenu de la case mémoire dont mov si,0
l’offset est contenu dans SI ; mov word ptr table[si],1234H
mov [di],bx : charge les cases mémoire d’offset DI et DI + 1 avec le contenu mov si,2
du registre BX. mov word ptr table[si],5678H
Exemples :
MOV AX, [SI] ; Charger AX par le contenu de la mémoire d'adresse DS:SI Dans cet exemple, table représente
MOV AX, [SI+500] ; Charger AX par la mémoire d'adresse DS:SI+500 l’offset du premier élément du
tableau et le registre SI joue le
MOV AX, [DI-8] ; Charger AX par la mémoire d'adresse DS:DI-8
rôle d’indice de tableau :
MOV AX, [ES:SI+4] ; Charger AX par la mémoire d'adresse ES:SI+4
mov [si+100H],ax == mov [si][100H],ax == mov 100H[si],ax 15 16
2. Les instructions de transfert + Mode d’adressage 2. Les instructions de transfert + Mode d’adressage


Adressage basé et indexé : 
Adressage basé et indexé :
l’offset de l’adresse de l'opérande est obtenu en faisant la somme d’un
registre de base, d’un registre d’index et d’une valeur constante.
Exemples :
MOV AX,[BX+SI] ; AX est chargé par la mémoire d'adresse DS:BX+SI
Exemple : MOV AX,[BX+DI+5] ; AX est chargé par la mémoire d'adresse DS:BX+DI+5
mov ah,[bx+si+100H] MOV AX,[BP+SI-8] ; AX est chargé par la mémoire d'adresse SS:BP+SI-8
MOV AX,[BP+DI] ; AX est chargé par la mémoire d'adresse SS:BP+DI
Exemples :
MOV AX,[BX+SI] ; AX est chargé par la mémoire d'adresse DS:BX+SI
MOV AX,[BX+DI+5] ; AX est chargé par la mémoire d'adresse DS:BX+DI+5
MOV AX,[BP+SI-8] ; AX est chargé par la mémoire d'adresse SS:BP+SI-8
MOV AX,[BP+DI] ; AX est chargé par la mémoire d'adresse SS:BP+DI

17 18

2. Les instructions de transfert pour la pile 2. Les instructions de transfert pour la pile

 Instruction PUSH : PUSH Op Exemple :


Empiler l’opérande Op (Op doit être un opérande de 16 bits) push ax ; empilage du registre AX ...
 Décrémente SP de 2 push bx ; ... du registre BX ...
 Copie Op dans la mémoire pointée par SP
push [1100H] ; ... et de la case mémoire 1100H-1101H
PUSH R16 ; R16=Registre sur 16 bits
PUSH word [adr] ...
PUSH Val_Immédiate PUSH R8 pop [1100H] ; dépilage dans l’ordre inverse de l’empilage
pop bx
 Instruction POP : POP Op pop ax
Dépiler dans l’opérande Op (Op doit être un opérande 16 bits)
 Copie les deux cases mémoire pointée par SP dans l'opérande Op
 Incrémente SP de 2
POP R16
POP word M POP R8 19 20
2. Les instructions de transfert pour la pile 2. Les instructions de transfert pour la pile

Exemple : L'exemple suivant illustre plusieurs situations : Exemple : L'exemple suivant illustre plusieurs situations :

(a) Situation de la pile après empilement des registres AX, BX et CX


(b) Situation de la pile après empilement du registre DX
(c) Situation de la pile après un dépilement. On remarquera que DX reste dans la
mémoire mais s'il ne fait plus partie de la pile. La pile s'arrête à son sommet qui est
pointé par le pointeur de pile.
(d) Situation de la pile après empilement du registre BP. On remarque que la
21 valeur BP écrase la valeur DX dans la mémoire. 22

2. Les instructions de transfert pour la pile 3. Les instructions arithmétiques

Instruction PUSHA : PUSHA Les instructions arithmétiques de base sont l’addition, la soustraction, la
Empile tous les registres généraux et d’adressage dans l'ordre suivant :
multiplication et la division qui incluent diverses variantes. Plusieurs
modes d’adressage sont possibles.
AX, CX, DX, BX, SP, BP, SI, DI
Instruction POPA : POPA 
Addition : ADD opérande1,opérande2
Dépile tous les registres généraux et d’adressage dans l'ordre inverse de L’opération effectuée est :
PUSHA afin que chaque registre retrouve sa valeur. La valeur dépilée de SP est
ignorée.
opérande1 ← opérande1 + opérande2.

Remarque : Les deux instructions PUSHA et POPA ne sont pas reconnues par le Exemples :
8086. Elles ont été introduites à partir du 80186. add ah,[1100H] : ajoute le contenu de la case mémoire d’offset
1100H à l’accumulateur AH (adressage direct) ;
Instruction XCHG : XCHG OD , OS
add ah,[bx] : ajoute le contenu de la case mémoire pointée par BX à
Echange l‘Opérande Source avec l‘Opérande Destination. Impossible sur segment. l’accumulateur AH (adressage basé) ;
XCHG Reg1 , Reg2 XCHG R , [adr]
add byte ptr [1200H],05H : ajoute la valeur 05H au contenu de la
XCHG [adr] , Reg XCHG [ ] , [ ] 23 case mémoire d’offset 1200H (adressage immédiat). 24
3. Les instructions arithmétiques 3. Les instructions arithmétiques


Soustraction : SUB opérande1,opérande2 
Multiplication : MUL opérande, où opérande est un registre ou une case
L’opération effectuée est : mémoire.
opérande1 ← opérande1 - opérande2. Exemples : Exemples :
mov al,51 mov al,43

Multiplication : MUL opérande, où opérande est un registre ou une case
mov bl,32 mov byte ptr [1200H],28
mémoire.
mul bl mul byte ptr [1200H]
AX ← AL x Op8 DX:AX ← AX x Op16
→ AX = 51 × 32 → AX = 43 × 28
Cette instruction effectue la multiplication du contenu de AL par un opérande
mov ax,4253 mov ax,1234
sur 1 octet ou du contenu de AX par un opérande sur 2 octets.
mov bx,1689 mov word ptr [1200H],5678
Le résultat est placé dans AX si les données à multiplier sont sur 1 octet
(résultat sur 16 bits), dans (DX,AX) si elles sont sur 2 octets (résultat sur 32 bits). mul bx mul word ptr [1200H]
Les drapeaux CF et OF sont positionnés si la partie haute du résultat est non → (DX, AX) = 4253 × 1689 → (DX, AX) = 1234 × 5678
nulle. La partie haute est AH pour la multiplication 8 bits et DX pour la
multiplication 16 bits
25 26

3. Les instructions arithmétiques 3. Les instructions arithmétiques


Division : DIV opérande, où opérande est un registre ou une case 
Division : DIV opérande, où opérande est un registre ou une case
mémoire. mémoire.
Cette instruction effectue la division du contenu de AX par un
opérande sur 1 octet ou le contenu de (DX,AX) par un opérande sur
2 octets. Exemples :
mov ax,35
Résultat : si l’opérande est sur 1 octet, alors AL = quotient et AH =
reste ; si l’opérande est sur 2 octets, alors AX = quotient et DX = mov bl,10
reste. div bl
→ AL = 3 (quotient) et AH = 5 (reste)
mov dx,0
DIV Op8 ;AX/Op8 , Quotient → AL , Reste → AH
mov ax,1234
DIV Seg16 ;DX:AX/Seg16 , Quotient → AX , Reste → DX
mov bx,10
div bx
27 → AX = 123 (quotient) et DX = 4 (reste) 28
3. Les instructions arithmétiques 4. Les instructions logiques


Autres instructions arithmétiques : Ce sont des instructions qui permettent de manipuler des données au
ADC : addition avec retenue ; Opd + Ops + C Opd
 niveau des bits. Les opérations logiques de base sont :
SBB : soustraction avec retenue ; Opd - Ops - C Opd ET;
INC : incrémentation d’une unité ; Op + 1 Op OU;
OU exclusif ;
DEC : décrémentation d’une unité ; Op - 1 Op
complément à 1;
IMUL : multiplication signée ;
complément à 2;
IDIV : division signée.
décalages et rotations.
Remarque : Attention, l’indicateur C n’est pas positionné quand il y a
débordement, C'est l’indicateur Z qui permet de détecter le débordement Les différents modes d’adressage sont disponibles.
Pour incrémenter une case mémoire, il faut préciser la taille :
INC byte [ ]
INC word [ ] 29 30

4. Les instructions logiques 4. Les instructions logiques


ET logique : AND opérande1,opérande2 
OU logique : OR opérande1,opérande2
L’opération effectuée est : L’opération effectuée est :
opérande1 ← opérande1 ET opérande2 opérande1 ← opérande1 OU opérande2

Exemple : Application : mise à 1 d’un ou plusieurs bits dans un mot.


mov al,10010110B Exemple : dans le mot 10110001B on veut mettre à 1 les bits 1 et 3
mov bl,11001101B → sans modifier les autres bits.
and al, bl

Application : masquage de bits


pour mettre à zéro certains bits Les instructions correspondantes peuvent s’´écrire :
dans un mot. mov ah,10110001B
Exemple : masquage des bits 0,
or ah,00001010B
1, 6 et 7 dans un octet : 31 32
4. Les instructions logiques 4. Les instructions logiques


OU exclusif : XOR opérande1, opérande2

Complément à 1 : NOT opérande
L’opération effectuée est : opérande ← opérande
L’opération effectuée est : opérande1 ← opérande1 ⊕ opérande2
Exemple : Exemple : mise à zéro d’un registre :
mov al,10010001B mov al,25
not al → xor al,al →


Complément à 2 : NEG opérande  Instructions de décalages et de rotations :
L’opération effectuée est : opérande ← opérande + 1 Ces instructions déplacent d’un certain nombre de positions les bits d’un mot
Exemple : vers la gauche ou vers la droite.
mov al,25 Dans les décalages, les bits qui sont déplacés sont remplacés par des
mov bl,12 → zéros. Il y a les décalages logiques (opérations non signées) et les
décalages arithmétiques (opérations signées).
neg bl
Dans les rotations, les bits déplacés dans un sens sont réinjectés de l’autre
add al,bl
33 côté du mot. 34

4. Les instructions logiques 4. Les instructions logiques

 Instructions de décalages et de rotations :  Instructions de décalages et de rotations :



Décalage logique vers la droite (Shift Right) : SHR opérande,n 
Décalage logique vers la gauche (Shift Left) : SHL opérande,n
Cette instruction décale l’opérande de n positions vers la droite. Cette instruction décale l’opérande de n positions vers la gauches.
Exemple : Exemple :
mov al,11001011B mov al,11001011B
shr al,1 shl al,1

→ entrée d’un 0 à la place du bit de poids fort ; le bit sortant passe à travers
l’indicateur de retenue CF. → entrée d’un 0 à la place du bit de poids faible ; le bit sortant passe à
travers l’indicateur de retenue CF.
Remarque : si le nombre de bits à décaler est supérieur à 1, ce nombre doit
être placé dans le registre CL ou CX. Remarque : Même remarque que précédemment si le nombre de positions à
Exemple : décalage de AL de trois positions vers la droite : décaler est supérieur à 1.
mov cl,3
shr al,cl 35 36
4. Les instructions logiques 4. Les instructions logiques

 Instructions de décalages et de rotations :  Applications des instructions de décalage :


Décalage arithmétique vers la droite : SAR opérande,n  Cadrage à droite d’un groupe de bits.
Ce décalage conserve le bit de signe bien que celui-ci soit décalé. Exemple : on veut avoir la valeur du quartet de poids fort du registre AL :
Exemple : mov al,11001011B
mov al,11001011B mov cl,4 →
shr al,cl
sar al,1

 Test de l’état d’un bit dans un mot.


Exemple : on veut déterminer l’état du bit 5 de AL :
→ le bit de signe est réinjecté. mov cl,6 mov cl,3
shr al,cl shl al,cl
→ avec un décalage de 6 positions vers la droite ou 4 positions vers la
Décalage arithmétique vers la gauche : SHR opérande,n gauche, le bit 5 de AL est transféré dans l’indicateur de retenue CF. Il suffit
Identique au décalage logique vers la gauche. donc de tester cet indicateur.
37 38

4. Les instructions logiques 4. Les instructions logiques

 Applications des instructions de décalage :  Instructions de décalages et de rotations :


Multiplication ou division par une puissance de 2 Rotation à droite (Rotate Right) : ROR opérande,n
Un décalage à droite revient à faire une division par 2 et un décalage à Cette instruction décale l’opérande de n positions vers la droite et réinjecte
gauche, une multiplication par 2. par la gauche les bits sortant.

Exemple : Exemple :
mov al,48 mov al,11001011B
ror al,1
mov cl,3 →
shr al,cl

→ Réinjection du bit sortant qui est copié dans l’indicateur de retenue CF.

39 40
4. Les instructions logiques 4. Les instructions logiques

 Instructions de décalages et de rotations :  Instructions de décalages et de rotations :



Rotation à gauche (Rotate Left) : ROL opérande,n 
Rotation à droite avec passage par l’indicateur de retenue (Rotate Right
Cette instruction décale l’opérande de n positions vers la gauche et réinjecte through Carry) : RCR opérande,n
par la droite les bits sortant. Cette instruction décale l’opérande de n positions vers la droite en passant par
l’indicateur de retenue CF.
Exemple :
mov al,11001011B Exemple :
rol al,1 mov al,11001011B
rcr al,1

→ Réinjection du bit sortant qui est copié dans l’indicateur de retenue CF.
→ le bit sortant par la droite est copié dans l’indicateur de retenue CF et la
valeur précédente de CF est réinjectée par la gauche.

41 42

4. Les instructions logiques 5. Les instructions de branchement

 Instructions de décalages et de rotations : Les instructions de branchement (ou saut) permettent de modifier l’ordre
 Rotation à gauche avec passage par l’indicateur de retenue (Rotate Left d’exécution des instructions du programme en fonction de certaines
through Carry) : RCL opérande,n conditions.
Cette instruction décale l’opérande de n positions vers la gauche en passant
par l’indicateur de retenue CF. Il existe 3 types de saut :
saut inconditionnel ;
Exemple :
mov al,11001011B
sauts conditionnels ;
rcl al,1 appel de sous-programmes.

→ le bit sortant par la gauche est copié dans l’indicateur de retenue CF et la


valeur précédente de CF est réinjectée par la droite.

43 44
5. Les instructions de branchement 5. Les instructions de branchement

Instruction de saut inconditionnel : JMP label Instruction de sauts conditionnels : Jcondition label
Cette instruction effectue un saut (jump) vers le label spécifié. Un label (ou Un saut conditionnel n’est exécuté que si une certaine condition est satisfaite,
étiquette) est une représentation symbolique d’une instruction en mémoire : sinon l’exécution se poursuit séquentiellement à l’instruction suivante.
La condition du saut porte sur l’état de l’un (ou plusieurs) des indicateurs d’état
(flags) du microprocesseur :
Instruction Nom Condition
JZ label Jump if Zero saut si ZF = 1
JNZ label Jump if Not Zero saut si ZF = 0
JE label Jump if Equal saut si ZF = 1
Exemple : JNE label Jump if Not Equal saut si ZF = 0
boucle : inc ax JC label Jump if Carry saut si CF = 1
dec bx → boucle infinie JNC label Jump if Not Carry saut si CF = 0
jmp boucle JS label Jump if Sign saut si SF = 1
JNS label Jump if Not Sign saut si SF = 0
Remarque : l’instruction JMP ajoute au registre IP (pointeur d’instruction) le JO label Jump if Overflow saut si OF = 1
nombre d’octets (distance) qui sépare l’instruction de saut de sa destination. JNO label Jump if Not Overflow saut si OF = 0
Pour un saut en arrière, la distance est négative (codée en complément à 2). 45 JP label Jump if Parity saut si PF = 1 46

5. Les instructions de branchement 5. Les instructions de branchement

Instruction de sauts conditionnels : Jcondition label Instruction de sauts conditionnels : Jcondition label
Condition Nombres signés Nombres non signés
Remarque : les indicateurs sont positionnés en fonction du résultat de la
dernière opération. = JEQ label JEQ label
> JG label JA label
< JL label JB label
≠ JNE label JNE label

Exemple :
cmp ax,bx
Remarque : il existe un autre type de saut conditionnel, les sauts arithmétiques. jg superieur
Ils suivent en général l’instruction de comparaison : jl inferieur
CMP opérande1,opérande2 superieur : . . .
.....
inferieur : . . .
47 48
5. Les instructions de branchement 5. Les instructions de branchement

Instruction de sauts conditionnels : Jcondition label


Exemple d’application des instructions de sauts conditionnels :
on veut additionner deux nombres signés N1 et N2 se trouvant
respectivement aux offsets 1100H et 1101H. Le résultat est rangé à
l’offset 1102H s’il est positif, à l’offset 1103H s’il est négatif et à
l’offset 1104H s’il est nul :

49 50

5. Les instructions de branchement 5. Les instructions de branchement


Appel de sous-programmes (procédures) : 
Appel de sous-programmes (procédures) :
Pour éviter la répétition d’une même séquence d’instructions plusieurs Remarque : une procédure peut être de type NEAR si elle se trouve dans
fois dans un programme, on rédige la séquence une seule fois en lui le même segment ou de type FAR si elle se trouve dans un autre segment.
attribuant un nom (au choix) et on l’appelle lorsqu’on en a besoin.
Exemple :
Le programme appelant est le programme principal. La séquence
ss_prog1 PROC NEAR
appelée est un sous-programme ou procédure. ss_prog2 PROC FAR

Ecriture d’un sous-programme : Appel d’un sous-programme par le programme principal : CALL procédure

51 52
5. Les instructions de branchement 5. Les instructions de branchement


Appel de sous-programmes (procédures) : 
Appel de sous-programmes (procédures) :
Lors de l’exécution de l’instruction CALL, le pointeur d’instruction IP est Avant de charger IP avec l’adresse du sous-programme, l’adresse de
chargé avec l’adresse de la première instruction du sous-programme. retour au programme principal, c’est-à-dire le contenu de IP, est
Lors du retour au programme appelant, l’instruction suivant le CALL doit sauvegardée dans la pile.
être exécutée, c’est-à-dire que IP doit être rechargé avec l’adresse de  Lors de l’exécution de l’instruction RET, cette adresse est récupérée à
cette instruction. partir de la pile et rechargée dans IP, ainsi le programme appelant
peut se poursuivre.

Fonctionnement de la pile : la pile est une zone mémoire fonctionnant


en mode LIFO (Last In First Out : dernier entré, premier sorti).
Deux opérations sont possibles sur la pile :
empiler une donnée : placer la donnée au sommet de la pile ;
dépiler une donnée : lire la donnée se trouvant au sommet de la
53 pile. 54

5. Les instructions de branchement 5. Les instructions de branchement


Appel de sous-programmes (procédures) : 
Appel de sous-programmes (procédures) :
Le sommet de la pile est repéré par un registre appelé pointeur de pile Lors de l’appel à un sous-programme, l’adresse de retour au programme
(SP : Stack Pointer) qui contient l’adresse de la dernière donnée appelant (contenu de IP) est empilée et le pointeur de pile SP est
empilée. automatiquement décrémenté.
Au retour du sous-programme, le pointeur d’instruction IP est rechargé avec la
La pile est définie dans le segment de pile dont l’adresse de départ est
valeur contenue sommet de la pile et SP est incrémenté.
contenue dans le registre SS.
Remarque : la valeur de SP doit être initialisée par le programme principal
avant de pouvoir utiliser la pile.

55 56
5. Les instructions de branchement 5. Les instructions de branchement


Appel de sous-programmes (procédures) : 
Appel de sous-programmes (procédures) :
En général, une procédure effectue un traitement sur des données Exemple avec passage par registre : Il consiste a transmettre les
(paramètres) qui sont fournies par le programme appelant, et produit un paramètres dans des registres choisies à l’avance.
résultat qui est transmis à ce programme. Exemple : procédure somme dont ses entiers sont passés par Ax et BX et le
résultat dans Ax.
Plusieurs stratégies peuvent être employées :
Var1 dw (14) somme Proc near
Passage par registre : les valeurs des paramètres sont contenues dans var2 dw (26) add ax,bx
des registres du processeur. C'est une méthode simple, mais qui ne res dw (?) RET
convient que si le nombre de paramètres est petit (il y a peu de mov ax, var1 somme ENDP
registres). mov Bx, var2
Passage par la pile : les valeurs des paramètres sont empilées. La CALL somme
procédure lit la pile. mov res, ax
mov ah, 4ch
int 21
57 58

5. Les instructions de branchement 5. Les instructions de branchement


Appel de sous-programmes (procédures) : 
Appel de sous-programmes (procédures) :
Exemple avec passage par la pile : pour transmettre des paramètres à  programme principal :
mov ax,200
une procédure, on peut les placer sur la pile avant l’appel de la
push ax ; empilage du premier paramètre
procédure, puis celle-ci les récupère en effectuant un adressage basé de mov ax,300
la pile en utilisant le registre BP. push ax ; empilage du deuxième paramètre
call somme ; appel de la procédure somme
Int 20h
Exemple : soit une procédure effectuant la somme de deux nombres et
retournant le résultat dans le registre AX :  procédure somme :
somme proc near
push bp ; sauvegarde de BP
mov bp,sp ; faire pointer BP sur le sommet de la pile
mov ax,[bp+4] ; récupération du deuxième paramètre
add ax,[bp+6] ; addition au premier paramètre
pop bp ; restauration de l’ancienne valeur de BP
ret 4 ; retour et dépilage des paramètres
59 60
somme endp
5. Les instructions de branchement 5. Les instructions de branchement


Appel de sous-programmes (procédures) : 
Appel de sous-programmes (procédures) :
Remarque : L’instruction ret 4 permet de retourner au programme principal Exercice : Faire un programme qui affiche 12 fois “Bonjour LF Sys Inf”.
et d’incrémenter le pointeur de pile de 4 unités pour dépiler les
paramètres afin de remettre la pile dans son état initial.

61 62

5. Les instructions de branchement


Appel de sous-programmes (procédures) :

63

Vous aimerez peut-être aussi