Vous êtes sur la page 1sur 10

TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.

BOUCHENE

Debug : Outil de mise au point des programmes

 Commande ? : Permet d’afficher la liste de toutes les commandes DEBUG et les


paramètres associés à chaque commande.

 Commande R (Register) : Permet d’afficher l’état des registres.


Au lancement du debug, les registres généraux, index, base pointer sont mis à zéro, le IP est
initialisé à la valeur 100h.

Mot d’état du processeur


L’instruction se trouvant à
l’adresse CS : 0100h
Le contenu de l’argument mémoire
DS : [BX+SI] de l’instruction qui se
trouve à l’adresse CS : IP

Les valeurs des flags du PSW :


OF DF IF SF ZF AF PF CF
0 NV UP DI PL NZ NA PO NC
1 OV DN EI NG ZR AC PE CY

PS : la valeur du flag TF ne peut être lue directement.

 Pour modifier le contenu d’un registre, exécuter r suivi du nom du registre, exemple,
écrire 1234h dans le registre ax :

 Pour modifier la valeur d’un flag, taper la commande rf puis sur la nouvelle ligne, écrire la
nouvelle valeur du flag :
1
TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.BOUCHENE

 Pour l’écriture de nouvelles valeurs de flags, aucun ordre n’est imposé.

 Commande d (dump) : permet d’afficher le contenu d’une zone mémoire de DS.

1 2 3
Adresses de début Zone mémoire affichée par la commande d Les caractères
des espaces de 16 correspondants aux
octets). contenus mémoire de
la zone affichée

Par défaut, la commande d affiche un espace contigu de 128 octets (8 lignes de 16 octets) à
partir de l’offset 100h de l’adresse DS par défaut.
Chaque ligne est précédée par son adresse de début en mémoire.
La commande d interprète chaque contenu mémoire (valeur d’un octet) comme étant du code
ascii d’un caractère, si le caractère est imprimable elle l’affiche sur la zone 3 sinon elle
affiche un « . ».

 Exécuter un autre d permet d’afficher la zone suivante en mémoire :

 Si on s’intéresse à afficher une zone mémoire débutant à une adresse différente de


celle dans DS, il suffit de rajouter cette adresse comme paramètre à la commande d,
exemple :

2
TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.BOUCHENE

Sinon, une autre méthode consiste à modifier la valeur du DS en utilisant la commande


rds puis d’exécuter d suivi d’une valeur d’offset :

 Il est possible de limiter la taille de la zone à afficher si la zone mémoire de


données auquel on s’intéresse est de taille inférieur à 128 octets, en donnant une
plage d’adresse comme paramètres à la commande d, en utilisant l’une des deux
syntaxes suivantes :

Syntaxe 1 : D @DEAF @FEAF

@DEAF : adresse de début de l’espace à afficher.


@FEAF : adresse de fin de l’espace à afficher.

Exemple :

Syntaxe 2 : D @DEAF L Taille

Taille : est la taille de l’espace à afficher.


.

Exemple :

3
TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.BOUCHENE

 La commande E (Enter) : Permet d’écrire des données en mémoire à partir


d’une adresse donnée, exemple :

La nouvelle
valeur introduite Espace pour
passer à l’octet Espace pour
suivant sauter cet octet
Contenu de la case
sans le modifier
mémoire d’adresse
1234 :200

Pour vérifier le nouveau contenu mémoire, taper la commande d :

Il est possible de charger les données directement sur la même ligne que la commande
e:

Il est possible aussi d’introduire une chaine de caractère en mémoire :

 Commande A (Assemble): permet d’écrire un bout de programme en langage


assembleur et de charger son code machine en mémoire à une adresse donnée. (Ou
adresse 0100h par défaut).

Syntaxes possibles:

o A
o A CS : OFFSET
o A OFFSET

 La commande invite à introduire une nouvelle instruction à chaque nouvelle ligne.


A près l’écriture de chaque instruction, il faut taper sur ENTRER. Une fois fait, le code
machine de l’instruction saisie est chargé en mémoire à l’adresse donnée comme paramètre à la
commande A ou à l’adresse CS :0100H par défaut. 4
TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.BOUCHENE

 Par la suite, la commande affiche la prochaine adresse de chargement ( calculée à


partir de l’adresse de l’instruction précédente + taille de l’instruction précédente) pour
l’écriture de la prochaine instruction du programme. Et ainsi de suite. 
 A la fin, il faut taper sur ENTRER pour terminer, sortir de la commande A et revenir
au prompt du debug. 

Prenant l’exemple d’un programme qu’on veux charger en adresse CS=1234 à partir
de IP=0000h et le code d’une procédure qu’on veux charger dans le même segment à
partir de IP=100H , ce dernier sera appelé à partir du premier programme.

Chargement du code du programme appelant :

On observe pour ce code que la première instruction sera chargée dans le segment
d’adresse 1234h à partir de IP = 0000h, comme la taille de cette instruction est 3
octets, la prochaine instruction sera chargée à l’adresse 0004h, puisque la première
instruction occupe en mémoire 4 octets ayant les adresses 0000h, 0001h, 0002h et
0003h .

Si on constate suite à l’écriture du programme la présence d’une erreur syntaxique ou


logique au niveau d’une instruction donnée du programme, on est amené à corriger l’erreur
et à réécrire l’instruction correctement pour recharger à nouveau le bon code machine en
mémoire et ce en utilisant la commande A suivie de l’adresse de l’instruction à corriger.

Pour l’exemple ci-dessus, l’instruction à corriger est push bx qui doit etre remplacée par
push ax comme suit :

