Académique Documents
Professionnel Documents
Culture Documents
Introduction
Le langage Assembleur est un langage de programmation bas niveau.
Son fonctionnement est trs proche du langage machine.
L'avantage du langage assembleur est de pouvoir grer jusqu'au
moindre octet de mmoire et de toujours savoir quel code est
excut par le microprocesseur un instant donn.
L'assembleur a aussi l'avantage d'tre rapide et extrmement lger.
L'assembleur est un terme qui peut dsigner deux choses. Avant
d'tre un langage informatique, c'est un programme qui permet de
recrer des fichiers excutables partir de fichier source.
Introduction
Une instruction est dfinie par son code opratoire, valeur
numrique binaire difficile manipuler par ltre humain.
On utilise donc une notation symbolique pour reprsenter les
instructions : les mnmoniques.
Un programme constitu de mnmoniques est appel programme
en assembleur.
Un programme en assembleur contient aussi des directives.
Mode Immdiat
Un oprande est donn en immdiat s'il constitue lui mme la
valeur.
La donne est spcifie immdiatement aprs linstruction.
Elle est donc situe dans le segment de code.
Exemple: MOV SI,1240h
SI est charg par la valeur immdiate 1240h (SI 1240h).
Remarque: Ce type de transfert est interdit avec les registres de
segmentation (DS, CS, SS, ES).
Mode Registre
L'oprande est dsign par le contenu d'un registre.
Exemple:
MOV AX,DX
Mode direct
Un oprande est donn en mode direct s'il est dsign par son
adresse effective dans la mmoire.
Exemple 1: MOV [1200h],5Ah
La valeur 5Ah sera stocke l'adresse effective 1200h.
Pour calculer son adresse physique, il faut connatre la valeur stocke
dans le registre de segmentation DS (Si DS = 720h),
l'adresse physique sera :
Adresse physique = (720h 10h) + 1200h = 08400h
Mode direct
Exemple 2: MOV [1200h], 4D59h
4D59h est une donne sur 16 bits, elle occupera les deux octets d'adresse
effective 1200h et 1201h.
Si DS = 720h, la rpercussion de cette instruction sur la mmoire sera:
0720:1200
0720:1201
59h
4Dh
Remarque
Dans le cas de ladressage immdiat de la mmoire, il faut indiquer le
format de la donne : octet ou mot (2 octets) car le microprocesseur
8086 peut manipuler des donnes sur 8 bits ou 16 bits.
Pour cela, on doit utiliser un spcificateur de format :
MOV byte ptr [1100H],65H
Cette instruction transfre la valeur 65H (sur 1 octet) dans la case
mmoire doffset 1100H ;
MOV word ptr [1100H],65H
Cette instruction transfre la valeur 0065H (sur 2 octets) dans les
cases mmoire doffset 1100H et 1101H.
Modes indirect
Ladresse effective est le contenu dun registre de base (BX ou BP) ou
index (Dl ou SI) ou la combinaison des deux.
Il existe trois types dadressage indirect :
Le mode indirect bas (registres de base),
Le mode indirect index (registres index),
Le mode indirect bas-index (registres de base et dindex).
Mode indirect
Exemple 2:
Soit : BP = F415h ; SS = 0784h ; AX = 76E4h
MOV [BP]7Ah,AL
Autre criture : MOV [BP+7Ah],AL
La valeur 7Ah est un dplacement constant sur 8 bits.
Ce dplacement est ajout au contenu de BP pour former l'adresse
effective.
L'adresse effective : F415h + 7Ah = F48Fh
L'adresse physique : F48Fh + (10h 0784h) = 16CCFh
L'octet d'adresse 16CCFh recevra la valeur E4h (contenu de AL).
Cet octet appartient videmment la pile (registre SS).
Exemple
Ecrire un programme en assembleur 8086 qui permet de :
Charger la valeur 100H dans le registre AX.
Charger la valeur 205H dans le registre BX.
Permuter les valeurs des registres AX et BX.
Solution 1 :
mov ax,100h
mov bx,205H
mov cx,ax
mov ax,bx
mov bx,cx
Exemple
Solution 2 :
mov ax,100h
mov bx,205H
xchg ax,bx
Exercice 1
Indiquer le mode dadressage pour chacune des instructions
suivantes :
MOV AX, BX
MOV CX, 1234H
MOV [1000H], CX
registre et mmoire ;
registre et registre ;
mmoire et registre ;
Registre / mmoire et immdiat.
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
Exemples :
registre et mmoire ;
registre et registre ;
mmoire et registre ;
Registre / mmoire et immdiat.
Indicateurs affects :
OF DF IF TF SF ZF
AF
Exemples :
PF
CF
INC (Incrmentation)
Syntaxe : INC oprande
Lopration effectue est :
oprande1 oprande + 1.
Oprandes autoriss :
registre (8 ou 16 bits) ;
mmoire.
Indicateurs affects :
OF DF IF TF SF ZF
Exemples :
INC DI ; (DIDI + 1)
AF
PF
CF
registre et mmoire ;
registre et registre ;
mmoire et registre ;
Registre / mmoire et immdiat.
Indicateurs affects :
OF DF IF TF SF ZF
Exemples :
AF
PF
CF
registre et mmoire ;
registre et registre ;
mmoire et registre ;
Registre / mmoire et immdiat.
Indicateurs affects :
OF DF IF TF SF ZF
Exemples :
AF
PF
CF
DEC (Dcrmentation)
Syntaxe : DEC oprande
Lopration effectue est :
oprande oprande - 1.
Oprandes autoriss :
registre (8 ou 16 bits) ;
mmoire.
Indicateurs affects :
OF DF IF TF SF ZF
Exemples :
DEC SI ; (SISI - 1)
AF
PF
CF
MUL (Multiplication)
Syntaxe : MUL oprande
Lopration effectue est :
Oprandes autoriss :
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
Dans le cas dune multiplication sur 16 bits les indicateurs ne sont pas affects.
Exemples :
Exemple 2 :
MOV BX, -435
MOV AX, 2372
IMUL BX
A lissue de lexcution de ces 3
instructions, AX contient la valeur
4174 et DX la valeur FFF0, soit la
valeur -1031820, le produit de -435
par 2372.
Oprandes autoriss :
Indicateurs affects :
DIV :
IDIV :
OF DF IF TF SF ZF
AF
PF
CF
OF DF IF TF SF ZF
AF
PF
CF
Dans le cas dune division sur 16 bits les indicateurs ne sont pas affects.
Exemple 2 :
MOV BX, FFFEh
MOV AX, 2372H
MOV DX, 0172H
IDIV BX
A lissue de lexcution de ces 4
instructions, AX contient la valeur
2372H et DX la valeur 0172H.
Un oprande est considr comme un
nombre ngatif si le bit du poids le
plus fort est 1 (bit signe).
NEG (Complment 2)
Syntaxe : NEG oprande
Lopration effectue est :
oprande oprande + .
Oprandes autoriss :
Registre ;
Mmoire.
Indicateurs affects :
OF DF IF TF SF ZF
Exemple :
AF
PF
CF
Exercice 2
Soit les nombres a, b et c stocks en mmoire tel que :
a est stock ladresse 100H.
b est stock ladresse 101H.
c est stock ladresse 102H.
Registre et registre;
Registre et mmoire.
Mmoire et registre.
Registre et immdiat.
Mmoire et immdiat.
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
10010110
11001101
10000100
OR (OU logique)
Syntaxe : OR oprande1, oprande2
Lopration effectue est :
oprande1 oprande1 OU oprande2.
Oprandes autoriss :
Registre et registre;
Registre et mmoire.
Mmoire et registre.
Registre et immdiat.
Mmoire et immdiat.
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
OR (OU logique)
Exemple :
mov al,10010110B
mov bl,11001101B
or al, bl
10010110
11001101
11011111
Registre et registre;
Registre et mmoire.
Mmoire et registre.
Registre et immdiat.
Mmoire et immdiat.
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
10010110
11001101
01011011
NOT (Complment 1)
Syntaxe : NOT oprande
Lopration effectue est :
oprande oprande.
Oprandes autoriss :
Registre ;
Mmoire.
Indicateurs affects :
OF DF IF TF SF ZF
Exemple :
AF
PF
CF
Registre et 1 ;
Registre et CL ;
Mmoire et 1 ;
Mmoire et CL.
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
Remarque :
si le nombre de bits dcaler est suprieur 1, ce nombre doit tre
plac dans le registre CL.
Registre et 1 ;
Registre et CL ;
Mmoire et 1 ;
Mmoire et CL.
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
Remarque :
si le nombre de bits dcaler est suprieur 1, ce nombre doit tre
plac dans le registre CL.
Un dcalage gauche est quivalent une multiplication par 2.
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
Remarque :
Si le nombre de bits dcaler est suprieur 1, ce nombre doit tre
plac dans le registre CL.
CF
0
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
CF
X
Avant linstruction :
1Ch
13h
55h
SS:SP
FEh
22h
4Ah
98h
1Ch
13h
55h
SS:SP-2
Donne dj
empile
25h
12h
4Ah
98h
SS:SP
1Ch
13h
55h
39h
58h
4Ah
98h
Aprs linstruction :
Sommet de
la pile
SS:SP + 2
1Ch
13h
55h
39h
58h
4Ah
98h
CMP (Comparaison)
Syntaxe : CMP oprande1, oprande2
Soustrait l'oprande 2 de l'oprande 1.
Positionne les indicateurs en fonction du rsultat qui n'est pas
stock.
Oprandes autoriss :
Registre et registre;
Registre et mmoire.
Mmoire et registre.
Registre / Mmoire et immdiat.
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
Registre et registre;
Registre et mmoire.
Mmoire et registre.
Registre / Mmoire et immdiat.
Indicateurs affects :
OF DF IF TF SF ZF
AF
PF
CF
Signification
Jump If Carry
Jump If Not Carry
Jump If Zero
Jump If Not Zero
Jump If Parity
Jump If Not Parity
Jump If Parity Even
Jump If Parity Odd
Jump If Overflow
Jump If Not Overflow
Jump If Sign
Jump If Not Sign
Condition
CF = 1
CF = 0
ZF = 1
ZF = 0
PF = 1
PF = 0
PF = 1
PF = 0
OF = 1
OF = 0
SF = 1
SF = 0
Signification
Jump If CX Register is Zero
Jump If Not Above
Jump If Not Below
Jump If Not Above nor Equal
Jump If Not Below nor Equal
Jump If Equal
Jump If Not Equal
Condition
(CF ou ZF) = 0
CF =1 ou ZF = 1
CF = 1
CF = 1
CF = 0 et ZF = 0
ZF = 1
ZF = 0
Signification
Jump If Above
Jump If Above or Equal
Jump If Below
Jump If Below or Equal
Jump If Greater
Jump If Greater or Equal
Jump If Not Greater
Jump If Not Greater nor Equal
Jump If Less
Jump If Less or Equal
Jump If Not Less
Jump If Not Less nor Equal
Condition
CF = 0 et ZF = 0
CF = 0
CF = 1
CF = 0 ou ZF = 0
ZF = 0 et SF = 0
SF = 0
((SF xor OF) ou ZF) = 1
(SF xor OF) = 1
(SF xor OF) = 1
((SF xor OF) ou ZF) = 1
SF = OF
ZF = 0 et SF = OF
Exercice 3
Ecrire un programme en Assembleur 8086 qui permet de :
Comparer les valeurs contenues dans les registres AL, BL et
CL pour trouver le minimum et le maximum de ces trois
valeurs.
Stocker le minimum en mmoire ladresse 100H.
Stocker le maximum en mmoire ladresse 200H.
Les boucles
Il nexiste pas de structure gnrale en assembleur pour coder
une boucle tant-que ou une boucle rpter.
Cependant, laide des instructions vues prcdemment pour
raliser des tests, on peut coder nimporte quel type de
boucle.
On verra galement que des instructions simplifient
grandement le codage des boucles pour (boucle for).
Principe gnral
Une boucle est essentiellement compose de deux lments :
Une condition de sortie qui indique quand la boucle doit tre
interrompue, quil faut sortir de la boucle et continuer
lexcution des instructions en squence.
Un corps de boucle qui spcifie laction raliser pendant que
la condition de sortie nest pas vrifie, chaque itration de
la boucle.
La condition de sortie va donc tre code dune manire
ressemblant aux tests.
Principe gnral
Un saut conditionnel testera cette condition et entranera,
quand la condition est vrifie, la sortie de la boucle.
Le corps de la boucle devra pour sa part (boucler),
cest--dire, une fois excut, entraner le rvaluation de la
condition de sortie
et la prise de dcision quant la poursuite ou non des
itrations.
Boucles tant-que
Le squelette dune boucle tant-que, dans un langage de haut niveau,
est le suivant :
TANT-QUE (condition) FAIRE
action
FIN_TQ
Boucles rpter
Le squelette dune boucle rpter, dans un langage de haut niveau,
est le suivant :
REPETER
action
JUSQUA (condition vraie)
Boucles pour
Une boucle pour est gnralement code laide dune instruction de
la famille LOOP.
Syntaxe : LOOP label
LOOP fonctionne avec le registre CX qui joue le rle de compteur de
boucles.
LOOP dcrmente le compteur Sans Modifier Aucun Des Indicateurs.
Si le compteur est diffrent de 0, un saut ltiquette oprande de
linstruction LOOP est ralis.
Le squelette dune boucle pour scrit de la manire suivante :
POUR indice = 0 bs FAIRE
Action
Fin pour
Boucles pour
Cependant, en assembleur, seules existent des boucles ayant un
indice qui est dcrment chaque itration.
Aussi, la boucle prcdente doit initialement tre transforme en une
boucle du type suivant :
POUR indice = bs 0, pas := -1 FAIRE
action
Fin pour
Exemple
Ecrire un programme en assembleur qui permet de transfrer les 100
octets de donnes situs ladresse 3000H vers ladresse 4000H.
Label:
Exemple
Le programme prcdent peut tre crit de la manire suivante :
Label:
Exercice 4
Ecrire un programme en Assembleur 8086 qui permet de
compter le nombre de bits 1 dans un tableau de 10 octets,
se trouvant en mmoire ladresse 200H.
Le rsultat sera stock dans un registre.
Exemple
Ecrire un programme en assembleur 8086 qui copie la chane Msg1
dans Msg2 (avec Msg1 = Hello).
Msg1 DB Hello
Msg2 DB ?
MOV SI, OFFSET Msg1
MOV DI, OFFSET Msg2
MOV CX, 5
REP MOVSB
HLT
Exemple
Ecrire un programme qui permet de vrifier si le caractre contenu
dans AL est une minuscule ou un majuscule.
Si cest une minuscule BL = 0, si non BL = 1.
Si ce nest ni minuscule ni majuscule BL = -1.