Tp 2 initialisation avec la programmation en assembleur ave

Informatique Industrielle : TP 2 Initialisation avec la Programmation en Assembleur ave

Télécharger PDF

Obtenir le pack complet des cours, TDs, TPs et projets sur Informatique Industrielle : Microprocesseur & Microcontrôleur!

Vous souhaitez maîtriser les microprocesseurs et Microcontrôleurs ? Ne cherchez plus, nous avons le pack parfait pour vous.

pack complet des cours, TDs, TPs et projets sur Informatique Industrielle : Microprocesseur & Microcontrôleur

Accédez à une collection complète des supports de cours, des travaux dirigés (TD) corrigés, des travaux pratiques (TP) et des projets.

Obtenir le pack maintenant

ISTIC Borj Cedria

Page : 1 / 7 TP 2 SSS SYSTéMES III INFORMATIQUES ET AAA ASSEMBLEUR Initialisation avec la Programmation en Assembleur avec Emu8086  Objectifs  Prise en main d’emu8086.  Étude du langage machine  Écriture d’un premier programme en assembleur 8086  Premières gestion des entrées/sorties 

Exercice 1

: Emu8086 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). Certaines options du menu « view » peuvent être pratiques. Voyons 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 différents drapeaux. Ministère de l’Enseignement Supérieur et de la Recherche Scientifique ******************* Université de Carthage ******************* Institut Supérieur des Technologies de l’Information et de la Communication ******************* Licence Appliquée :

Automatique et Informatique Industrielle ******************* Niveau : 1

ière année ******************* A.U. 2015-2016, Semestre 1 ******************* Enseignants : Mme FOURATI &

Mr. GRITLI ******************* TP 2 – Systèmes Informatiques et Assembleur

Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria

Page : 2 / 7  Ascii code: affiche une table ascii au cas où vous auriez oublié la vôtre Pour en finir avec les menus, dans math, vous trouverez deux outils pour vous aider dans les conversions de base et les calculs. - Lancez Emu8086 - Ouvrir un nouveau fichier du type .EXE - Modifier le fichier obtenu pour obtenir le programme suivant qu’on va nommer squelette : Pile segment stack

dw 256 dup(0)

base: Pile ends data segment ; ici on déclare les variables data ends TP 2 – Systèmes Informatiques et Assembleur

Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria

Page : 3 / 7 code segment

;-------------------------------------------------------------------------------

assume CS:code, DS:data, SS:Pile

;-------------------------------------------------------------------------------

; ici on déclare les fonctions publiques, externe, locale, procedure. ...

;------------------------------------------------------------------------------- debut:

mov ax, data

; initialization des segment registers

mov ds, ax

mov ax, stack

mov ss, ax

mov sp, base

;-------------------------------------------------------------------------------

;------------------------------------------------------------------------------- ; add your code here

;-------------------------------------------------------------------------------

;------------------------------------------------------------------------------- fin: mov ax, 4c00h ; exit to operating system. int 21h

;------------------------------------------------------------------------------- code ends end début Le fichier squelette.asm est un fichier pour vous aider à écrire vos programmes assembleur. Il contient :  la déclaration d’un segment de pile de 512 octets,  la déclaration d’un segment de données vide  la déclaration d’un segment de code.  la directive ASSUME permettant d’initialiser les trois registres de segments CS, DS et SS.  une zone de déclaration de fonctions publiques,  une zone de déclaration de fonctions externes,  une zone de déclaration de fonctions locales, TP 2 – Systèmes Informatiques et Assembleur

Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria

Page : 4 / 7  du code assembleur. Ce code début par l’étiquette « début » :  puis on retrouve l’initialisation des segments de données et de pile.  Un espace réservé à l’écriture de vos programmes suit ces éléments. Enfin, l’étiquette fin indique la fin du programme.  Ensuite on trouve la fin du segment de code puis celle du programme. Sauvegardez le fichier sous le nom squelette.asm puis compilez et exécutez le programme : La fenêtre « emulator : » contient 4 zones que nous allons détailler ci-dessous : 1) Les boutons vont nous permettre d’exécuter le programme soit Pas à Pas, avec la possibilité de revenir en arrière, soit automatiquement (en pouvant régler un délai d’attente entre chaque instruction). a) 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) 2) La deuxième zone contient une représentation des registres, et permet de visualiser leur valeur hexadécimale tout au long de l’exécution de votre programme. On notera que les registres AX, BX, CX et DX sont représenter couper en deux. Cela permet de visualiser simplement leur TP 2 – Systèmes Informatiques et Assembleur

Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria

