Tp 1 utilisation de l’outil debug - informatique industriel

Informatique Industrielle : TP 1 Utilisation de l’Outil Debug

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

Hassène Gritli ISTIC Borj CedriaPage : 1 / 24

TP 1 SSSS YSTéMES IIII NFORMATIQUES ET AAAA SSEMBLEUR Initiation à l’Assembleur 8086 - Utilisation de l’O

util DebugI. But du TP L’objectif de ce TP est de donner un aperçu succinc

t du langage assembleur des microprocesseurs de la famille 8086. Ce langage est dit de « bas niv

eau » car il est étroitement lié à l’architecture d

u microprocesseur. Nous nous restreindrons à écrire e

t à exécuter quelques instructions en mode interactif sous le contrôle de l’outil Debug qui s’exécute sous Windows dans une fenêtre DOS. II.

Comment exécuter le Debug sous Windows La plupart des étudiants qui font leurs études en i

nformatique et technologies de l'information à l'aide de Windows 7 ou Windows 8 éprouvent des diff

icultés à utiliser quelques-uns langage de programmation en raison de quelques raisons de comp

atibilité. L'un d'entre eux est le Debug (on trouve aussi le logiciel NASM) du 8086 a également, ce qui ne fonctionne pas sur les systèmes Windows 7 facilement alors il est facile à exécuter ce logiciel sur Windows XP, Windows Vista, Windows serveur 2003 et également Windows 2000. Ainsi, afin d'exécuter ce logiciel (Debug), la solu

tion de changer le système d'exploitation n’est pas bien ou très facile. Donc, pour se débarrasser de ces problèmes de compatibilité, nous avons un logiciel open source nommé DOSBox. Il s'agit ess

entiellement d'un X86-DOS émulateur qui utilise la SDL-bibliothèque qui fait DOSBox très fa

cile à porter sur différentes plates-formes. Ministère de l’Enseignement Supérieur, 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 ******************* TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 2 / 24

DOSBox a déjà été porté sur de nombreuses plates-fo

rmes différentes, telles que Windows, Linux, MacOS X ... 

Alors, pour résoudre le problème de comptabilité, i

l faut avoir en premier lieu : -

Fichier 1 : le logiciel DOSBox 0.74 -

Fichier 2 – Un dossier compressé (.ZIP) nommé « 808

6 Assembler » 

Maintenant, nous devons ouvrir le second fichier qu

i est un fichier compressé de sorte que nous devons extraire les fichiers qu'il contient sur le lecteur C de notre système. Pour cela il suffit, après l’ouverture du dossier c

ompressé, de : 1-

sélectionner le dossier 8086 2-

puis cliquer sur l'option Extrait à 3- puis sélectionner le lecteur C 4-

enfin cliquer sur OK. Suivez sur l'image ci-dessous les étapes précédente

s 1-4. 

Alors, ensuite, nous devons ouvrir le premier fichi

er à savoir : le fichier DOSBox ; et nous devons l’installer qui est simple : il suffit de ga

rder en cliquant sur suivant> suivant> installer et enfin fermer. TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 3 / 24 Un raccourci de DOSBox sera créé sur le bureau, alo

rs allez à votre bureau et ouvrez l'icône DOSBox. Ensuite, vous verrez qu'un écran noir appar

aît : 

Maintenant, entrez la commande comme indiqué ci-des

sous: MOUNT C C:\8086

(and press Enter) Un message apparaîtra disant « Drive C: is mounted as Local Directory C:\8086\ » ; C’est-à-dire le lecteur C: est monté comme répertoire local C:\8

086\ 

Ensuite, tapez la commande ci-dessous : C:

(et appuyez sur Entrée) Alors maintenant, il entrera dans le lecteur C et d

onc nous pouvons travailler avec le Debug du 8086. Pour cela, il faut tout d’abord taper la commande s

uivante : debug

(juste après le C:\>) TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 4 / 24

En fait, Debug offre 23 commandes préliminaires dis

ponibles. Pour les découvrir, il faut taper ? Alors un texte apparaitra montrant les différentes commandes disponibles et leur synonyme : L’explication des différentes commandes est indiqué

e dans le tableau ci-dessous : Commande

Fonction Rôle Syntaxe A

Assemble

Assemblage des instructions

A[adresse] CCompare Comparaison de mémoires

C plage adresse D

Dump (or de)

Vidage de la mémoire (affichage du contenu du Data Segment) D[plage] EEnter Entrée (modification) d’une valeur en mémoire (du Data Segment) E adresse [liste] FFill Remplissage d’un bloc de mémoire

F plage liste GGo Exécution

G[=adresse][adresse] HHexa Opération en hexadécimal

