retour vers le sommaire du cours

Architecture matérielle
Jean HENRI
Fonctionnement du processeur

debug - fichier MAP - exemple debug00 (source, map, debug)
debug01 - debug03 - debug04

Le langage machine - l'assembleurRetour en haut de page

L'outil debug fourni avec les systèmes d'exploitation Microsoft permet de voir comment se déroule l'exécution d'un programme. Nous utiliserons des programmes Pascal simples pour découvrir ce fonctionnement (à télécharger ici).

Aide en ligne de debug

DEBUG [[lecteur:][chem]fichier [param]]

      [lecteur:][chem]fichier Programme ou fichier à tester.  param Paramètres à passer au fichier lors de son chargement.
Après avoir lancé Debug, tapez ? pour afficher une liste des commandes.
assemble (assembler)       A [adresse]
compare (comparer)         C plage adresse
dump (lister)              D [plage]
enter (entrer)             E adresse [liste]
fill (remplir)             F Plage liste
go (exécuter)              G [=adresse] [adresses]
hex (hexadécimal)          H valeur1 valeur2
input (entrer depuis port) I port
load (charger)             L [adresse] [lecteur] [secteur] [nbre]
move (déplacer)            M plage adresse
name (désigner)            N [nchemin] [listearg]
output (envoyer sur port)  O port val
proceed (avancer)          P [=adresse] [nbre]
quit (quitter)             Q
register (registre)        R [registre]
search (rechercher)        S plage liste
trace (tracer)             T [=adresse] [valeur]
unassemble (désassembler)  U [plage]
write (écrire)             W [adresse] [lecteur] [secteur] [nbre]
allocate expanded memory (allouer EMS)      XA [#pages]
deallocate expanded memory (désallouer EMS) XD [desc]
map expanded memory pages (affecter)        XM [pageL] [pageP] [desc]
display expanded memory status (état EMS)   XS

Fichiers MAP générés par Turbo Pascal Retour en haut de page

Pour comprendre l'organisation du programme exécutable, il est nécessaire de savoir comment ont été organisées les informations (données, traitements) lors de la compilation. Le fichier MAP est là pour cela. Pour le faire générer par le compilateur Turbo Pascal, il faut activer l'option Map file detailed dans le menu Options/Linker. Il ne faut pas oublier de demander une compilation sur disque ! (menu Compile/Destination disk). En compilant le programme source debug00.pas, nous obtenons donc un fichier debug00.exe (programme exécutable) et un fichier debug00.map (fichier map).

Exemple Retour en haut de page

programme source Retour en haut de page

01  program debug00;
02
03  begin
04  end.

fichier MAP Retour en haut de page

Start  Stop   Length Name    Class

00000H 00016H 00017H debug00 CODE
00020H 005B1H 00592H System  CODE
005C0H 0085BH 0029CH DATA    DATA
00860H 0485FH 04000H STACK   STACK
04860H 04860H 00000H HEAP    HEAP

 

Address   Publics by Value

0000:0000 @
005C:0002 OvrCodeList
005C:0004 OvrHeapSize
005C:0006 OvrDebugPtr
005C:000A OvrHeapOrg
005C:000C OvrHeapPtr
005C:000E OvrHeapEnd
005C:0010 OvrLoadList
005C:0012 OvrDosHandle
005C:0014 OvrEmsHandle
005C:0016 HeapOrg
005C:001A HeapPtr
005C:001E HeapEnd
005C:0022 FreeList
005C:0026 FreeZero
005C:002A HeapError
005C:002E ExitProc
005C:0032 ExitCode

Address   Publics by Value


005C:0034 ErrorAddr
005C:0038 PrefixSeg
005C:003A StackLimit
005C:003C InOutRes
005C:003E RandSeed
005C:0042 SelectorInc
005C:0044 Seg0040
005C:0046 SegA000
005C:0048 SegB000
005C:004A SegB800
005C:004C Test8086
005C:004D Test8087
005C:004E FileMode
005C:0050 Input
005C:0150 Output
005C:0250 SaveInt00
005C:0254 SaveInt02

Address   Publics by Value


005C:0258 SaveInt1B
005C:025C SaveInt21
005C:0260 SaveInt23
005C:0264 SaveInt24
005C:0268 SaveInt34
005C:026C SaveInt35
005C:0270 SaveInt36
005C:0274 SaveInt37
005C:0278 SaveInt38
005C:027C SaveInt39
005C:0280 SaveInt3A
005C:0284 SaveInt3B
005C:0288 SaveInt3C
005C:028C SaveInt3D
005C:0290 SaveInt3E
005C:0294 SaveInt3F
005C:0298 SaveInt75

Line numbers for debug00(DEBUG00.PAS) segment debug00

3 0000:0000 4 0000:000F

Program entry point at 0000:0000

Utilisation de debug Retour en haut de page

C:\>debug debug00.exe

-u
1608:0000 9A00000A16    CALL 160A:0000
1608:0005 55            PUSH BP
1608:0006 89E5          MOV BP,SP
1608:0008 31C0          XOR AX,AX
1608:000A 9ACD020A16    CALL 160A:02CD
1608:000F 5D            POP BP
1608:0010 31C0          XOR AX,AX
1608:0012 9A16010A16    CALL 160A:0116

-r
AX=0000 BX=0000 CX=0B6A DX=0000 SP=4000 BP=0000 SI=0000 DI=0000
DS=15F8 ES=15F8 SS=168E CS=1608 IP=0000 NV UP EI PL NZ NA PO NC
1608:0000 9A00000A16    CALL 160A:0000


Page créée en octobre 2002
Auteur : Jean HENRI