Page : 5 / 7 décomposition en registres 8 bits. Il est possible de modifier la valeur des registres de cette manière (simple clic) ou d’ouvrir une vue détaillée du registre (double clic). a) Exécutez votre programme et observez les valeurs des registres durant l’exécution. Vous porterez une attention particulière au registre IP. b) Après l’exécution de la première instruction, quelle est la valeur décimale du registre AX ? 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. a) Pourquoi l’adresse est-elle représentée sur 20 bits ? b) Quel est le code instruction en langage machine qui correspond à l’instruction MOV DS,AX 4) La 4

ème zone 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 réellement exécuté. a) Quel est le code réellement exécuté correspondant à votre programme (entre l’étiquette début et la fin du segment de code) ? 

Exercice 2

: Les données Nous allons maintenant nous intéresser au segment de données. En partant du squelette que vous sauvegarderez sous le nom ex2.asm 1) 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. 4) Faites de même avec un tableau de 10 mots (td). 5) 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. 6) 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. 7) Que dire des valeurs signées ? Et des caractères ? 8) Quel est la différence entre une variable de type mot et de type octet ? TP 2 – Systèmes Informatiques et Assembleur

Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria

Page : 6 / 7 9) Quel est la différence entre un tableau et une suite de variables ? 10) Avez-vous remarqué autre chose ? 11) Quelle est la taille du segment de données ? 

Exercice 3

: Écriture d’un programme  Somme de 2 variables de type mot Écrivez un programme nom.asm qui fait la somme de 2 variables de type mot (précédemment déclarées) et qui sauvegarde le résultat dans une troisième variable de type mot. Faites des tests avec des valeurs positives et négatives.  Somme de 2 variables de type octet Écrivez un programme qui fait la somme de 2 variables de type octet (précédemment déclarées) et qui sauvegarde le résultat dans une troisième variable de type mot. 

Exercice 4

: Écriture d’un programme avec Entrées/Sorties Pour la gestion des entrées (lecture de texte au clavier) ou les sorties (affichage à l’écran), nous allons utiliser les interruptions DOS. Regardons maintenant quelques exemples d’interruption DOS : Exemple 1 : Lecture d’un caractère au clavier MOV AH, 01H INT 21H Cette fonction permet de lire un caractère sur l’entrée standard. Ce caractère est récupéré sous la forme de son code ASCII dans AL.  Entrée : AH = 01h  Sortie : AL = contient le code ASCII du caractère saisi au clavier Exemple 2 : Affichage d’un caractère à l’écran TP 2 – Systèmes Informatiques et Assembleur

Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria

Page : 7 / 7 MOV DL, ’A’ MOV AH, 02H INT 21H Cette fonction permet de sortir (afficher) un caractère sur la sortie standard. Ce caractère doit être stocké sous la forme de son code ASCII dans DL.  Entrée : AH = 02h  DL = Code ASCII du caractère à afficher Exemple 3 : Lecture d’un caractère au clavier MOV DL, offset MaChaine MOV AH, 09H INT 21H Cette fonction permet d’afficher une chaîne de caractères sur la sortie standard. Cette chaîne doit être stockée sous la forme d'une séquence d'octets correspondant aux codes ASCII des caractères composant la chaîne. La fin de la chaîne de caractères doit être signalée à l'aide du caractère '


