Informatique Industrielle : TP 2 Initialisation avec la Programmation en Assembleur ave
Télécharger PDFPrise en main d'Emu8086 et programmation en assembleur 8086
Objectifs du TP
Ce TP vise à maîtriser les bases d'Emu8086, à comprendre le langage machine et à écrire des programmes simples en assembleur 8086, incluant la gestion des entrées et sorties.
Exercice 1 : Découverte des fonctionnalités d'Emu8086
Emu8086 propose un éditeur de texte avec colorisation syntaxique pour le code assembleur. Voici les principales options du menu View utiles pour la programmation :
- Stack : Affiche la pile et permet de suivre les opérations de push/pop.
- Variable : Permet de visualiser les variables déclarées et leurs valeurs actuelles.
- Memory : Affiche une partie de la mémoire. Le mode table facilite la lecture des adresses et valeurs.
- Flag : Montre les drapeaux (flags) du processeur et leurs états.
L'option Ascii code affiche une table ASCII pour référence. Dans le menu Math, deux outils aident aux conversions et calculs.
Structure du squelette de programme
Le fichier squelette.asm est un modèle pour écrire des programmes en assembleur 8086. Il contient :
- Un segment de pile de 512 octets (256 mots) :
Pile segment stack
dw 256 dup(0)
base: Pile ends - Un segment de données vide :
data segment
data ends - Un segment de code avec initialisation des registres de segments :
assume CS:code, DS:data, SS:Pile - Une zone pour déclarer les fonctions publiques, externes et locales.
- Une zone réservée à l'écriture du programme, encadrée par les étiquettes début et fin.
Exécution du programme
La fenêtre de l'émulateur contient quatre zones principales :
- Boutons d'exécution : Permettent d'exécuter le programme pas à pas (single step), de revenir en arrière (back step), ou de le lancer automatiquement (run) avec un délai réglable.
- Registres : Affiche les valeurs hexadécimales des registres (AX, BX, CX, DX, etc.) pendant l'exécution. Les registres 16 bits sont affichés en deux parties (8 bits chacune). Le registre IP (Program Counter) est crucial pour suivre l'exécution.
- Mémoire : Représente la mémoire sous forme d'adresses (20 bits), valeurs hexadécimales et décimales, et caractères ASCII.
- Code machine : Affiche le code binaire exécuté entre début et fin, sans étiquettes ni noms de variables.
FAQ
1. Pourquoi les adresses sont-elles affichées sur 20 bits dans Emu8086 ?
Le processeur 8086 utilise une architecture mémoire segmentée où chaque adresse est composée d'un segment (16 bits) et d'un offset (16 bits). La combinaison de ces deux valeurs donne une adresse physique de 20 bits (216 × 216 = 220).
2. Quelle est la différence entre une variable de type mot et une variable de type octet ?
Une variable de type octet (byte) occupe 1 octet (8 bits) et peut stocker des valeurs de 0 à 255 (ou de -128 à 127 si signée). Une variable de type mot (word) occupe 2 octets (16 bits) et peut stocker des valeurs de 0 à 65535 (ou de -32768 à 32767 si signée).
3. Comment déclarer un tableau en assembleur 8086 ?
Pour déclarer un tableau, utilisez la directive db (pour des octets) ou dw (pour des mots), suivie des valeurs à stocker. Exemple pour un tableau de 10 octets : tb db 1, 255, -1, 'e', 32h, 0ffh, 00000001b, 11111111b.
Exercice 2 : Manipulation des données
Déclarez les variables et tableaux suivants dans le segment de données :
- Dix variables de type octet (
b0àb9) avec les valeurs : 1, 255, -1, 'e', 32h, 0ffh, 00000001b, 11111111b. - Dix variables de type mot (
d0àd9) avec les mêmes valeurs. - Un tableau de 10 octets (
tb) contenant les mêmes valeurs que les variablesb0àb9. - Un tableau de 10 mots (
td) contenant les mêmes valeurs que les variablesd0àd9. - Un tableau de 152 octets contenant la valeur décimale 111.
- Un tableau de 150 mots contenant la valeur décimale 43981.
Exécutez le programme en mode pas à pas et vérifiez les valeurs en mémoire via la fenêtre Variable. Analysez les différences entre les valeurs signées et non signées, ainsi que les caractères ASCII.
Exercice 3 : Écriture de programmes de calcul
Écrivez les programmes suivants en utilisant le squelette :
- Un programme
nom.asmqui additionne deux variables de type mot et stocke le résultat dans une troisième variable. Testez avec des valeurs positives et négatives. - Un programme qui additionne deux variables de type octet et stocke le résultat dans une variable de type mot (pour éviter les débordements).
Exercice 4 : Gestion des entrées/sorties avec les interruptions DOS
Les interruptions DOS permettent de lire et d'afficher des données. Voici quelques exemples :
- Lecture d'un caractère au clavier :
MOV AH, 01H(résultat stocké dans
INT 21HAL). - Affichage d'un caractère à l'écran :
MOV DL, 'A'(caractère stocké dans
MOV AH, 02H
INT 21HDL). - Affichage d'une chaîne de caractères :
MOV DL, offset MaChaine(la chaîne doit se terminer par
MOV AH, 09H
INT 21H$).
Écrivez les programmes suivants :
- Un programme qui lit deux valeurs au clavier (entre 0 et 8), les additionne et affiche le résultat.
- Un programme qui affiche un message d'invite, lit deux valeurs au clavier (entre 0 et 9), les additionne et affiche le résultat (entre 0 et 18) avec un message clair.