Vous êtes sur la page 1sur 9

Systmes Microprocesseurs

(6GEN645)
Professeur : Assistant : Rachid Beguenane Eric Larouche

TP N 1
PROGRMMATION AVEC DEBUG

I.

INTRODUCTION

DEBUG, un programme inclus dans le systme dexploitation DOS de Microsoft et IBM PC, permet de suivre lexcution dun programme crit en langage assembleur, en bloc ou une instruction la fois. Ce qui est important pour trouver ce qui ne marche pas dans un programme. Plus particulirement, DEBUG permet dexaminer et de changer le contenu de la mmoire, entrer un programme et lexcuter. Lobjectif de ce TP est de bien comprendre la programmation avec lutilitaire DEBUG, plus particulirement comment: entrer et sortir de DEBUG, entrer, excuter et dboguer des programmes, examiner et changer le contenu des registres et de la mmoire, manipuler les commandes les plus importantes de DEBUG.

Plusieurs exemples de programmation en langage assembleur utilisant lutilitaire DEBUG seront vus. Pour commencer, voici un sommaire rapide des commandes DEBUG qui seront utilises tout au long de cette sance.

Fonction
Assemble Compare

Commande et < options >

A < adresse du dbut > C < adresse du dbut > < adresse de la fin > <adresse de la comparaison> C < adresse du dbut > < L nombre doctets > <adresse de la comparaison> Dump D < adresse du dbut > < adresse de la fin > D < adresse du dbut > < L nombre doctets > Enter E < adresse du dbut > < liste des donnes > E < adresse du dbut > Fill F < adresse du dbut > < adresse de la fin > < donnes > F < adresse du dbut > < L nombre doctets > < donnes > Go G < = adresse du dbut > < adresse(s) de la fin> Hexarithmetic H < nombre 1 > < nombre 2 > Move M < adresse du dbut > < adresse de la fin > < adresse de la destination > M < adresse du dbut > <L nombre doctets > < adresse de la destination > Register R <nom de registre> Search S < adresse du dbut > < adresse de la fin > < donnes > S < adresse du dbut > < L nombre doctets > < donnes > Trace T< = adresse du dbut > < nombre dinstructions> Proceed P< = adresse du dbut > < nombre dinstructions> Unassemble U < adresse du dbut > < adresse de la fin > U < adresse du dbut > < L nombre doctets >

II.

OBJECTIFS
Se familiariser avec les commandes de DEBUG. Ecrire des exemples pour mieux apprhender lutilit de DEBUG. Voir la diffrence entre coder avec DEBUG et avec un programme assembleur classique.

III.

MATRIEL UTILIS
Micro-ordinateur IBM et compatible muni dun P80x86. Programme DEBUG

IV. ACTIVITS
Activit 1 Entre et Sortie de DEBUG A partir de linvite du DOS, pour entrer dans DEBUG taper debug et entrer. Linvite des commandes DEBUG est un petit trait. Pour sortir du DEBUG vers DOS, taper q.

A noter que DEBUG accepte aussi bien les lettres majuscules que minuscules, i.e. q et Q sont la mme commande. Activit 2 Examiner et changer les contenus de registres. A linvite des commandes DEBUG, la commande R permet dafficher le contenu de tous les registres du P80x86. La premire ligne affiche le contenu des registres gnraux : AX, BX, CX, DX, SP, BP, SI et DI. La deuxime ligne affiche le contenu des registres : segments (CS, DS, SS, ES), pointeur programme (IP) et ltat de 8 bits du registre flags (OF, DF, IF, SF, ZF, AF, PF, et CF). La troisime ligne affiche ladresse logique du segment de code (CS:IP), la mnmonique de linstruction du programme pointe par CS:IP et la case mmoire laquelle linstruction courante rfre (sil y a lieu, par exemple DS :0005=FA34) A linvite du DEBUG : - taper R et observer le rsultat. - Avec R CX, seul le contenu de CX est affich et DEBUG donne la possibilit de le changer. Faire changer le contenu de AX, successivement avec ces valeurs 9AC2, AC2, C2, 2, 5ABC4 et taper chaque fois R. Observer les rsultats et commenter. - Taper successivement R BX, R BH, R BL. Observer et commenter les rsultats. Note Annexer la lettre H pour les nombres hexadcimaux nest pas ncessaire avec DEBUG contrairement aux utilitaires MASM/TASM ou les nombres par dfaut sont dcimaux. Activit 3 Coder et Excuter les programmes avec DEBUG Pour coder et excuter les programmes avec DEBUG, quatre commandes sont essentiellement utilises: A, U, G et T. Ces commandes et les options associes, dcrites au tableau de la page 2, sont dfinies comme suit : A, commande dassemblage, est utilise pour entrer dans la mmoire les instructions en langage assembleur, ladresse du dbut (offset IP) est indique en option. U, commande de dsassemblage, permet dafficher aussi bien le code machine que son quivalent en mnmoniques dune partie ou tout le programme se trouvant dans la mmoire. G, commande dexcution, instruit DEBUG dexcuter une partie ou tout le programme se trouvant dans la mmoire. T, commande trace, permet de suivre la trace de lexcution du programme, une ou un bloc dinstruction la fois. Cest une commande puissante car elle permet de suivre la trace des registres et des donnes chaque instruction. Ce qui est trs utile pour dboguer un problme complexe. 3

