Filière : Génie Informatique (GI)- S1 Elément 2 : Ecole Supérieure de
Module : Architecture des ordinateurs Programmation Assembleur Technologie - Kenitra
Année universitaire : 2020/2021 Univ. Ibn Tofail
Travaux pratique
TP 1 : Premiers pas en programmation Assembleur 8086
1. Débuter avec Emu8086 :
1. Ouvrir l’émulateur emu8086. Choisir un nouveau document
2. Saisir, alors, le code assembleur suivant :
MOV AL, 10H
MOV AH, 09H
3. Emuler le code en cliquant sur emulate se trouvant sur la barre de taches principale.
4. Deux fenêtres s’afficheront :
Une fenêtre (Original souce 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 en fur et à
mesure.
5. Exécuter le code ainsi écrit en cliquant sur run.
1
6. Que remarquez-vous sur le contenu des différents registres ?
Après l’exécution de ce code on remarque que le registre AL est chargé
par 10 et AH par 09, les autres registres de travail sont restés a 0
(vides),les registres de segments( CS,SS,DS,ES) ont été chargés
aléatoirement par l’adresse segment 0100 et les registres d’adressage SP
contient toujours la valeur FFFE et les autres registres offset restent a
0000 .
7. Maintenant, sur la fenêtre emulator :
Cliquer sur reload afin de recharger le code (c.à.d : Le mettre à nouveau en mémoire
pour le ré-exécuter).
Puis cliquer plusieurs fois sur single step et remarquer à chaque fois les changements
dans les registres.
8. Donner les résultats dans le tableau suivant :
9. Quel est le rôle de single step ?
Single step permet d’exécuter le code instruction par instruction.
10. Enregistrer ce code sous le nom : monprog1.asm.
2
2. Manipulation des registres et de la mémoire :
1. Saisir, alors, le code assembleur suivant :
mov ax, 05h
mov [100], ax
2. Émuler le code en cliquant sur emulate se trouvant sur la barre de taches principale.
3. Exécuter le code ainsi écrit en cliquant sur run.
Run permet d’exécuter toutes les instructions une fois pour toutes.
4. Que remarquez-vous sur le contenu des différents registres ?
La plupart des registres ont gardé le même contenu du début (cad avant
l’exécution), sauf AL qui s’est chargé par 05H, les registres de segments
ont été chargé aléatoirement par 0100H et le registre de commande IP par
001A.
5. Que remarquez-vous sur la mémoire ?
Sur la mémoire on remarque une adresse physique composée de 5 chiffres
hexadécimaux, la valeur contenue dans chaque case mémoire en
hexadécimal (05) et puis son équivalent en décimal et en code ASCII.
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, le programme, …
Registres mémoire Programme
Adresse physique Hexadécimal Décimal Code ASCII
– Remarquer qu’il existe plusieurs lignes de codes qui se termine par HLT, et l’adresse
correspondante est 0101A. Ceci est simplement dû au fait que le programme lui-même est
stocké en mémoire.
3
6 – Taper maintenant 100 dans la zone indiquant l’adresse mémoire et appuyer sur entrée du
clavier.
7 – Observer maintenant la case correspondant à 01100 et compléter le tableau
Valeur Signification
01100 L’adresse physique de la case mémoire.
05 La valeur contenue dans cette case mémoire en hexadécimal.
005 La valeur contenue dans cette case mémoire en décimal.
L’équivalent de valeur contenue dans cette mémoire en code ASCII
8 – Saisir, alors, le code assembleur suivant :
mov ah, 05h
mov [100h], ah
9 – Emuler le code en cliquant sur emulate se trouvant sur la barre de taches principale.
10 – Exécuter le code ainsi écrit en cliquant sur run.
11- Quelle est la différence entre l’utilisation de ax et ah ?
Le registre AX permet de stocker des données de 16bits alors que AH permet
de stocker juste 8bits qui sont les bits de poids fort du registre ax.
12 – De même Saisir, Emuler et Exécuter les codes assembleur suivant 1er cas :
mov ax, 55h
mov [100h], ax
Et 2eme cas :
mov ax, 55
mov [100h], ax
13 – Compléter le tableau ci-après.
Valeur 1er cas 2eme cas
Adresse physique 01100 01100
Valeur en Hexadécimal 55 37
Valeur en Décimal 085 055
4
Valeur en Code ASCII U 7
14 – Commentaire :
Dans le 2e cas la valeur stocke dans AX a été convertie de décimal au
hexadécimal, alors que dans le 1er cas il n’avait pas de conversion car la valeur
qu’on voulait stocker dans AX était déjà en hexadécimal.
15 – Saisir, alors, le code assembleur suivant et refaite le même travail.
mov al, 55h
mov ah, 36
mov [100h], al
mov [104h], ah
Valeur 1er 2e
Adresse physique 01100 01104
Valeur en Hexadécimal 55 24
Valeur en Décimal 85 36
Valeur en Code ASCII U $
Commentaire : la case mémoire d’@ physique 01100 a été chargé par le contenu de registre
AL (55) et la case mémoire d’@ physique 01104 par le contenue de AH après que
l’émulateur lui a convertit de décimal a l hexadécimal.
16 – Saisir, alors, le code assembleur suivant et refaite le même travail.
mov ax, 55h
mov [100h], ax
mov bx, 100h
mov cx, [bx]
Adresse physique 01100
Valeur en Hexadécimal 55
Valeur en Décimal 85
Valeur en Code ASCII U
Commentaire : la case mémoire d’@ physique 01100 a été chargé le contenu de ax (55H). Et
le registre cx par le contenue de case mémoire d’@ 0100 : BX c’est à dire 0100 :0100 . Le
registre CX à la fin a été chargé par 55.
17- Saisir, alors, le code assembleur suivant et refaite le même travail.
5
mov [100h], 36h
mov [104h], 52h
mov [106h], 69h
mov bx, 100h
mov cx, [bx]
mov dx, [bx+4]
mov ax, [bx]+6
Adresse physique 01100 01104 01106
Valeur en Hexadécimal 36 52 69
Valeur en Décimal 54 82 105
Valeur en Code ASCII 6 R i
Commentaire : on a chargé la mémoire d’@ 0100 :0100 par 36H puis on a
stocké son contenu dans cx, et on a chargé le contenue de la mémoire d’@
0100 :0104 par 52H puis on l’a stocke dans dx et finalement on a chargé la
mémoire d’@ 0100 :0106 par 69H puis on a stocké son contenu dans ax.