Remarque : Au moment de la correction, si l’instruction à corriger et la nouvelle instruction


sont de même taille il suffit de modifier uniquement l’instruction erronée par contre si les
deux instructions ne sont pas de même taille il faudra absolument réécrire toutes les
instructions qui viennent âpres l’instruction erronée sinon ça peut entrainer soit un
écrasement du code machine des instructions suivantes soit un bug d’exécution qu’il faut
éviter pour un fonctionnement correcte du programme lors de l’exécution par la suite.

5
TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.BOUCHENE
Chargement du code de la procédure :

A ce niveau-là, nous avons les deux codes chargés en mémoire, cette opération de chargement
n’influence pas l’état des registres du processeur car l’exécutio n n’est pas lancée a présent et donc si
une commande R sera exécutée il n’y’aura aucun changement sur les registres.

 Commande U (Unassemble): permet de désassembler les instructions et afficher leurs


adresses, codes machines et leurs mnémoniques.
Syntaxes possibles:

o U / Affiche programme de taille 33 octets par défaut


o U @deb @fin / Affiche les instructions entre @deb et @fin
o U L taille / Affiche programme de taille taille

L’adresse de fin est l’adresse du dernier octet de la dernière instruction du programme.

Désassemblage du code du programme appelant (par la 2 ème syntaxe) :

6
TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.BOUCHENE

Désassemblage du code de la procédure (par la 3 ème syntaxe) :

Instructions assembleur
Contenus mémoire regroupés correspondant aux codes
@ Début des machines
en codes machine
instructions en mémoire

 U vs D ???

Comme la commande D, la commande U affiche le contenu d’une zone mémoire, la


différence est que D interprète chaque valeur d’un octet commet étant un code ascii d’un
caractère donné et elle affiche le caractère correspondant, tandis que U interprète chaque
valeur d’un octet comme étant une partie du code machine d’une instruction donnée et elle
affiche l’instruction correspondante.

Donc le contenu affiché est le même mais l’interprétation est différente.

Avant d’exécuter ce programme, il est nécessaire d’initialiser les variables, nous avons trois
données d’entré au programme : AX, DS :[200h] et DS :[202h].

 On initialise AX par la valeur 5 en utilisant la commande RAX.


 On initialise les cases mémoires respectivement par les valeurs : A101h et 00C2h en
utilisant la commande E DS :0200.

7
TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.BOUCHENE

Une fois le code du programme et les données sont chargés en mémoire, on peut passer à l’exécution du
programme.

 Les commandes T (Trace) et G(Go) :


o Permettent l’exécution de programmes chargés en mémoire.
o G pour exécution automatique et globale du programme et T c’est pour faire une
exécution pas à pas (instruction par instruction ou bloc d’instructions par bloc
d’instructions).
o L’intérêt de l’exécution pas à pas est de repérer les erreurs ou bugs dans le
programme.
o Les commandes G et T affichent l’état des registres à l’issue de l’exécution.

 Syntaxes possibles de la commande T :

T  exécute l’instruction se trouvant à l’adresse CS :IP


T=@  exécute une seule instruction à l’adresse @
T=@ L  exécute L instructions à partir de @ (L ≥ 1)
TL  exécute l instructions à partir de la valeur de CS : IP.

8
Première instruction de la Prochaine instruction à A ce niveau-là, la première instruction
procédure exécuter dans le programme du programme appelant est exécutée
TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.BOUCHENE

L’exécution de la première instruction du programme appelant : push [200] à fait passer le


sommet de pile de la valeur 00F5 à la valeur 00F3, après l’exécution du call, 3 valeurs sont
empilés dans la pile, à savoir, le contenu de la case mémoire DS :[200h], le contenu de la case
mémoire DS :[202h], contenu de AX ainsi que le IP retour (000Ch), pour vérifier, il suffit
d’afficher le contenu de la pile entre les adresses SS :00ED à SS :00F4 par la commande d :

Valeur de DS : [200h] Valeur de AX


Valeur de DS : [202h] IP retour

Les 4 premières instructions de la Contenu de la case mémoire


procédure sont exécutées. SS :[BP + 6]

On continu l’exécution pas à pas de la procédure jusqu’à l’instruction mov [BP+8], BX :

9
TP ARCHITECTURE DES ORDINATEURS / 2021-2022 Mme S.BOUCHENE

Avant d’exécuter le RET 6, il est possible d’examiner l’état de la pile après la sauvegarde du
résultat du traitement de la procédure dans la pile à l’adresse SS :[BP + 6]par la commande d.

Adresse du sommet de pile actuelle Contenu de la pile à l’adresse BP +8

L’adresse BP+8

Encore un T pour exécuter l’instruction ret 6 qui permet le retour au programme appelant et
déplace donc le sommet de pile de 8 octets [00ED  00F5] et met dans ip l’adresse retour
au programme appelant : 000C :

Encore un T pour exécuter la dernière instruction du programme appelant : pop [202h] qui
récupère le résultat et le met dans la case mémoire d’adresse DS :[204h] :

Etant terminé l’exécution du programme, le contenu de la case mémoire DS :[204h] peut être
consulté par la commande d :

Pour une exécution globale, réinitialiser les registres par leurs valeurs initiales par la
commande r, puis exécuter G, ou bien sortir du deug et revenir puis vérifier si le programme
est toujours chargé en mémoire et exécuter G.

G= @debut @fin
Attention : @fin pour G c’est l’adresse de début de la prochaine instruction qui ne fait
pas partie du programme.

Pour notre programme : G = 1234 :0000 1234 :0010.

1
0

Vous aimerez peut-être aussi