A linvite du DEBUG, taper A 100, et aprs chaque entre du clavier, les instructions suivantes, une ligne la fois (Note : quand la commande A est utilise, ne pas prendre des adresses offset <100):
MOV DH, FF3 MOV BX, 9ABCD4 MOV CS, 1200 MOV SI, CL MOV AX, DL MOV CH, DX MOV DX, [AX]

Expliquer la raison des messages derreurs affichs. A linvite du DEBUG, taper A 100, et aprs chaque entre du clavier, les instructions suivante (une ligne la fois):
MOV AX, 1 MOV DI, 202 MOV BX, [200] MOV CX, [DI] ADD AX, BX ADD AX, CX INT 3

(point darrt)

Observer les diffrents modes dadressage utiliss et comment [CS:IP] sincrmente. Dduire les adresses physiques correspondes aux instructions prcdentes? Taper successivement U 100 10D, R et G, G =100, G =100 10A. A chaque tape, commenter vos observations. Noter plus particulirement limportance de la commande U ou les codes machine des instructions assembleurs sont galement affichs. Est-ce quil y a une diffrence entre G, G=CS:100 et G=100 ? Taper R IP pour avoir la valeur actuelle de IP. Changer cette valeur 100 pour pointer au dbut du programme. Ensuite taper G 10A. Quel est le rsultat? Quitter DEBUG avec Q. A linvite du DEBUG, taper nouveau A 100, et aprs chaque entre du clavier, retaper les instructions prcdentes de la mme faon. Utiliser la commande T pour excuter le programme une instruction la fois avec T ou X instructions la fois avec T=100 X, ou X est le nombre dsir dinstructions pour suivre la trace de leur excution partir de IP=100. En tapant successivement sept fois T et aprs chaque entre du clavier, vrifier lvolution des diffrentes registres et lexactitude des rsultats daddition.

Activit 4 Manipulation des donnes avec DEBUG Pour manipuler des donnes avec DEBUG, trois commandes sont essentiellement utilises : F, D, et E. Ces commandes et les options associes, dcrites au tableau de la page 2, sont dfinies comme suit : F, commande de remplissage, est utilise pour charger un bloc de mmoire avec une donne particulire. D, commande daffichage des donnes, permet dafficher le contenu de la mmoire lcran. E, commande dentre, permet dexaminer et de changer le contenu de la mmoire. A linvite du DEBUG, taper une la fois les commandes F 100 11F CD et F 120 13F FB. Ensuite taper D 100 13F. Dcrire ce qui est observ. Avec les commandes F prcdentes, le chargement de la mmoire, par une donne, se fait dans le segment de donnes (DS) par dfaut. Taper F CS:100 10F CD pour altrer un contenu de la mmoire dans le segment de code et observer le rsultat avec D CS:100 10F. En reprenant le programme prcdent (activit 3) , utiliser la commande D CS:100 11F pour voir son code machine dans le segment de code de la mmoire. Comme application, linvite du DEBUG, taper votre nom et prnom en minuscules en utilisant la commande E 100 votre nom prnom . Avec D 100 10F, vrifier le code ASCII de votre nom et prnom en minuscules. Cela suppose que votre nom et prnom tiennent sur 16 caractres sinon changer la fin dadresse 10F en plus grand : par exemple 115. Noter quavec D 100 10F, laffichage sur cran donne sur la mme ligne aussi bien le code ASCII que les lettres de votre nom et prnom. Avec E 100 le contenu des adresses partir de doffset 100 peut tre chang un octet la fois en tapant sur la barre espace. Par exemple, aprs les points qui suivent les octets changer, remplacer les digits (chiffres) 6 par les digits 4 de chaque octet. Observer le rsultat avec D 100 LF et commenter. Noter que le fait de taper - aprs le ., fait revenir en arrire vers loctet prcdent. A linvite du DEBUG, taper A 100, et aprs chaque entre du clavier, les instructions suivante (une ligne la fois) :
MOV BL, 0 ADD BL, [0400] ADD BL, [0401] ADD BL, [0402] ADD BL, [0403]

ADD BL, [0404] MOV[0405], BL

INT 3 Rentrer les donnes additionner dans les cases mmoires [0400] [0404] en utilisant E DS : 400 2a 2b 2f 2d 2e. Apres avoir excuter le programme avec G=100 11A, vrifier les contenus de [0400] [0405] et par consquent le rsultat de laddition, avec D DS:400 L5. Activit 5 La convention Little Endian et comment le P80x86 sauvegarde les mots Effectuer les tapes suivantes pour comprendre la convention Little Endian : Dplacer un mot dune location mmoire vers un registre : D 500 LF A 100 MOV BX, [504] INT 3 T (Vrifier les contenus des 16 premiers octets partir de CS:500) (Ecrire une instruction a partir de CS:100 ) ( pour dplacer le mot dans les adresses 504 et 505 vers BX) (Vrifier lexcution et comment le chargement de BX est fait)

