Vous êtes sur la page 1sur 4

Centre Universitaire de Tipaza/ST/2éme Licence Electronique/TP Mesures Electriques et Electronique

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

 Carry Flag (CF)


Cet indicateur est positionné à 1 si un retenu est suite à une opération arithmétique. Dans le cas
des opérations de décalage et de rotation le bit sortant de l’opérande est placé dans l’indicateur de
retenu.
 Zero Flag (ZF)
L’indicateur est positionné à 1 si l’instruction engendre un résultat nul et positionné à 0 si le
résultat est positif.
 Sign Flag (SF)
L’indicateur SF est positionné à 1 si l’instruction engendre un résultat négatif et positionner à 0
si le résultat est positif.
 Overflow Flag (OF)
L’indicateur OF est positionné à 1 si un débordement a eu lieu, un débordement est traduit par le
fait que le résultat dépasse (ou déborde) de l’intervalle de représentation considéré.
 Auxiliary Flag (AF)
L’indicateur AF est positionné à 1 lorsqu’un débordement non signé a lieu sur les 4 bits de poids
faible (c’est le retenu généré à partir du poids 3 vers le bit de poids 4).
 Interrupt enable Flag (IF)
Lorsque cet indicateur est à 1, le processeur répond à la demande d’interruption des périphériques
externes et à 0 ses interruptions externes sont bloquées.
 Direction Flag (DF)
Cet indicateur est utilisé par quelques instructions de traitement de chaines de caractères lorsque
ce drapeau est placé à 0, la chaîne est traitée octet par octet (de la gauche vers la droite) en
incrémentant SI et DI, lorsque ce drapeau est positionné à 1, la chaîne est traitée octet par octet (de
la gauche vers la droite) en décrémentant SI et DI

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

 IDIV : Division signée


L’instruction IDIV réalise la division non signée de deux opérandes dont l’un est par défaut
AX (ou DX, AX) l’autre est spécifié en instruction. IDIV possède mêmes formes que DIV.
Selon la taille de l’opérande, deux cas sont possibles : division sur l’octet ou sur 2 octets.
3. Sur 1 octets : IDIV opérande AX / Opérande AL = quotient, AH = Reste
4. Sur 2 octets : IDIV opérande DX, AX / Opérande AX = quotient, DX = Reste
 Format : IDIV Opérande
 Indicateurs :
OF DF IF TF SF ZF AF PF CF
? ? ? ? ? ?
 Remarque :
Si une division par zéro est tentée, une interruption est produite. Le quotient et le reste sont
dans ce cas, non définis.
 Exemple :
MOV AX, 1345h AX = 1345h
MOV BL, 85h BL = 85h
IDIV BL AX / BL = 1345h / 85h 1345h / Ca2 (85h)
AL = CAh, AH = 13h
MOV DX, 02B6h DX = 02B6h
MOV CX, 9256h CX = 9256h
IDIV CX DX, AX / CX = 02B613CAh / 9256h
AX = F9ACh, DX = 1C02h

 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

0000 0000 0000 0010 = 2


1111 1111 1111 1101 = C. à 1
1111 1111 1111 1110 = C. à 2 = FFFE
 LOOP :
Réduisez CX, passez à l’étiquette si CX pas zéro.
 Format : LOOP nom (de votre choix)
 Exemple :
MOV CX, 3
MOV BX, 2h BX = 0002h

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

Vous aimerez peut-être aussi