Institut Supérieur d’Informatique L1IRS 2021-2022
TP2 : Initiation avec emu8086
Objectifs :
- Ecrire et de compiler des programmes en Assembleur via emu8086.
- Exécuter les instructions pas à pas sur l’Emulateur 8086 (ce qui nous permet de surveiller les
registres, les indicateurs et la mémoire pendant l'exécution de notre programme).
- Maitriser les instructions de base du microprocesseur 8086, les notions d’opérations
arithmétiques, adressage en mémoire.
I. Introduction au langage Assembleur :
Contrairement aux langages évolués, l'assembleur, ou « langage d'assemblage » est constitué
d'instructions directement compréhensibles par le microprocesseur : c'est ce qu'on appelle un langage
de bas niveau. Il est donc intimement lié au fonctionnement de la machine. C'est pourquoi il est
relativement difficile à assimiler, en tout cas beaucoup plus que les langages de haut niveau. Cela
explique également pourquoi il existe au moins autant de langages d'assemblage que de modèles de
microprocesseurs.
1
Institut Supérieur d’Informatique L1IRS 2021-2022
I.1 Les registres du microprocesseur 8086
Les registres décrits ci-dessous sont les registres du 8086, l'ancêtre des processeurs qui sont au cœur
de nos PC actuels. Ces processeurs ont évolué depuis tout en restant compatibles avec leur
ancêtre (compatibilité ascendante). Cette description devrait donc suffire se faire une idée de
la structure d'un microprocesseur .
Registres de données
AX, BX, CX et DX
Ce sont des registres 16 bits du 8086, ils peuvent chacun être scindés pour y entreposer deux
variables d'un octet. Ainsi, le registre 16 bits AX peut être considéré comme l'adjonction de
deux registres 8 bits AH et AL (H =high, L =low)
Certaines instructions dédient ces registres à des rôles spécifiques :
AX "accumulator" l'accumulateur est privilégié pour certaines opérations arithmétiques ainsi que les
opérations d'entrée/sortie.
BX "base register" il est appelé registre de base car l'adressage en mémoire peut se faire par son
intermédiaire.
CX "count register" est implicitement le registre compteurs de boucles pour les instructions
répétitives. (CL pour les opérations de décalage)
DX "data register" sert dans certaines circonstances d'extension à l’accumulateur.
2
Institut Supérieur d’Informatique L1IRS 2021-2022
Registres d'adresses
Registres dits d'index : SI "Source index"
DI "Destination index"
Registres de base BP "Base pointer"
SP "Stack pointer"
Registres de segments
CS "Code Segment" = adresse de base pour le programme.
DS "Data Segment" = adresse de base pour les données.
ES "Extra Segment" = adresse de base pour d'autres données.
SS "Stack Segment" = adresse de base pour la pile.
Registre d'états
Ce registre contient les flags, ce sont des bits qui basculent d'un état à l'autre en fonction des
résultats de l'exécution d'opérations arithmétiques ou logiques.
- Le flag Carry passe à 1 si une addition donne lieu à un report.
- Le flag Signe passe à 1 si le bit le plus significatif du résultat vaut 1.
- Le flag Zero passe à 1 si le résultat de la dernière opération est nul.
- etc.
Ces flags servent entre autre aux instructions de sauts conditionnels.
L'instruction pointeur
IP Aussi appelé compteur ordinal est un registre qui s'incrémente sans cesse. Il contient en
permanence l'adresse de la prochaine instruction à exécuter . "Faire un saut" dans un
programme revient à inscrire dans le registre IP l'adresse de l'instruction où le programme
doit se rendre. L'incrémentation de l'Instruction Pointer reprend alors depuis cette nouvelle
valeur pour poursuivre la nouvelle séquence d'instructions.
3
Institut Supérieur d’Informatique L1IRS 2021-2022
I.2 Les modes d'adressage
Nous n'avons encore utilisé qu'une instruction, l'instruction MOV.
L'exemple ci-dessus illustre déjà le fait que les opérandes peuvent être spécifiées de
différentes manières. Ce sont les modes d'adressage.
MOV DS, AX Adressage de registres
la valeur du registre AX est recopiées dans le registre DS.
MOV CX, 4E41 Adressage immédiat
la valeur immédiate 4E41 est recopiée dans CX.
MOV [DI], CX Adresse en mémoire
[DI] mis entre crochets signifie "à l'adresse donnée par DI" (cette adresse est
l’offset à ajouter au segment de données).
L'instruction MOV attend deux opérandes, le premier indique la destination du déplacement
de la donnée, le second opérande indique la source.
La destination peut être un registre, une adresse mémoire ou un registre de segment (sauf pour le
registre CS qui ne peut jamais être une destination)
La source peut être un registre, une adresse mémoire, un registre de segment ou une valeur
immédiate.
Le tableau ci-dessous inventorie toutes les manières d'utiliser l'instruction MOV
MOV r1, r2 : r1 reçoit la valeur identique à celle contenue dans r2.
MOV r, i : Le registre r est initialisé avec une valeur immédiate.
MOV m, i : Ecriture d'une valeur immédiate en mémoire.
MOV r, m : Lecture en mémoire à l'adresse m en destination du registre r.
MOV m, r : Ecriture en mémoire à partir du registre r.
4
Institut Supérieur d’Informatique L1IRS 2021-2022
Echanges entre registres de segment et la mémoire.
MOV s, m Lecture: s := m
MOV m, s Ecriture: m := s
Echanges entre registres généraux et registres de segment
MOV s, r
MOV r, s
Dans cette liste les adresses 'm' sont spécifiées en plaçant une valeur de l'offset et/ou des
noms de registres entre crochets. Exemples : [2000] ; [BP] ; [BP+2000] ;
[SI] ; [BP+SI] ; [BP+SI+2000]
En fait, toutes les combinaisons ne sont pas acceptées ! Les combinaisons valides sont celles que
l'on forme en ne prenant pas plus d'un élément dans l'une des trois colonnes du tableau :
BX SI
BP DI Nombre
Autrement dit, il ne peut pas il y avoir simultanément dans une adresse 2 registres de base (dont le
nom commence par b) ni 2 registres d'index (dont nom se termine par i).
Il est parfois nécessaire de préciser la taille de la valeur à lire. On fait alors précéder l'adresse de la
donnée par BYTE PTR ou par WORD PTR selon que l'adresse désigne un ou deux octets.
I.3 Aperçu rapide de quelques autres instructions
Les instructions MOV nous ont été utiles pour illustrer les modes d'adressage mais avec les MOV
il nous est juste possible de déplacer les données d'un endroit à l'autre. Il nous faut d'autres
instructions pour faire des opérations arithmétiques et logiques, des sauts, des appels à des
fonctions, à des interruptions etc.
Voici donc d’autres instructions. La liste est loin d'être complète mais elle doit suffire pour se
faire une idée de ce que sont les instructions en général.
Opérations arithmétiques et logiques élémentaires : ADD SUB CMP AND TEST OR XOR
Modes d'adressage acceptés : r,m m,r r,r m,i et r,i
5
Institut Supérieur d’Informatique L1IRS 2021-2022
Multiplications et divisions : MUL IMUL DIV IDIV
Exemples : MUL BYTE PTR Valeur AX := AL x Valeur
MUL WORD PTR Valeur [Link] := AX x Valeur
DIV BYTE PTR Valeur AL := AX / Valeur
DIV WORD PTR Valeur AX := [Link] / Valeur
Incrémentation, décrémentation, inversion logique, négation : INC DEC NOT NEG
Appel d'un sous-programme : CALL label
Sauts inconditionnels JMP label
Sauts conditionnels JZ (=JE) JNZ ( = JNE) JC JNC JS JNS
6
Institut Supérieur d’Informatique L1IRS 2021-2022
II. Présentation du Logiciel emu8086
Emu8086 est l'émulateur 8086 (Intel et AMD compatibles) du microprocesseur et de l'assembleur
intégré. L'émulateur exécute des programmes comme le vrai microprocesseur en mode étape par
étape. Il montre les registres, la mémoire, la pile, des variables et les drapeaux. Toutes les valeurs de
mémoire peuvent être étudiées et édités par un double-clic. Les instructions peuvent être exécutées
en arrière et expédiées.
Les avantages de cet émulateur sont :
‒ Ecrire directement avec le langage assembleur directement et de convertir automatiquement en
langage machine.
‒ Le programme peut être exécuté pas à pas pour obtenir la position de l'erreur ou peut être exécuté
intégralement.
Débuter avec emu8086
1- Installer le logiciel emu8086 (Insérer les clés d’enregistrement User et Key à partir du fichier
8086RegistrationKey).
2- Ouvrir l’émulateur Emu 8086.
3- Choisir un nouveau document en cliquant sur New dans le menu affiché.
4- Ensuite, cliquer sur empty workspace dans la liste affichée afin d’avoir un document vide.
5- Saisir alors le code assembleur.
6- Emuler le code en cliquant sur emulate se trouvant sur la barre des taches principale.
7
Institut Supérieur d’Informatique L1IRS 2021-2022
7- Deux fenêtres s’afficheront. Une fenêtre (Original source code) contient le code qu’on vient
d’écrire. Une seconde fenêtre (emulator) qui nous permettra d’exécuter le code, de voir les
contenus des différents registres et beaucoup d’autres choses qu’on verra au fur et à mesure.
8- Exécuter le code écrit en cliquant sur run (Exécution totale) ou single step (Exécution pas à pas).
Indication
Après exécution, on aura la fenêtre suivante (fenêtre de l’émulateur), plusieurs informations sont
présentes : sur les registres, la mémoire, sur le programme …
Remarquer qu’il existe plusieurs lignes de codes qui se termine par HLT, et l’adresse
correspondante est 0101A. Ceci est simplement du au fait que le programme lui-même est stocké en
mémoire.
8
Institut Supérieur d’Informatique L1IRS 2021-2022
III. Travail Demandé :
Exercice 1 :
Ecrire le programme suivant sur Emu8086 et exécuter les instructions pas à pas.
mov al,5 ; Initialiser le registre AL avec la valeur 5
mov ah,60 ; Initialiser le registre AH avec la valeur 60
mov ax,0F067h ; Initialiser le registre AX avec la valeur F067h
mov bx,0B780h ; Initialiser le registre BX avec la valeur B780h
xchg bx,ax ; Echanger les valeurs AX et BX
add ax,bx ; Additionner AX et BX et mettre le résultat dans AX
Exercice 2 :
Initialiser les registres AL et BL avec les valeurs A5h et 10 respectivement. Trouver les résultats des
opérations suivantes en utilisant les instructions ADD, SUB, MUL et DIV.
‒ Addition arithmétique A5h+10.
‒ Soustraction A5h-10.
‒ Multiplication A5h*10.
‒ Division A5h/10.
Donner les résultats de chaque opération (registre AX) et expliquer les résultats obtenus.
Exercice 3 :
Donner le contenu final du registre AL suite à ces instructions.
1- 2- 3-
MOV AL, 39h MOV CL, 2 MOV CL, 2
INC AL MOV AL, 3Bh MOV AL, 3Bh
AL = … SHL AL, CL ROR AL, CL
AL = … AL = …
Expliquer les résultats obtenus.
Exercice 4 :
1) Réaliser le programme suivant :
‒ Stocker la valeur 6 dans le registre DL puis la valeur 9 dans le registre DH.
‒ Ranger le résultat (DX) dans le contenu de la case mémoire d’adresse d’offset 200h.
N.B Utiliser l’instruction MOV.
2) Visualiser à l’aide de « view » et puis « memory » le contenu de la case mémoire d’adresse offset
[0200h].