Dplacer un mot dun registre avers une location mmoire: D 300 LF A 100 MOV BX, FA98 MOV [302], BX INT 3 G=100 (Ecrire un code de 2 instructions partir de CS:100 ) ( pour dplacer le mot FA98h vers BX ) ( et ensuite vers les locations mmoire 302 et 303 ) (Vrifier comment le chargement de BX vers la mmoire est fait) Activit 6 Examiner et changer le registre FLAGS avec DEBUG Avec la commande R F ou mme R ( la fin de la 3eme ligne), ltat des 8 bits, les plus importants, du registre flags sont affichs. Ceci permet de suivre leurs volutions au fur et mesure que les instructions sexcutent en utilisant T par exemple. Il convient de signaler que pour les 8 bits (OF, DF, IF, SF, ZF, AF, PF, et CF) du registre FLAGS:

Si tout ces bits sont ltat RESET (mise 0), le registre FLAG saffichera comme : NV, UP, DI, PL, NZ, NA, PO NC (pour les bits OF, DF, IF, SF, ZF, AF, PF, et CF) Si tout ces bits sont a haut (mise 1), le registre FLAG saffichera comme : OV, DN, EI, NG, ZR, AC, PE CY. A linvite du DEBUG, taper A 100, et aprs chaque entre du clavier, les instructions suivante (une ligne la fois) :

MOV BX, 0 MOV AX, 0 ADD BL, 4D ADD BL, C3 ADD AX, 1222 ADD AX, 1333 ADD AX, 1191 MOV CX, AAAA ADD CX, 5556

INT 3 Utiliser la commande T pour suivre lexcution des instructions, une la fois, et observer lvolution des bits FLAGS tout en commentant. Activit 7 Divers La commande H <nbr 1>, <nbr 2> permet dafficher la somme et la diffrence entre deux nombres hexadcimaux. Vrifier avec H BA 21. La commande P est utilise pour excuter un bloc dinstructions (une boucle, appel de procdure, un programme dinterruption, ou rpter une chane de caractres), comme sil sagit dune seule (macro-)instruction. Avec le programme de lactivit 6, en tapant P 100 5, les 5 premires instructions sexcutent en un seul bloc. Vrifier. La commande M est utilise pour copier une plage de donnes dune location une autre. Excuter ces commandes, aprs chaque entre du clavier, et observer: F 350 35f AB D 350 LF M 350 LF 370 D 350 LF D 370 LF La commande C permet de comparer deux espaces mmoires et afficher les octets qui diffrent. Avec le programme prcdent, appliquer la commande C 350 35E 370 et ensuite C 350 35E 36F. Observer et commenter. La commande S permet de chercher dans un espace mmoire une donne particulire. Avec le programme prcdent, appliquer la commande S 340 35E AB. Observer et commenter. Enfin, cette dernire activit montre comment coder un simple programme avec DEBUG, lexcuter et placer des donnes dans un espace. Elle permet aussi de voir la diffrence avec le codage en utilisant un langage assembleur standard comme MASM.

A linvite du DEBUG, taper A 100, et rentrer les instructions et commandes suivantes (une la fois):
MOV CX, 05 MOV BX, 200 MOV AL, 0 ADD AL, [BX] INC BX DEC CX JNZ 0108 MOV [205], AL

INT 20 E 200 25 12 15 1F 2B D 200 LF G=100 111 D 200 LF

(fin de programme)

Ce programme contient une instruction de saut base sur ltat de lindicateur ZF du registre FLAGS. Il montre quelques diffrences entre programmer avec DEBUG et avec un programme assembleur classique comme MASM. Noter par exemple quavec DEBUG linstruction JNZ nest pas suivie dune tiquette (telle BOUCLE) de linstruction vers laquelle le saut seffectue, contrairement MASM. Loprande de linstruction JNZ 0108 est directement loffset de ladresse vers laquelle le saut est effectu. Lautre diffrence importante avec le programme MASM : le segment de donnes DS, dans lequel les donnes sont entres, est spar du segment du code qui contient les instructions. Avec DEBUG, ces donnes sont crites avec la commande E partir de ladresse pointe par BX, alors quavec MASM, on aurait crit MOV BX, OFFSET DATA avec DATA DB 25h, 12h 15h 1Fh 2Bh. Remarque : le mme programme crit avec MASM serait :
60, 132 prog_add5.asm: Addition de 5 octets (25h, 12h 15h 1Fh 2Bh) .MODEL SMALL .STACK .DATA COUNT EQU 05 DATA DB 25h, 12h 15h 1Fh 2Bh SUM DW ? .CODE MAIN PROC FAR MOV AX, @DATA MOV DS, AX MOV CX, COUNT MOV BX, OFFSET DATA MOV AL, 00 BOUCLE: ADD AL, [BX] INC BX DEC CX JNZ BOUCLE MOV SUM, AX PAGE TITLE

INT MAIN ENDP END

20h MAIN

Vous aimerez peut-être aussi