Cours micro-informatique, tutoriel & guide de travaux pratiques en pdf.
Les commandes de DEBUG
Lancer debug
Sous dos, on peut lancer Debug de plusieurs façons:
debug
lance debug sans charger de programme; permet d’assembler une ligne pour avoir le code.
debug lance debug en chargeant un programme. C’est la forme la plus courante, qui permet de l’analyser. On peut lancer debug sans rien et charger un programme après coup, mais c’est beaucoup plus facile ainsi.
debug <paramètres> lance debug en chargeant un programme et en donnant des paramètres au programme. Si un programme se lance en faisant gcc -g -c etape.c -o etape.o, si on veut le débugger, on fait debug gcc.exe -g -c etape.c -o etape.o (notez l’extension qui est rajoutée).
On peut en plus rediriger l’entrée, c’est à dire donner les commandes dans un fichier plutôt que par le clavier. Mettre alors le symbole inférieur suivi du nom du fichier. debug < lance debug en prenant les commandes dans un fichier. Attention ce fichier doit contenir une commande q, sinon vous ne pourrez plus sortir de debug. Exemple debug < a.txt b.txt ou debug b.txt < a.txt lance debug en chargeant la mémoire avec le programme ou le fichier b.txt et prend les commandes dans a.txt. Ceci permet d’assembler un programme, si on n’a pas compris que mon site vous en propose un mieux (et gratuit!). On peut aussi rediriger la sortie, c’est à dire donner le résultat dans un fichier plutôt qu’à l’écran. Mettre alors le symbole supérieur suivi du nom du fichier. debug > lance debug en envoyant les résultats dans un fichier. Exemple debug > a.txt b.txt ou debug b.txt > a.txt lance debug en chargeant la mémoire avec le programme ou le fichier b.txt et écrit les résultats dans a.txt. Ceci permet de désassembler dans un fichier (pour analyse). On n’a pas d’écho à l’écran, on a donc tout intérêt à appeler debug sans redirection, de tout noter, et de rediriger la sortie. On peut aussi utiliser un fichier d’entrée.
debug < a.txt > b.txt c.exe lance debug pour analyser le programme c.exe, en prenant les commandes dans a.txt et en mettant les sorties dans b.txt.
La commande de redirection de sortie efface le fichier si il existait. Pour écrire à la suite sans effacer le début, mettre deux symboles supérieurs au lieu d’un. Pour information, ceci n’est pas spécifique à debug, c’est du dos!
Sous windows, je conseille de faire un raccourci et de mettre derrière le nom du programme un point d’interrogation. Ainsi si vous cliquez sur le raccourci, windows demande ce qu’il doit mettre derrière debug.
Une fois lancé, debug nous donne un tiret d’invite. Les commandes ont toutes une lettre avec une suite de paramètres. Il n’y a pas de différences entre les majuscules et les minuscules. Toutes les valeurs numériques sont en hexadécimal.
Les paramètres des commandes
L’adresse peut s’écrire sous un seul nombre ou sous un couple de nombres :. Il est possible de donner comme segment le mot DS ou CS. Si on ne précise pas de segment, c’est DS qui est pris par défaut, sauf pour les commandes Go, Load, Trace, Unassemble et Write (ce qui concerne le code en fait). Quelques adresses valides: 40:17 A000:0000 1000 CS:1000
C’est un ensembles d’adresses dans un même segment. Il y a deux formes:
<première adresse> <dernière adresse> ou <première adresse> L . La première adresse peut avoir un segment. La deuxième non.
C’est une adresse d’un port d’entrée sortie. Par exemple 378 pour les données de l’imprimante.
C’est une donnée sur 1 ou 2 chiffre hexa.
C’est une suite d’octets séparés par des espaces (ou des virgules).
Nombre de 1 à 4 chiffres hexa.
Donne au moins le nom et l’extension d’un fichier. On peut y mettre le chemin.
<chaîne>
Une chaîne est délimitée par des apostrophes ou des guillemets. Pour mettre un apostrophe dans une chaîne, utilisez les guillemets comme délimiteurs. Si vous voulez les deux types, doublez le délimiteur comme en C ou en Pascal.
Nom d’un registre
0 représente le lecteur A:, 1 le lecteur B:, 2 le disque C: et ainsi de suite.
Si on a nb_tetes têtes et nb_secteurs secteurs par cylindres, pour le secteur sect du cylindre cyln de la tête tet porte le numéro sect+nb_secteur*(tet+nb_tetes*cyln). Le premier secteur porte le numéro 0.
Nombre entre 1 et 80 (on ne peut pas lire ou écrire en une fois plus de 80 secteurs. Je rappelle que les secteurs sont de 512 octets.