Systèmes à microprocesseurs - TP de simulation N°1 P a r M . J A R O U P a g e
Systèmes à microprocesseurs - TP de simulation N°1 P a r M . J A R O U P a g e | 1 Systèmes à Microprocesseurs TP de simulation N°1 : Emulateur de P 80x86 : emu8086 I. Objectifs • Prise en main de l’émulateur emu8086. • Etude du langage assembleur du P 8086 • Développer des programmes simples dans l’environnement de l’émulateur emu8086 II. Matériel Utilisé • Micro-ordinateur IBM et compatible muni d’un μP80x86. • Emulateur de P 8086 : emu8086 III. Introduction Dans un premier temps, pour simplifier l’apprentissage de l’assembleur x86, nous allons travailler sur un émulateur logiciel qui simule un processeur 8086. L’utilisation de cette émulation n’est pas obligatoire car nos programmes, écrits en assembleur 8086, fonctionne normalement sur un processeur moderne comme l’Intel core i7, ou l’AMD Phenom. Cependant, comme vous le verrez tout au long de ces TPs, l’émulateur nous fourni un environnement avancé pour l’apprentissage des mécanismes et du fonctionnement du processeur. Emu8086 se présente dans un premier temps comme un éditeur de texte classique, avec le support d’une colorisation syntaxique du code assembleur (mode éditeur). Le fichier squelette.asm contient la déclaration d’un segment de pile de 512 octets, la déclaration d’un segment de données vide ainsi que la déclaration d’un segment de code. Dans ce dernier, on retrouve la directive ASSUME permettant d’initialiser les trois registres de segments CS, DS et SS. On trouve aussi une zone de déclaration de fonctions publiques, une zone de déclaration de fonctions externes une zone de déclaration de fonctions locales, puis du code assembleur. Systèmes à microprocesseurs - TP de simulation N°1 P a r M . J A R O U P a g e | 2 Ce code débute par l’étiquette debut, puis on retrouve l’initialisation des segments de données et de pile (cette initialisation est doublée pour des raisons de compatibilité). Un espace réservé à l’écriture de vos programmes suit ces éléments. Enfin, l’étiquette fin indique (informellement) la fin du programme. Les deux lignes suivantes correspondent à l’appel standards de l’interruption DOS dont le rôle est de terminer d’un programme de manière normal (libération de la mémoire, …). Ensuite on trouve la fin du segment de code puis celle du programme. Pensez lorsque vous écrirez un programme à bien partir de ce fichier squelette en le sauvegardant sous un autre nom avant de le modifier. IV. Activités pratiques Activité pratique 1 : Prise en main d’emu8086 1.1 Squelette des programmes sources 1. Créez un fichier ex1.asm identique au fichier squelette.asm donnée ci-dessous. Compilez et exécutez le programme (bouton RUN). Validez la fin de l’exécution avec OK. STACK SEGMENT STACK DW 256 DUP(0) base: STACK ENDS DATA SEGMENT ; ici on declare les variable DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK ; ici on declare les fonctions publiques ; ici on declare les fonctions externes ; ici on declare les fonctions locales ; on precise a l'aide d'un commantaire ; son nom, ses entrees et ses sorties ; Procedure: name ; Entree: ... ; Sortie: ... debut: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX MOV SP, base ; ici on ecrit le corps du programme fin: MOV AH, 4CH INT 21H Systèmes à microprocesseurs - TP de simulation N°1 P a r M . J A R O U P a g e | 3 CODE ENDS END debut Fenêtre de l’éditeur de l’émulateur emu8086 Deux nouvelles fenêtres viennent de s’ouvrir, il s’agit du mode exécution de l’émulateur. La fenêtre « original source code » contient le code tel que vous l’avez écrit. La ligne surlignée en jaune est la prochaine instruction qui va être exécutée. Comme on le verra plus loin dans ce TP, il est possible d’interagir avec ce code en cliquant dessus. La zone mémoire de la fenêtre « emulator : » change pour correspondra à la partie sélectionnée par le click. Fenêtres de travail de l’émulateur emu8086. Systèmes à microprocesseurs - TP de simulation N°1 P a r M . J A R O U P a g e | 4 La fenêtre « emulator : » contient 4 zones que nous allons détailler ci-dessous : Zone 1: Les boutons vont nous permettre d’exécuter notre programme soit automatiquement soit Pas à Pas, avec la possibilité de revenir en arrière et de régler un délai d’attente entre chaque instruction. 2. 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) Zone 2: La zone 2 contient une représentation des registres, et permet de visualiser leur valeur hexadécimale tout au long de l’exécution de votre programme. Il est possible de modifier la valeur des registres (simple click) ou d’ouvrir une vue détaillée du registre (double click). 3. Exécutez votre programme et observez les valeurs des registres durant l’exécution. Vous porterez une attention particulière au registre IP. 4. Après l’exécution de la première instruction, quelle est la valeur décimale du registre AX ? Quelle est l’adresse de l’étiquette Base dans le segment de Pile ? Et quelle est son adresse dans la mémoire ? Zone 3: La zone 3 représente la mémoire octet par octet. Sur une ligne, on retrouve l’adresse mémoire sur 20 bits, la valeur de l’octet en hexadécimale, en décimale et sa représentation en ASCII. 5. Pourquoi l’adresse est elle représenté sur 20 bits ? Quel est le code instruction en langage machine qui correspond à l’instruction MOV DS, AX ? Zone 4: La zone 4 contient le code de votre programme une fois les traductions d’adresses terminées. Il n’y a plus aucune étiquette ni nom de variable. Il s’agit du code machine réellement exécuté. 6. Quel est le code réellement exécuté correspondant à votre programme (entre l’étiquette debut et la fin du segment de code)? Quelle serait la première instruction (en code réellement exécuté) si la pile avait une taille de 1024 octets ? 1.2 Déclarations des données Nous allons maintenant nous intéresser au segment de données et surtout la création de variables. 1. En partant du squelette que vous sauvegarderez sous le nom ex1.asm créez dix variables de type octet, nommées b0 à b9 et contenant les valeurs décimales 1, 255, -1, ‘e’, les valeurs hexadécimale 32, FF et les valeurs binaires 1, 11111111. 2. Créez les mêmes variables de type mot que vous nommerez d0, d1, … 3. Créez ensuite un tableau de 10 octets nommé tb qui contient lui aussi ces valeurs. Faites de même avec un tableau de 10 mots (td). 4. Créez ensuite un tableau de 152 octets contenant la valeur décimale 111 et un tableau de 150 mots contenant la valeur décimale 43981. 5. Compilez et exécutez votre programme en mode pas à pas. En cliquant sur le nom des variables (fenêtre original source code) vérifiez les valeurs en mémoire. 6. Que dire des valeurs signées ? Et des caractères ? Quel est la différence entre une variable de type mot et de type octet ? Quel est la différence entre un tableau et une suite de variables ? Avez-vous remarqué autre chose ? Quelle est la taille du segment de données ? Systèmes à microprocesseurs - TP de simulation N°1 P a r M . J A R O U P a g e | 5 Activité pratique 2 : Etude et test de programme simple 2.1 Etude de programme simple 1. Regardez attentivement ce programme et répondez aux questions suivantes sans compiler ce programme. PILE SEGMENT STACK DW 256 DUP(?) Base: PILE ENDS DATA SEGMENT N1 DW 5 N2 DW 3 N3 DW 3 DUP(?) N4 DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:PILE main: MOV AX,DATA ; Initialisation du segment de données MOV DS,AX MOV AX,PILE MOV SS,AX ; Initialisation du segment de pile MOV SP,Base ; Initialise la pile à vide MOV AX,N1 CMP AX,N2 JE etiq MOV N4,0 JMP fin Etiq: MOV N4,1 fin: MOV AH,4CH ; Les 2 lignes nécessaires pour la fin du programme INT 21H ; CODE ENDS END main 2. Que fait ce programme ? Quelle sera la valeur de N4 à la fin de l’exécution du programme ? Les valeurs de N1, N2, N3 sont-elles modifiées ? La pile est composée de combien d’octets ? 3. Combien y a-t-il de variables créées dans le segment de données ? Quelle taille occupent-elles ? Que se passe-t-il si vous enlevez l’instruction JMP fin ? Quelle sera la valeur de N4 dans ce cas- là à la fin de l’exécution du programme ? Nous allons voir que certaines options du menu view peuvent être pratiques. Voyons rapidement les principales options disponibles (certaines sont accessible directement par des boutons situés sous la zone 3) : • Stack: affiche la pile. • Variable: affiche la liste des variables et leurs valeurs. • Memory: affiche une partie de la mémoire. La visualisation en mode table permet plus facilement de se repérer. • Flag: affiche la valeur des uploads/S4/ tp1-systemes-a-microprocesseurs-emu8086.pdf
Documents similaires










-
32
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Sep 27, 2022
- Catégorie Law / Droit
- Langue French
- Taille du fichier 0.8955MB