ISTIC Borj Cedria Page : 1 / 7 TP 2 SSS SYSTéMES III INFORMATIQUES ET AAA ASSEMBLEUR Initialisation avec la Programmation en Assembleur avec Emu8086  Objectifs  Prise en main d’emu8086.  Étude du langage machine  Écriture d’un premier programme en assembleur 8086  Premières gestion des entrées/sorties  Exercice 1 : Emu8086 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). Certaines options du menu « view » peuvent être pratiques. Voyons 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 différents drapeaux. Ministère de l’Enseignement Supérieur et de la Recherche Scientifique ******************* Université de Carthage ******************* Institut Supérieur des Technologies de l’Information et de la Communication ******************* Licence Appliquée : Automatique et Informatique Industrielle ******************* Niveau : 1 ière année ******************* A.U. 2015-2016, Semestre 1 ******************* Enseignants : Mme FOURATI & Mr. GRITLI *******************
TP 2 – Systèmes Informatiques et Assembleur Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria Page : 2 / 7  Ascii code: affiche une table ascii au cas où vous auriez oublié la vôtre Pour en finir avec les menus, dans math, vous trouverez deux outils pour vous aider dans les conversions de base et les calculs. - Lancez Emu8086 - Ouvrir un nouveau fichier du type .EXE - Modifier le fichier obtenu pour obtenir le programme suivant qu’on va nommer squelette : Pile segment stack dw 256 dup(0) base: Pile ends data segment ; ici on déclare les variables data ends
TP 2 – Systèmes Informatiques et Assembleur Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria Page : 3 / 7 code segment ;------------------------------------------------------------------------------- assume CS:code, DS:data, SS:Pile ;------------------------------------------------------------------------------- ; ici on déclare les fonctions publiques, externe, locale, procedure. ... ;------------------------------------------------------------------------------- debut: mov ax, data ; initialization des segment registers mov ds, ax mov ax, stack mov ss, ax mov sp, base ;------------------------------------------------------------------------------- ;------------------------------------------------------------------------------- ; add your code here ;------------------------------------------------------------------------------- ;------------------------------------------------------------------------------- fin: mov ax, 4c00h ; exit to operating system. int 21h ;------------------------------------------------------------------------------- code ends end début Le fichier squelette.asm est un fichier pour vous aider à écrire vos programmes assembleur. Il contient :  la déclaration d’un segment de pile de 512 octets,  la déclaration d’un segment de données vide  la déclaration d’un segment de code.  la directive ASSUME permettant d’initialiser les trois registres de segments CS, DS et SS.  une zone de déclaration de fonctions publiques,  une zone de déclaration de fonctions externes,  une zone de déclaration de fonctions locales,
TP 2 – Systèmes Informatiques et Assembleur Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria Page : 4 / 7  du code assembleur. Ce code début par l’étiquette « début » :  puis on retrouve l’initialisation des segments de données et de pile.  Un espace réservé à l’écriture de vos programmes suit ces éléments. Enfin, l’étiquette fin indique la fin du programme.  Ensuite on trouve la fin du segment de code puis celle du programme. Sauvegardez le fichier sous le nom squelette.asm puis compilez et exécutez le programme : La fenêtre « emulator : » contient 4 zones que nous allons détailler ci-dessous : 1) Les boutons vont nous permettre d’exécuter le programme soit Pas à Pas, avec la possibilité de revenir en arrière, soit automatiquement (en pouvant régler un délai d’attente entre chaque instruction). a) 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) 2) La deuxième zone contient une représentation des registres, et permet de visualiser leur valeur hexadécimale tout au long de l’exécution de votre programme. On notera que les registres AX, BX, CX et DX sont représenter couper en deux. Cela permet de visualiser simplement leur
TP 2 – Systèmes Informatiques et Assembleur Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria Page : 5 / 7 décomposition en registres 8 bits. Il est possible de modifier la valeur des registres de cette manière (simple clic) ou d’ouvrir une vue détaillée du registre (double clic). a) Exécutez votre programme et observez les valeurs des registres durant l’exécution. Vous porterez une attention particulière au registre IP. b) Après l’exécution de la première instruction, quelle est la valeur décimale du registre AX ? 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. a) Pourquoi l’adresse est-elle représentée sur 20 bits ? b) Quel est le code instruction en langage machine qui correspond à l’instruction MOV DS,AX 4) La 4 ème zone 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 réellement exécuté. a) Quel est le code réellement exécuté correspondant à votre programme (entre l’étiquette début et la fin du segment de code) ?  Exercice 2 : Les données Nous allons maintenant nous intéresser au segment de données. En partant du squelette que vous sauvegarderez sous le nom ex2.asm 1) 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. 4) Faites de même avec un tableau de 10 mots (td). 5) 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. 6) 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. 7) Que dire des valeurs signées ? Et des caractères ? 8) Quel est la différence entre une variable de type mot et de type octet ?
TP 2 – Systèmes Informatiques et Assembleur Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria Page : 6 / 7 9) Quel est la différence entre un tableau et une suite de variables ? 10) Avez-vous remarqué autre chose ? 11) Quelle est la taille du segment de données ?  Exercice 3 : Écriture d’un programme  Somme de 2 variables de type mot Écrivez un programme nom.asm qui fait la somme de 2 variables de type mot (précédemment déclarées) et qui sauvegarde le résultat dans une troisième variable de type mot. Faites des tests avec des valeurs positives et négatives.  Somme de 2 variables de type octet Écrivez un programme qui fait la somme de 2 variables de type octet (précédemment déclarées) et qui sauvegarde le résultat dans une troisième variable de type mot.  Exercice 4 : Écriture d’un programme avec Entrées/Sorties Pour la gestion des entrées (lecture de texte au clavier) ou les sorties (affichage à l’écran), nous allons utiliser les interruptions DOS. Regardons maintenant quelques exemples d’interruption DOS : Exemple 1 : Lecture d’un caractère au clavier MOV AH, 01H INT 21H Cette fonction permet de lire un caractère sur l’entrée standard. Ce caractère est récupéré sous la forme de son code ASCII dans AL.  Entrée : AH = 01h  Sortie : AL = contient le code ASCII du caractère saisi au clavier Exemple 2 : Affichage d’un caractère à l’écran
TP 2 – Systèmes Informatiques et Assembleur Initialisation à l’Assembleur avec Emu8086 ISTIC Borj Cedria Page : 7 / 7 MOV DL, ’A’ MOV AH, 02H INT 21H Cette fonction permet de sortir (afficher) un caractère sur la sortie standard. Ce caractère doit être stocké sous la forme de son code ASCII dans DL.  Entrée : AH = 02h  DL = Code ASCII du caractère à afficher Exemple 3 : Lecture d’un caractère au clavier MOV DL, offset MaChaine MOV AH, 09H INT 21H Cette fonction permet d’afficher une chaîne de caractères sur la sortie standard. Cette chaîne doit être stockée sous la forme d'une séquence d'octets correspondant aux codes ASCII des caractères composant la chaîne. La fin de la chaîne de caractères doit être signalée à l'aide du caractère '$'.  Entrée : AH = 09h  DS = Adresse de segment de la chaîne de caractères  DX = Adresse d'offset de la chaîne de caractères  Travail à réaliser 1) Écrivez un programme nom.asm qui fait la somme de 2 valeurs qui seront lues au clavier. Ensuite vous afficherez le résultat (entre 0 et 8) à l’écran. 2) Écrivez un programme nom.asm qui fait la somme de 2 valeurs (entre 0 et 9) qui seront lues au clavier. Un message d’invite sera affiché avant la lecture des valeurs au clavier. Ensuite vous afficherez le résultat (entre 0 et 18) à l’écran avec un message clair.

amp;apos;.  Entrée : AH = 09h  DS = Adresse de segment de la chaîne de caractères  DX = Adresse d'offset de la chaîne de caractères  Travail à réaliser 1) Écrivez un programme nom.asm qui fait la somme de 2 valeurs qui seront lues au clavier. Ensuite vous afficherez le résultat (entre 0 et 8) à l’écran. 2) Écrivez un programme nom.asm qui fait la somme de 2 valeurs (entre 0 et 9) qui seront lues au clavier. Un message d’invite sera affiché avant la lecture des valeurs au clavier. Ensuite vous afficherez le résultat (entre 0 et 18) à l’écran avec un message clair.

Partagez vos remarques, questions ou propositions d'amélioration ici...

Enregistrer un commentaire (0)
Plus récente Plus ancienne

Publicité 1

Publicité 2