DEBUG.EXE
NOTICE D'UTILISATION
 Aller à la liste des commandes 



1 - INTRODUCTION

Le programme DEBUG est un utilitaire permettant de créer un environnement de tests pour contrôler le déroulement d'un programme. Les erreurs détectées peuvent être directement corrigées dans le programme.

DEBUG permet également de charger, modifier ou afficher un fichier, de même il permet l'exécution de fichiers objets qui sont des programmes exécutables.


2 - Comment démarrer DEBUG
Pour lancer DEBUG, tapez :
DEBUG [unité:] [chemin d'accès] [nom de fichier [:surf]] [arg1] [arg2]

Si le nom de fichier est précisé, il peut alors être traité. Sinon, il faut le charger au moyen des commandes NAME et LOAD. Une série d'arguments (arg1. arg2) peut être associée au nom de fichier et est alors transmise au fichier lors de son chargement.

Lorsque DEBUG est lancé, les registres et les indicateurs sont affectés de la manière suivante :

- les registres de segment (CS, DS, ES et SS) sont initialisés au premier segment suivant la fin du programme DEBUG ;
- le pointeur d'instructions prend la valeur hexdécimale 100 ;

3 - Commandes

Cette partie décrit l'utilisation des commandes DEBUG

PARAMETRES

Toutes les commandes DEBUG acceptent des paramètres, excepté la commande QUIT.

<adresse> Indique l'adresse en deux parties: la première désigne le registre du segment sous forme littérale (CS) ou hexadécimale (4B8) et est facultative; la seconde précise le déplacement. Si la première partie n'est pas désignée, le segment par défaut est utilisé.
Exemple :  CS : 0100
04F7 : 0100
100
<octet> définit une valeur hexadécimale de 1 ou 2 caractères.
<unité> précise l'unité de disque utilisé :
0 pour A, 1 pour B, 2 pour C et 3 pour D.
<specfich> désigne le fichier à utiliser et se compose d'une identification d'unité, d'un nom de fichier avec son suffixe. Ces trois spécifications sont facultatives.
<liste> est une série d'octets ou de chaînes de caractères, celles-ci étant comprises entre des guillemets (") ou des apostrophes (').
Exemple :  F CS : 100 41 42 43 44
F CS : 100 "A" "B" 'C'
<adresse point> se compose d'une valeur hexadécimale de 1 à 4 caractères pour présiser une adresse de point d'accès de 8 ou 16 bits.
<plage> définit un espace d'adressage entre une adresse haute et une adresse basse de la manière suivante:
<adresse> <adresse>
Exemple :  CS : 100 100
ou
<adresse> L <adresse>
Exemple :  CS : 100 L 100
<secteur> désigne une valeur hexadécimale de 1 à 3 caractères pour préciser le numéro du secteur de départ et ensuite le nombre de secteurs à traiter. Leur nombre maximum est H80.
<chaîne> représente une chaîne de caractères entre apostrophes (') ou entre guillemets (").
<secteur> représente une valeur hexadécimale de 1 à 3 caractères.

- Caractéristiques communes à toutes les commandes

Une commande peut être introduite au moyen d'une seule lettre, souvent suivie d'un ou de plusieurs paramètres.

Les commandes et les paramètres sont constitués indifféremment de majuscules ou de minuscules et peuvent comporter des séparateurs (espaves ou virgules).

Ctrl et Break simultanés mettent fin à une commande.

L'affichage en défilement en continu peut être arrêté momentanément en appuyant simultanément sur les touches Ctrl et S; il reprend lorsque une touche quelconque est enfoncée.


- Commandes



Aller en début de page



Liste des commandes : cliquer sur une lettre pour lire les explications

(A)ssemble    (C)ompare    (D)ump    (E)nter    (F)ill    (G)o    (H)exarithmetic
(I)nput    (L)oad    (M)ove    (N)ame    (O)utput    (P)roceed
(Q)uit    (R)egistre    (S)earch    (T)race    (U)assemble    (W)rite



Aller à la liste des commandes

(A)SSEMBLE

Rôle : assemble en mémoire les instructions en langage assembleur.

Syntaxe : A [<adresse>]

Commentaires : les entrées numériques sont données en hexdécimal. Les instructions sont assemblées en mémoire à partir de l'adresse précisée. Si elle n'est pas spécifiée, elles seront assemblées dans la zone CS : 100 si c'est la première commande ASSEMBLE, sinon elles suivront la dernière instruction assemblée.
Lorsque toutes les instructions sont introduites, tapez à nouveau sur ENTREE pour retourner à l'indicatif de DEBUG.
Si une erreur est trouvée dans une instruction, DEBUG affiche le message:

^erreur
et donne à nouveau la dernière adresse d'assemblage.
Le programme accepte la syntaxe du langage assembleur standard pour le 8088/8086 (ainsi que le 8087).
Exemple :  B DEBUG
-A 200
04A8:0800 XOR AX,AX
04A8:0802 MOV [BX],AX
04A8:0804 RET



Aller à la liste des commandes

(C)OMPARE

Rôle : compare le contenu de deux zones de mémoire.

Syntaxe : C <plage> <adresse>

Commentaires : la comparaison s'effectue sur le nombre d'octets spécifiés par le paramètre plage. L'adresse et le contenu des différents octets sont affichés de la manière suivante:
  <adresse><octet1><octet2><adresse 2>...
Si aucun segment n'est précisé dans la plage, le contenu de DS est pris par défaut. Pour préciser une adresse de fin de plage, il ne faut entrer qu'un seul déplacement.

Exemple :  C : 100 L 10 200



Aller à la liste des commandes

(D)UMP

Rôle : afficher le contenu d'une zone de mémoire.

Syntaxe : D <adresse>

Commentaires : l'affichage se fait en deux parties:
- la première affiche le contenu de la mémoire en hexadécimal;
- la seconde affiche le contenu de la mémoire en ASCII en remplaçant par un point les caractères non affichables.

La commande DUMP s'utilise de deux façons différentes:
- la première affiche le contenu de 64 ou 128 octets suivant le mode utilisé; le contenu est affiché à paritr de l'adresse spécifiée dans la commande, si celle-ci est omise, l'adresse par défaut est prise égale à l'adresse qui suit la dernière adresse affichée par la commande DUMP précédente;
- la seconde affiche le contenu de la plage spécifiée.

Exemple :  D CS: 100 10C



Aller à la liste des commandes

(E)NTER

Rôle : modifier des octets en mémoire.

Syntaxe : E <adresse> [<liste>]

Commentaires : le contenu du registre DS est pris comme segment de défaut. La commande E s'utilise de deux façons:
- elle permet d'écrire les octets en mémoire à partir de l'adresse spécifiée.
  E <adresse> [<liste>]

Exemple :  E CS: 120 41 "BC" 44
Les adresses CS 120 contiennent les octets 41, 42, 43 et 44 ou, en ASCII, A, B, C et D.

- elle autorise l'affichage de l'adresse et de son contenu pour en permettre la modification:
  E <adresse>
On peut alors:
  - soit introduire une nouvelle valeur hexdécimale de un ou de deux caractères:
  - soit appuyer sur la barre d'espacement pour passer à l'adresse suivante;
  - soit entrer un tiret (-) pour revenir à l'adresse précédente;
  - soit appuyer sur la touche Entrée pour sortir de la commande E.



Aller à la liste des commandes

(F)ILL

Rôle : remplir les adresses précisées dans la plage avec les valeurs données dans la liste.

Syntaxe : F <plage> <liste>

Commentaires : Si le nombre d'octets contenu dans la liste est inférieur à celui contenu dans la plage, la liste est répétée jusqu'à remplir la plage.
Si elle en contient plus, l'excédent n'est pas utilisé.

Exemple :  F CS:100 110 FF
La plage de CS:100 à 110 est remplie de FF



Aller à la liste des commandes


(G)O

Rôle : exécuter le programme présent en mémoire.

Syntaxe : G [=<adresse> [<adresse>...]]

Commentaires : l'exécution du programme commence à l'adresse CS : IP, sauf si le paramètre =<adresse> est précisé. Dans ce cas, il comence en CS : <adresse>.

La commande G s'exécute de deux manières:
- l'exécution du programme se fait sans point d'arrêt :
  G [=<adresse>]
- le déroulement du programme se fait en s'arrêtant aux adresses spécifiées dans la commande :
  G [=<adresse> [<adresse>...]]
Ces points d'arrêt permettent par exemple d'examiner les huit registres à certains moments. Dix points d'arrêt peuvent être précisés.

Remarques
1 - Une fois le programme terminé ("fin normale de programme" est affiché à l'écran), il doit être rechargé pour pouvoir être exécuté à nouveau.
2 - Le registre SP doit disposer d'au moins six octets.
3 - Le registre CS est pris comme segment de défaut pour les points d'arrêt.



Aller à la liste des commandes

(H)EXARITHMETIC

Rôle : additionner et soustraire des valeurs hexdécimales.

Syntaxe : H <valeur> <valeur>

Commentaires : la commande nous donne la somme des deux valeurs et soustrait la seconde de la première.

Exemple :  -H 19F 10A
02A9 0095



Aller à la liste des commandes

(I)NPUT

Rôle : entrer et afficher en hexdécimal un octet du port d'entrée spécifié

Syntaxe : I <adresse port>
Commentaires :  exemple :  -I 3C8
  7F



Aller à la liste des commandes

(L)OAD

Rôle : charger en mémoire un fichier ou des secteurs d'une disquette.

Syntaxe : L [<adresse port> [<unité> <secteur> <secteur>]]

Commentaires : la commande L s'utilise de deux façons:

  ◊ L <adresse> <unité> <secteur> <secteur>
charge les données en provenance de l'unité précisée à partir du secteur relatif désigné par le premier paramètre <secteur> et par un nombre de secteurs spécifié par le deuxième paramètre <secteur>. Les données sont placées en mémoire à partir de l'adresse indiquée. Le segment contenu dans le registre CS est pris par défaut.

Exemple :  L 4BF:210 1 0F 60
109 (6D) secteurs consécutifs à partir du secteur 15 (0F) de la disquette B sont transférés à l'adresse 4BF:210.

  ◊ L ou L <adresse>
charge le fichier spécifié lors du lancement du programme DEBUG ou précisé par la commande NAME. Le fichier est chargé en mémoire à partir de l'adresse CS:100 ou à partir de l'adresse spécifiée dans la commande. Les fichiers .COM ou .EXE sont toujours chargés à l'adresse CS:100 sans tenir compte de l'adresse spécifiée. A l'issue de la commande, les registres BX et CX contiennent le nombre d'octets lus.



Aller à la liste des commandes

(M)OVE

Rôle : transférer le bloc de mémoire spécifié par le paramètre <plage> aux emplacements successifs en commençant à l'adresse spécifiée.

Syntaxe : M <plage> <adresse>

Commentaires : les données de la zone source ne sont pas modifiées sauf si elles recouvrent certaines adresses de la zone de destination.

Exemple :  M CS:100 110 A00



Aller à la liste des commandes

(N)AME

Rôle : la commande NAME permet de formater les blocs de contrôle de fichier contenus aux adresse CS:5C et CS:6C. Les blocs de contrôle de fichier sont définis pour fournir les noms de fichier au programme en cours de traitement ainsi que pour utiliser les commandes WRITE et LOAD. Les spécifications de fichier les autres paramètres éventuels sont placés à l'adresse CS:81, le nombre de caractères est placé en CS:80. AX indique la validité des identificateurs d'unité.

Syntaxe : N [unité:] [chemin d'accès] nom de fichier

Commentaires : la commande N désigne le fichier qui pourra être utilisé par les commandes LOAD et WRITE. Elle permet aussi de définir les spécifications de fichier ou d'autres paramètres nécessaires au traitement du programme en cours de DEBUGGING.

Exemple :  DEBUG nomprog
N fichier1



Aller à la liste des commandes

(O)UTPUT

Rôle : envoyer un octet au port de sortie désigné.

Syntaxe : O <adresse port> <octet>

Commentaires : les données de la zone source ne sont pas modifiées sauf si elles recouvrent certaines adresses de la zone de destination.

Exemple :  O 3F8 42



Aller à la liste des commandes

(P)ROCEED

Rôle : exécuter un appel de sous-programme, une demande d'interruption, une instruction de répétition de chaînes ou une instruction de boucle. L'exécution s'arrête à l'instruction qui suit le retour du sous-programme ou de l'interruption ou à l'instruction qui suit la boucle ou la répétition de chaînes.

Syntaxe : P [<adresse>] [<valeur>]
 
Commentaires :  0100  CALL  1000
0103  JC    2000
....
1000  XOR   AX,AX
....
1XXX  RET
Si CS:IP pointe sur l'instruction 100 (CALL), la commande P entraîne l'exécution du sous-programme et rend le contrôle au DEBUG à l'instruction 103 (JC).



Aller à la liste des commandes

(Q)UIT

Rôle : sortir de DEBUG.

Syntaxe : Q

Commentaires : à l'issue de la commande Q, le fichier en cours de traitement n'est pas sauvegardé. Il faut donc au préalable utiliser la commande WRITE.



Aller à la liste des commandes

(R)EGISTRE

Rôle : afficher ou modifier le contenu des registres ou des indicateurs.

Syntaxe : R [<registre>]

Commentaires : la commande R permet:
- d'afficher et de modifier le contenu d'un registre R BX ;
- d'afficher le contenu de tous les registres et des indicateurs ainsi que la prochaine instruction à exécuter R ;
- d'afficher et de modifier les huit indicateurs selon la convention suivante:

Nom de l'indicateur  Positionné  Non positionné
Dépassement de capacité  OVNV
Direction (INC/DEC)DNIN
Interruption (autorisation)EIDI
SigneNGPL
ZéroZRNZ
Report auxiliaireACNA
Parité (paire/impaire)PEPD
ReportCYNC



Aller à la liste des commandes

(S)EARCH

Rôle : chercher, dans la plage spécifiée, les caractères précisés dans la liste.

Syntaxe : S <plage> <liste>

Commentaires : la comande affiche l'adresse de tous les caractères correpondant à la liste spécifiée s'ils existent. Le registre DS est pris comme segment par défaut.

Exemple :  S CS:100 L11 41 'AB' 0E



Aller à la liste des commandes

(T)RACE

Rôle : exécuter une ou plusieurs instructions et afficher le contenu des registres à l'issue de l'exécution.

Syntaxe : T [<=adresse>] [<valeur>]

Commentaires : l'exécution commence à l'adresse spécifiée par le paramètre <=adresse> . Di ce paramètre est omis, elle commence à l'adresse CS:IP.
Par défaut, la commande exécute une seule instruction. Cependant, le paramètre valeur permet de spécifier le nombre d'instructions à exécuter entre chaque compte rendu de TRACE.
Exemple : T 6 exécute six instructions en partant de l'adresse CS:IP.



Aller à la liste des commandes

(U)NASSEMBLE

Rôle : désassembler les instructions et afficher leurs adresses, leurs valeurs et leurs mnémoniques.

Syntaxe : U [<adresse>] ou U [<plage>]

Commentaires : la valeur de CS est prise comme segment par défaut. Si l'adresse n'est pas indiquée, le désassemblage commence à l'adresse qui suit la dernière instruction désassemblée par la commande U précédente ou à l'adresse 100H si c'est le permier désassemblage.



Aller à la liste des commandes

(W)RITE

Rôle : écrire sur le disque le fichier traité.

Syntaxe : W [<adresse>] [<unité> <secteur> <secteur>]

Commentaires : 128 secteurs maximum peuvent être écrits. La commande supporte deux syntaxes d'appels :
- La première utilise tous les paramètres indiqués dans la ligne syntaxe et écrit les données qui commencent à l'adresse spécifiée sur l'unité spécifiée en partant du secteur précisé par le premier paramètre <secteur> jusqu'à ce que le nombre de secteurs spécifié par le second paramètre <secteur> soit atteint ;
- La seconde n'utilise que le paramètre <adresse> ou même aucun paramètre. Elle écrit sur le disque le fichier spécifié dans le bloc de contrôle de fichier CS:5C (voir NAME). Les registres BX et CX doivent conrenir le nombre d'octets à écrire. Si l'adresse n'est pas spécifiée, elle est prise par défaut égale à CS:100
Une tentative d'écriture d'un fichier ayant comme suffixe .HEX ou .EXE produira un message d'erreur.



Aller à la liste des commandes