Telechargé par hàppy Ñàsìñà

2- Exploration de l’environnement de l’Emu8086 et premier programme en langage Assembleur

publicité
Mme S.BOUCHENE
L2 ACAD
2019-2020
TP N°2 : Exploration de l’environnement de l’Emu8086 et premier
programme en langage Assembleur
La programmation en assembleur 8086 nécessite un environnement adéquat, nous avons
choisi d’utiliser l’Emu8086. C’est un logiciel qui simule le processeur 8086.
Vous allez constater tout au long de ces TPs que l’émulateur nous fournit un environnement
avancé pour l’apprentissage des mécanismes et du fonctionnement du processeur i8086. Par
exemple, il nous permet d’exécuter un programme instruction par instruction tout en suivant
l’évolution du contenu des registres, du segment de données, la pile, etc. Ceci va vous
permettre de mettre en pratique toutes les connaissances vues en cours.
1. Lancement et découverte de l’émulateur.
Pour lancer l’émulateur, il faut lancer l’application emu8086 se trouvant dans le sous
répertoire /binaires ou à partir d’un raccourci créé sur le bureau.
Notre émulateur se présente pour l’instant comme un éditeur de texte classique, avec le
support d’une colorisation syntaxique du code assembleur (mode éditeur).
1- Copier puis extraite l’archive Emu8086 dans un répertoire de travail.
2- Observer le contenu des sous répertoires /documentation, et /binaires/examples.
Contient toute la documentation et les tutos
concernant l’ému8086, à partir d’un manuel e
son utilisation jusqu’à l’ensemble des
instructions qu’il supporte ainsi que les
fonctions d’interruptions en formats html
Contient les fichiers générés après compilation
d’un programme .asm
Contient des exemples de programmes écrits
en langage assembleur que vous pouvez tester
et exécuter
Contient vos programmes
d’extention .asm
3- Explorer les différentes fonctionnalités New, Open, Examples, Save,
Convertor, Calculator, Help.

new.
Commencer à créer un
nouveau fichier ‘’.COM’’
1
L2 ACAD

2019-2020
open, examples et save.
C’est pour ouvrir un fichier
.asm existant
Permet d’enregistrer le
programme écrit en
langage assembleur sous
l’extension ‘’.asm’’
Vous allez trouver ici tous
les exemples de
programmes assembleurs
du répertoire /examples
décris en haut

calculator et convertor.
Une calculatrice qui
réalise des opérations
et affiche le résultat
en base souhaitée.
Convertir des valeurs 8 bits
ou 16 bits d’un type de
codage vers un autre
codage, il suffit d’écrire la
valeur sur la base initiale
souhaitée

ascii codes
Table des caractères avec
leurs codes ascii en
décimal et en
hexadécimal, il suffit de
cliquer à l’intérieur de la
fenêtre pour changer la
base
2
L2 ACAD

2019-2020
help. Dans la documentation on s’intéresse particulièrement aux onglets : 8086
Instruction Set et Interrupts.
Ça ouvre une page HTML
contenant la
documentation sur
l’ému8086 qu’on trouve
aussi dans le répertoire
/documentation

Instruction Set. Contient les instructions supportées par l’ému8086,. Pour
savoir que fait une instruction donnée, il suffit de cliquer dessus pour avoir la
description de l’instruction, ses paramètres et un exemple.
3
L2 ACAD

2019-2020
Interrupts. Nous allons étudier cette année quelques fonctions d’interruptions.
Pour avoir le détaille d’une interruption, il suffit de cliquer dessus.
2. Compilation et exécution d’un code assembleur.
Pour cette partie, nous allons utiliser les exemples déjà disponibles dans l’émulateur.
1- Compilez le code de l’exemple 2 add/subtract. Prenez note des messages de
compilation, ainsi que des fichiers générés (après enregistrement dans un
emplacement bien choisi).
L’exemple choisit
L’exemple add/ subtract, initialise au début les resgitres al et bl par les valeurs 5 et 10, ensuite
il ajoute le contenu de al à bl, par la suite il soustrait de bl la valeur 1, à la fin, une portion de
code pour l’affichage du contenu de bl sur écran en binaire qu’on aura l’occasion d’expliquer
dans les prochains TPs.
4
L2 ACAD
2019-2020
En cliquant sur compile, une fenêtre s’ouvre pour enregistrer les fichiers générées après
compilation dans le répertoire /MyBuild du dossier emu8086.
Une fois enregistré, la fenêtre si dessous sera affichée, qui donne la taille du programme en
nombre d’octet qui est le même sur toutes les machines (38 bytes), et le temps pris pour la
compilation, ce dernier diffère d’une machine à une autre.
Une fois terminé, cliquez sur close.
2- Lancez l’émulation de votre programme (Emulate). Qu’est ce que vous constatez ?
-Deux fenêtres qui vont s’afficher :
Une qui contient le programme exemple (code source) avec une bande jaune sur la
première instruction, cette bande va descendre après chaque exécution pas à pas.
La Deuxième fenêtre « Emulator » contient 4 zones que nous décrivons ci-dessous :
 La première zone.