H valeur1 valeur2 IInput Entrée d’un port

I port LLoad Chargement d’un fichier ou des secteurs d’une disquette en valeurs absolues

L [adresse][unité][secteur][nombre]

TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 5 / 24 MMove Transfert de bloc mémoire

M plage adresse NName Nommerun fichierou définir

des paramètres

N[chemin][nom][arguments] OOutput Sortie vers un port

O adresse octet PProceed Avancer

P [=adresse][nombre] QQuit Fin de séance avec Debug

Q R

Register

Affichage du contenu des registres du CPU

R [registre] SSearch Recherche de caractère S plage liste TTrace Exécution et affichage en pas à pas

T [=adresse][valeur] U

Unassemble

Désassemblage

U [plage] W

Write Enregistrement W[adresse][unité][secteur][nombre] XA

Allocate Expanded Memory Allocation de mémoire EMS XA [#pages] XD

Deallocate expanded memory Désallocation de EMS XD [desc] XM

Map Expanded Memory Pages Affecter des pages EMS XM [pageL][pageP][desc] XS

Display Expanded Memory Status Afficher l’état de la mémoire EMS XS III.

Initiation à la programmation en assembleur avec De

bug Commençons par le commentaire du registre en tapant : -r (et appuyez sur Entrée)

Ainsi, nous obtenons le résultat suivant (affichage complet du contenu des registres du CPU) : TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 6 / 24

Nous avons alors les registres AX, BX, CX, DX, les registres spéciaux SI, DI, BP, et les registres segments DS, ES, SS et CS, de plus, nous trouvons l

e IP (instruction pointer), et les drapeaux (flags) NV, UP, ..., NC. Afin de changer le contenu d’un registre, par exemp

le le registre AX, on tape le code suivant : -r ax Cette commande (c’est-à-dire r) permet d’afficher l

e contenu du registre AX. Alors on obtient : Comme vous le remarquer, le contenu est bien 0000H. Mais, il y a deux points dans la ligne suivante. Ceci montre que nous pouvons changer le c

ontenu de AX en tapant la valeur voulue ; par exemple 1234. En affichant une autre fois le contenu par l’interm

édiaire de la commande r, on obtiendra : Nous pouvons remarquer que le contenu du registre A

X est modifié est devenu 1234. 

Il faut mentionner à ce stade que les valeurs soit bien entendu écrites en Hexadécimale. Nous voulons encore changer le contenu du registre AX à : abcd. Rappelons que cette information (donnée) est valeur écrite en hexadécimal. Alors, n

ous procédons comme précédemment et ainsi nous obtiendrons : Le registre AX contient maintenant : ABCD (en Hexad

écimal). TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 7 / 24 Travaillons maintenant sur les données avec le regi

stre Data Segment( DS

). Pour cela, il faut travailler avec la commande d (dump) pour extraire le contenu du DS commençant à partir de l’adresse 0000H. Alors, nous devons taper l’instruc

tion comme elle est montrée sur l’écran suivant et nous trouvons aussi le résultat d’affichage des segments de données. Ici, c’est le contenu du DS. Nous mentionnons que l

a valeur 073F est la valeur (référence) du segment sur lequel nous travaillons. Nous pouvons r

emarquer ça depuis l’écran juste-avant où DS=073F. Après nous trouvons 4 zéros 0000 (c’est l’

offset 0H) et 16 données qui correspondent à 16 octets commençant de l’offset 0000. Ici, CD est l’offset 0, 20 est l’offset 1, 3E est l’offset 2, ...

. jusqu’à FF est l’offset 7. Le tiré – après l’offset 7 est juste pour séparer les 8 premières offset de

s autres dernières 8 offsets (8

ième offset jusqu’au 15

ième offset). Ainsi, nous avons 16 octets dans la première ligne. La deuxième ligne correspond à l’of

fset 0010 (ou encore 10 ou 10H). Cette valeur en hexadécimale est égale à 16 dans la base décimal

e. Ainsi, nous trouvons dans cette ligne 16 octets (du 16

ième au 31

ième offset). Après nous avons l’offset 20H (qui est 32 dans la base 10), et ainsi de suite. A droite des segments, nous avons une zone contenan

t les codes (caractères) contenant plusieurs points. En fait, dans cette zone, le debugger essay

e de convertir les différentes offsets en caractères (code) ASCII. Les points correspondent à octets avec code ASCII non valides. Par exemple, l’offset 0 CD est converti en un point. Al

ors cette offset n’a pas une correspondance en code ASCII. En revanche, l’offset 1, 20, est conver

ti en code ASCII en un espace vide. La table dans le premier Annexe donne le code ASCII des caractères usuels. L’abscisse indique le chiffre, l’ordonnée la dizaine (en hexadécimal). Ai

nsi, le code ASCII du caractère : est 3a. TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 8 / 24

Nous allons maintenant essayer de changer le conten

u des registres de données. Alors, pour aller au segment 073F (sur lequel nous travaillons) et à l’offset 0, nous devons utiliser la commande e

. Nous obtenons donc : Ici, nous permettrons le changement des différentes données (octets) du l’offset 0. Le debugger nous donne l’ancien octet et après nous trouvons un point. Dans ce cas, nous devons taper l’octet voulu à enregistrer. Par exemple, nous désirons que l’octet CD sera remplacé par le caractère « A » en code ASCII qui correspond en code hexadéci

mal 41H. Alors, nous devons toujours travailler avec les codes hexadécimaux. Ainsi, nous devons taper après le point l’octet 41. De plus, nous voulons remplacer l’espace (20H) par le caract

ère B, l’octet 3E par le caractère C (octet 43), ... Nous affichons maintenant le contenu du Data Segment 0 comme précédemment. Nous obtenons donc le résultat suivant : Nous remarquons que le contenu a été bien changé. A droite, nous trouvons le code ASCII correspondant des différents octets modifiés. La tâche suivante est de travailler avec les instru

ctions. Nous mentionnons que les instructions sont enregistrées dans les registres du Code Segment (CS ). De plus, pour entrer une nouvelle instruction et faire attention de ne pas changer un

e instruction déjà existante dans les registres du CS, il faut toujours vérifier l’adresse dans le Instruction Pointer (IP ). Rappelons que ce IP indique l’adresse de l’instruction suivante dans le programme. Alors, d’après les écrans précédents TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 9 / 24

où les différents registres sont apparus, nous trou

vons IP=0100H. Donc, l’instruction suivante devra être écrite à partir de l’offset 100. Alors, pour écrire une nouvelle instruction à parti

r de l’offset 100, il faut utiliser la commande a

. nous allons supposer que nous devons écrire le cont

enu du registre AX dans l’adresse 0 du Data Segment (DS). Alors, nous devons utiliser la commande mov comme suit : Notons que le contenu du registre AX est ABCD (voir les résultats précédents ou encore taper le code pour voir le contenu du registre correspondant

). Ce contenu (ABCD) sera enregistré dans l’emplacement 0H du DS qui a déjà la valeur 41H. Pa

rce que le contenu de AX est un mot codé sur 16 bits, alors le contenu de AX sera divisé en deux octets (8 bits) et enregistré dans le DS. Ainsi, les deux octets 41 et 42 dans le DS seront m

odifiés par la valeur ABCD. En outre, il faut noter que le registre AX est composé de 8 bits à po

ids faible (LSB) et 8 bits à poids fort (MSB). Donc, dans le code ABCD, le CD est l’octet LSB et l

e AB est l’octet MSB. Par conséquent, il faut noter que, dans le DS, l’octet 41 sera remplacé par le LSB et l’octet 42 sera remplacé par le MSB. En outre, Il faut mentionner que l’instruction mov

, dans ce cas, nécessite 3 offsets (3 cases mémoires) parce que l’offset suivant (la ligne suiv

ante) est 103. Alors les offsets 100, 101 et 102 sont dédiées pour la commande mov

. Donc, si nous voulons vérifier ça, il faut voir l

e IP. Nous devons trouver certainement IP=103. En fait, pour voir le résultat, il faut exécuter le code et pas à pas. Pour cela, il faut utiliser la commande t

. Alors, en tapant la commande t, nous obtenons le résultat suivant : Ici, le registre AX est le même, il n’est pas modif

ié. Le IP est (par rapport au résultat précédent IP=100) devenu 103. Pour afficher le contenu du DS, nous utilisons la c

ommande Dump (d ) comme suit : TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 10 / 24

Nous constatons que les deux premières offset du DS 0 ont été changées. Nous trouvons le LSB (CD) et après le MSB (AB). Nous utilisons maintenant la même instruction mov mais autrement comme suit : Dans ce cas le contenu de l’emplacement 0 du regist

re DS (source) sera enregistré dans le registre AX (destination). Nous signalons que l’instruction est enregistrée dans le CD 100. Alors le programme précédent (mov [0],ax) est remplacé par l

e nouveau programme (mov ax, [0]). Si nous voulons voir et modifier le IP, nous utilis

ons la commande r comme suit : Ici, l’instruction à exécuter (ancienne est à 103) est celle de l’adresse 100. Alors, le nouvel IP est

100 et par conséquent nous allons exécuter notre no

uvelle instruction qui est enregistré à l’adresse 100. En outre, il faut noter que le contenu du registre DS est CD AB. Nous allons changer le contenu du DS comme suit : Alors, le contenu du DS est changé comme suit : TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 11 / 24

Il est clair que le contenu est modifié. Pour exécuter notre programme (instruction mov

), nous tapons la commande t

. par conséquent, nous obtenons le résultat suivant : Il est clair que le contenu du AX est bien changé e

t prend les deux premiers octets du DS : les deux valeurs 41 et 42, avec 42 est le MSB et 41 est le LSB. En fait, afin d’écrire à partir de l’offset 100, no

us pouvons utiliser la commande a et ensuite nous tapons 100. Nous pouvons utiliser une autre méthode d’utilisati

on de la commande mov comme suit : Ici, nous allons écrite dans le registre AX (destin

ation) la valeur 1234 (qui est en hexadécimal bien entendu). En fait, comme nous remarquons, il y a un

e petite différence entre les deux utilisations de la commande mov

. Cette différence met l’accent sur les méthodes d’

adressage que nous allons les voir dans les prochaines séances. TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 12 / 24

L’instruction mov ax,1234 nécessite 3 offset. Alors, nous allons exécuter le programme de l’offset 100 jusqu’à l’offset 103 comme suit : Il est clair que le contenu du registre AX est bien modifié et contient la valeur voulue qui est 1234.

Nous notons que la valeur 1234 est écrite sur 16 bi

ts qui la largeur du registre AX. Il faut toujours entrer 2 octets (16 bits) seulement pour le registr

e AX (et les autres suivant la taille nécessaire). Si, nous faisons écrire une valeur de taille plus grand

e, nous allons avoir certainement une erreur. De plus, nous indiquons que dans la valeur 1234, 12 es

t l’octet MSB et 34 est l’octet LSB. Nous remarquons aussi que le IP devient 103. Nous allons maintenant rechanger le contenu du regi

stre AX en l’affectant la valeur 3. Alors, ici nous allons enregistrer un seul octet dans le regis

tre AX. Alors, comme résultat, nous allons obtenir ceci : Alors, le contenu de AX est bien changé et devenu 0

003, avec 3 est le LSB. Nous allons maintenant modifier seulement l’octet à poids fort MSB du registre AX. En fait, le MSB du AX est le AH, et le LSB du AX est le AL. Don

c, supposons que nous devons changer le AH (qui est initialement 00) et le remplacer par 34 et le AL (qui est initialement 03) par 12. Alors, après l’écriture des instructions correspondantes, nous allons obtenir le résultat suivant : TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 13 / 24

Nous remarquons tout d’abord que nous avons tapé de

ux instructions contenant chacune la commande mov. Chaque instruction nécessite 2 offset

s : la première mov requiert l’offset 100 et l’offset 10 ; alors que la deuxième mov nécessite l

’offset 102 et l’offset 103. L’IP prend la valeur 104. En outre, nous constatons que le contenu du registr

e AX est bien modifié est devenu 3412. Maintenant, nous allons utiliser une autre commande qui est ADD

. Cette commande permet l’addition de deux opérandes. Alors, nous désirons faire l’addition du contenu du registre AX avec la valeur 24 (rappelons que 24 est en hexadécimal). Nous allons commencer toujours à partir de l’offset 100. Ainsi, le code correspond est le suiv

ant : Nous notons que le résultat sera enregistré dans le registre AX (toujours dans la destination qui est ici le registre AX). Donc, en affichant le contenu des offsets, nous allons obtenir : Il est clair que le contenu du registre est modifié est prend la somme de l’ancienne valeur du AX qui est 3412 et la valeur 24. Cette somme en hexadé

cimale est égale bien entendu à 3436. TP 1 –

Systèmes Informatiques et Assembleur

Programmation en Assembleur avec Debug

Hassène Gritli ISTIC Borj CedriaPage : 14 / 24

Nous allons maintenant utiliser une autre commande qui est la soustraction SUB

. Nous désirons soustraire le contenu du AX (qui est 3436) par la v

aleur 1000. Le code et le résultat sont comme suit : Maintenant, nous allons écrire une chaine de caract

ère dans le segment DS=073F (segment astuel) à partir de l’offset 100. La chaine de caractère es

t la suivante : Hello Word, Merci Beaucoup ? ? Ici, la chaine "Hello Word, Merci Beaucoup" est com

prise en tant chaine de caractère comprenant des espaces vides. Alors, la première règle est pou

r écrire une chaine de caractère quelconque, il faut la mettre entre deux ". Toutefois, après

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

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

Publicité 1

Publicité 2