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