5
L2 ACAD
2019-2020
Elle comporte les boutons permettant d’exécuter notre programme soit Pas à Pas, avec la
possibilité de revenir en arrière, soit automatiquement (en pouvant régler un délai d’a ttente
entre chaque instruction).
Réinitialisez votre programme (reload) puis exécutez-le pas à pas (single step et back step)
jusqu'à la fin.
Faites une nouvelle réinitialisation, réglez le délai sur 400 ms et faites une exécution normale
(run).
Recharger le
programme
Revenir en arrière
d’une exécution pas à
pas
Exécution pas à pas du
programme
Pour régler le délai
d’attente entre chaque
instruction
 La deuxième zone.
Elle contient une représentation des registres, et permet de visualiser leurs valeurs
hexadécimales tout au long de l’exécution de votre programme.
Ré-exécutez votre programme, observez
les valeurs des registres durant
l’exécution.
Vous porterez une attention particulière
au registre IP. Vous remarquez qu’a
chaque exécution le ip pointera vers
l’adresse de la prochaine instruction à
exécuter, sachant que le programme
commence à l’ofsset 0100h.
Après l’exécution de la première instruction, quelle est la valeur décimale des registres AL et
AX ?
AL = 05h, AX = 0005h.
Quelle est la valeur du registre BL avant l’exécution de l’instruction mov cx, 8? BL = 0Eh
6
L2 ACAD
2019-2020
 La troisième zone.
Code machine de
l’instruction
Adresses physiques
Le même code
machine mais en
décimal
Caractère
correspondant
Instruction
CS :offset
Cette zone représente la partie mémoire ou est chargé le programme :
En bande bleu, sur la partie droite, nous avons la prochaine instruction à exécuter du
programme, sur la partie gauche, le code machine de l’instruction en hexadécimal puis en
décimal, l’adresse physique de l’instruction, et le caractère du code ascii qui correspond à la
valeur code machine.
La bande bleue descend après chaque exécution pas à pas vers la prochaine instruction à
exécuter.
Comment l’instruction MOV BL, 10 est-elle codée en mémoire ?
 07102 : B3 0A
Et l’instruction SUB BL, 1?
 07106 : 80 EB 01
 La quatrième zone.
Elle offre plusieurs fonctionnalités, Accès aux variables (var), aux flags du PSW (flags), à la
pile (stack), etc.
Rappelez-vous du rôle des flags du PSW, ensuite observez l’état de ces flags pendant
l’exécution de votre programme.
7
L2 ACAD
2019-2020
Premier programme en langage assembleur
1. Structure générale d’un programme écrit en assembleur.
La structure générale d’un programme écrit en assembleur 8086 en considérant le modèle «
full segments» qui décrit explicitement les différents segments utilisés dans un programme,
est illustrée ci-dessous.
; Rôle du programme
Data Segment
; Déclarations des données utilisées dans le programme
Data ends
Pile Segment
; Taille de la pile, exemple : maPile dw 256 dup ( ?)
TOS label word ; TOS : Top of stack
Pile Ends
Code
SEGMENT
Assume CS:Code, DS:Data, SS : stack
Nom_Procedure PROC
-------
Ret
Nom_Procedure ENDP
Main :
Mov AX, data
Mov DS, AX
Mov AX, Stack
Mov SS,AX
; Traitement
Mov SP, ofsset TOS ; initialiser le sommet de pile
------Call Nom_Procedure
----------
MOV AH, 4CH ; Ces deux instructions servent
Int 21H
Code ENDS
; à terminer correctement le programme
END main
8
L2 ACAD
2019-2020
2. Exercice.
En l’absence d’instruction en assembleur qui manipule le bit d’état de contrôle TF (Trap
Flag), avec l’utilisation de la pile écrire une procédure Trap_Proc qui force le bit d’état de
contrôle TF à 1.
1- Le programme appelant envoie comme paramètre à la procédure la valeur du mot
d’état (PSW),
2- La procédure renvoie à la fin la nouvelle valeur du mot d’état après changement de
TF à 1 au programme appelant dans la pile,
3- Le programme appelant doit remettre la nouvelle valeur dans le PSW.
9
Téléchargement