Vous êtes sur la page 1sur 3

Centre Universitaire de Tipaza/ST/2éme Licence Électronique/TP système à microprocesseurs

TP N°1 : Programmation assembleur avec EMU8086

I. BUT DU TP
Se familiariser avec les registres du 8086 et certaines instructions de base
II. Définition de l'assembleur
L'assembleur est un language de programmation transformant un fichier texte contenant des
instructions, en un programme que le processeur peut comprendre (programme en language machine).
Ce language machine a la particularité d'être difficile à programmer car il n'est composé que de
nombres en hexadécimal.

III. Présentation d’EMU8086


EMU8086 est un émulateur du microprocesseur 8086 (compatible Intel et AMD). Dans un premier
temps, nous allons utiliser EMU8086 pour consulter/modifier les registres, pour afficher/modifier le
contenu de la mémoire et enfin pour éditer/exécuter des programmes élémentaires.
Les instructions peuvent être exécutées en arrière et en avant. L'interface visuelle est très facile à
utiliser. Vous pouvez regarder les registres, les drapeaux et la mémoire pendant l'exécution de votre
programme.
a. Registres sur 8086 :
 8 registres généraux (16bits) : ax, bx, cx, dx, si, di, bp et sp
 4 registres de segments (16bits) : cs, ds, es et ss
 2 registres spéciaux (16bits) : ip et flags
b. Décomposition des registres :
Les registres A, B, C et D se décomposent en deux sous registres de 8 bits chacun :
 H (partie haute) et L (partie basse). AH AL
AX
 Par exemple, AX se compose en AH et AL
15 87 0
La figure 1 est une photographie prise de la carte de développement de processeur 8086. Cette carte
de développement possède :
Plusieurs interfaces : parallèles et séries,
Un convertisseur analogique numérique,
un convertisseur numérique analogique,
des périphériques d’entrée sortie : écran LCD 2 X 16 caractères et un clavier à 25 touches,
des pins à usage générales avec lesquelles il est possible d’interfacer différents genres de
périphériques.

Figure 1 : Carte de développement 8086.


c. Instructions de base :
 MOV : transfert d’information
L'instruction la plus utilisée est l'instruction mov, qui copie la valeur d'un opérande source
dans un opérande destination.
 Format : MOV destination, source
Cinq formes sont possibles :
mov reg, reg reg : registre
mov reg, mem mem : adresse mémoire,
mov mem, reg
mov reg, immed immed : valeur immédiat (binaire, décimale, hexadécimal),
mov mem, immed
Notez qu'il n'existe à pas de transfert de mémoire à mémoire.
 Exemple :
mov AX, 1h AX = 1h
mov ax, bx ax = bx
mov AL, [BX] AL= le contenu de l’adresse mémoire pointée par DS :BX,

Opérations arithmétiques :
 ADD : Addition
Réalise l’opération d’addition standard, possède les mêmes formes possibles que MOV
 Format : ADD destination, source
 Signification : destination = destination + source
 Exemple :
mov AL, 12h AL = 12h
mov BL, 35h BL = 35h
ADD AL, BL AL = AL + BL = 12h + 35h = 47h
ADD AL, [BX] AL = AL + [DS :BX]

 SUB : Soustraction
Soustrait l’opérande source de l’opérande destination, le résultat est stocké dans l’opérande
de destination. Possède les mêmes formes que l’instruction MOV
 Format : SUB destination, source
 Signification : destination = destination - source
 Exemple :
mov AL, 12h AL = 12h
mov BL, 35h BL = 35h
SUB AL, BL AL = AL - BL = 12h - 35h = DDH
SUB BL, 56h BL = BL -56h = 35h - 56h = DFH
SUB CX, [SI] CX = CX - [DS :SI]

 MUL : Multiplication non signée


L’instruction MUL réalise la multiplication non signée de deux opérandes dont l’un est par
défaut AL (ou AX) l’autre est spécifié en instruction. MUL possède mêmes formes qu’INC.
Selon la taille de l’opérande, deux cas sont possibles : multiplication sur l’octet ou sur 2 octets.
1. Sur 1 octets : MUL opérande AX = AL × Opérande
2. Sur 2 octets : MUL opérande DX, AX = AX × Opérande
 Format : MUL Opérande
2
 Exemple :
MOV AL, 12h AL = 12h
MOV BL, 35h BL = 35h
MUL BL AX = AL × BL = 12h × 35h = 3BAh
MOV CX, 1256h CX = 1256h
MUL CX DX, AX = AX × CX = 3BAh × 1256h
AX = 547Ch , DX = 0044h

 DIV : Division non signée


L’instruction DIV 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. DIV possède mêmes formes qu’INC.
Selon la taille de l’opérande, deux cas sont possibles : division sur l’octet ou sur 2 octets.
3. Sur 1 octets : DIV opérande AX / Opérande AL = quotient, AH = Reste
4. Sur 2 octets : DIV opérande DX, AX / Opérande AX = quotient, DX =
Reste
 Format : DIV Opérande
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
DIV BL AX / BL = 1345h / 85h AL= 25h, AH= 0Ch
MOV DX, 02B6h DX = 02B6h
MOV CX, 9256h CX = 9256h
DIV CX DX, AX / CX = 02B60C25h / 9256h
AX = 04BEh, DX = 1851h

IV. Exercice :
 MOV ax, 1h
 mov al, 1h
 mov ax, 1000h
 mov AH, 10h
 MOV bx, 1234h
 Utiliser l’emu8086 pour écrire un programme permettant d'additionner deux nombres de votre
choix.
 Utilisez l’emu8086 pour écrire un programme de soustraction de deux registres, stocker le
résultat sur le data segment
 Écrire un programme de multiplication de deux registres, stocker le résultat sur le registre DX
 Écrire un programme de division de deux registres,
 Convertir les équations mathématiques suivantes en language assembleur :
Z=X–Y+5 avec X = 4h ; Y = 1 h
Z=X+Y+3 avec X = 2h ; Y = 1 h
 Écrire un programme pour additionner 5 à BX 5 fois avec BX = 80h
 Donner votre conclusion

Vous aimerez peut-être aussi