Académique Documents
Professionnel Documents
Culture Documents
TP N°3 : Programmation assembleur avec EMU8086 : IMUL, IDIV, INC, DEC, XCHG, NEG et LOOP
I. BUT DU TP
Se familiariser avec les registres du 8086 et certaines instructions de base
II. Registre indicateur d’état (AF) : Rappel
Le registre indicateur d’état est un registre à 16 bits. 9bits sont uniquement significatifs. 6 bits
représentent des indicateurs d’états (AF, CF, SE, ZF, PF et OF) et 3 bits de contrôles / indicateurs (TF,
DF et IF)
15 0
OF DF IF TF SF ZF AF PF CF
III. Utilisation des instructions : IMUL, IDIV, INC, DEC, XCHG, NEG et LOOP
IMUL : Multiplication entière
L’instruction IMUL réalise la multiplication signée de deux opérandes dont l’un est par défaut
AL (ou AX) l’autre est spécifié en instruction. IMUL possède mêmes formes MUL. Selon la
taille de l’opérande, deux cas sont possibles : multiplication sur l’octet ou sur 2 octets.
1. Sur 1 octets : IMUL opérande AX = AL × Opérande
2. Sur 2 octets : IMUL opérande DX, AX = AX × Opérande
Format : IMUL Opérande
Indicateurs :
OF DF IF TF SF ZF AF PF CF
M ? ? ? ? M
Exemple :
MOV AL, 12h AL = 12h
MOV BL, 85h BL = 85h
IMUL BL AX = AL × BL = Ca2 ((12h) × Ca2 (85h)) = F75Ah
MOV CX, 1256h CX = 1256h
IMUL CX DX, AX = AX × CX = F75Ah × 1256h
= Ca2 (Ca2 (F75Ah) × (1256h)) = FF616C3C
AX = 6C3Ch, DX = FF61h
INC : Incrémentation
L’instruction INC augmente de 1 le contenue d’un registre ou d’une adresse mémoire, deux
formes sont possibles :
INC Reg
INC Mem
Format : INC opérande
Signification : opérande = opérande + 1
Indicateurs : les 6 indicateurs sont affectés
OF DF IF TF SF ZF AF PF CF
M M M M M M
Exemple :
MOV AL, 12h AL = 12h
INC AL AL = AL + 1 = 12h + 1 = 13h
INC [SI] [DS : SI] = [DS : SI] + 1
DEC : Décrémentation
Décrément de 1 le contenue de l’opérande de destination, DEC admet un seul opérande.
Possède mêmes formes qu’INC
2
Format : DEC opérande
Signification : opérande = opérande – 1
Indicateurs : les 6 indicateurs sont affectés
OF DF IF TF SF ZF AF PF CF
M M M M M M
Exemple :
MOV AL, 12h AL = 12h
DEC AL AL = AL - 1 = 12h - 1 = 11h
XCHG : Echange
Réalise l’opération d’échange le contenu de :
- Deux registres
- Registre avec adresse mémoire.
Format : XCHG destination, source
Exemple :
MOV AX, 1A00h AX = 1A00h
MOV BX, 05h BX = 05h
XCHG AX, BX AX = 05h et BX= 1A00h
Avant Après
1A 00 00 05
AH AL AH AL
00 05 1A 00
BH BL BH BL
NEG : Négative
Réalise l’opération de négation le contenu de de la destination :
- Remplacer le contenu par le complément à 2
Format : NEG destination
Exemple :
MOV BX, 0002h BX = 0002h
NEG BX BX= FFFEh
Avant Après
BX 0002 FFFE
3
Electronique :
ADD BX, 3h BX = BX + 3h
LOOP Electronique répétez la ‘loop’ jusqu’à CX = 0
IV. Exercice :
Ecrire un programme pour additionner 5 à BX 5 fois avec BX = 80h
Donnez des exemples sur les instructions : IMUL, INC, DEC et XCHG
Ecrire un programme assembleur qui permet d’échange le contenu de deux registres.
Utilisez l’emu8086 pour écrire un programme pour double le registre AX (avec : AX = 80h),
stocker le résultat sur l’extra segment.
On souhaite calculer 5*10 sans utilisation de la commande MUL ?
Utilisant l’emu8086, calculer la somme de 45+12-48+18.
Calculer la somme 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13.
Convertir l’équation mathématique suivante en language assembleur :
Z = X2 + X - 5 avec X = 10h
Donner votre conclusion