SE : TP4

Objectifs:

I / Utilisation des programmes d'assemblage

2 ) Explication du contenu de prog1.lst

; Light Macro Assembler Version 2.13C 2001-10-13 13:30:34
; source file : prog1.asm

ASSUME cs:Code,ds:Data
Data SEGMENT PARA PRIVATE
N1 DW 25h ; 0000 25 00
N2 DW 4h ; 0002 04 00
Prod DW ? ; 0004 - 0005
Data ENDS ; 0006

Code SEGMENT PARA PRIVATE
main: ; 0000
mov ax,Data ; 0000 B8 00-00 R
mov ds,ax ; 0003 8E D8
mov ax,WORD PTR [N1] ; 0005 A1 00-00 R
mov cx,WORD PTR [N2] ; 0008 8B 0E 00-00 R
mov dx,0h ; 000C BA 00 00
boucle: ; 000F
add dx,ax ; 000F 03 D0
loop SHORT Code:boucle ; 0011 E2 FC
mov WORD PTR [Prod],dx ; 0013 89 16 00-00 R
mov ah,4Ch ; 0017 B4 4C
int 21h ; 0019 CD 21
Code ENDS ; 001B
END main

; summary (23 source lines
; 1. SEGMENTS/GROUPS
; name type size align combine class group
; Data .......... SEGMENT 6h PARA PRIVATE
; Code .......... SEGMENT 1Bh PARA PRIVATE
; ; 2. LABELS
; name type segment offset defined-by scope
; N1 ............ WORD Data 0h dw
; N2 ............ WORD Data 2h dw
; Prod .......... WORD Data 4h dw
; main .......... NEAR Code 0h :
; boucle ........ NEAR Code Fh :
;
; 3. MACROS : none

Dans la première partie, on a le programme en assembleur, avec en face de chaque ligne l'adresse mémoire dans le segment puis la traduction en langage machine ( octets ) des commandes et des valeurs ( ou adresses ) utilisées dans la ligne de programme.

Dans une seconde partie, on trouve un résumé du programme assembleur en 3 parties : les segments et les groupes, les etiquettes et enfin les macros.

Segments et Groupes :

Les 2 segments du programme : Data et Code sont répertoriés avec leur type ( SEGMENT ), leur taille en héxadécimale (6h , 1Bh ),

Etiquettes :

Toutes les variables et les étiquettes de ligne de programme sont listées avec leur type (WORD, NEAR ), le segment dans lequel elles ont été déclarées (Data, Code ), leur adresse par rapport au segment de mémoire( 0h, 2h, 4h, 0h, Fh) et la déclaration de leur type (dw).

II / Utilisation et explication du programme de Symdeb avec prog1.exe

26CA:0000 B8C926 MOV AX,26C9
26CA:0003 8ED8 MOV DS,AX
26CA:0005 A10000 MOV AX,[0000]
26CA:0008 8B0E0200 MOV CX,[0002]
26CA:000C BA0000 MOV DX,0000
26CA:000F 03D0 ADD DX,AX
26CA:0011 E2FC LOOP 000F
26CA:0013 89160400 MOV [0004],DX
26CA:0017 B44C MOV AH,4C ;'L'
26CA:0019 CD21 INT 21

Sur une même ligne, on a d'abord l'adresse du segment de mémoire, puis l'adresse dans le segment de la commande et de ses arguments, qu'on retrouve ensuite en langage machine et enfin en langage assembleur.

U indique donc que l'on veut obtenir le tableau décrit ci-dessus; CS désigne l'adresse de début du segment et 0000 et 001A précise les bornes de la mémoire dont on veut avoir la signification. Ici on a donc les octets stockés de l'adresse CS:0000 à CS:001A.

Par contre, on n'a pas compris la présence de " ;'L' " aprés la ligne débutant à l'adresse 0017.

20C7:0000 E8 13 D9 3D 58 44 75 03-59 EB 16 8F 06 71 6D 80 h.Y=XDu.Yk...qm.
20C7:0010 26 01 70 F7 E8 29 15 72-AC FE 06 00 70 88 16 02 &.pwh).r,~..p...

On a la même codification que précédemment pour 20C7:0000 et 20C7:0010. Dans ce cas précis, c'est la valeur hexadécimale de l'adresse du segment que l'on indique directement, sans passer par le registre CS.

DB donne le codage en "little-endian" des octets stockés entre les bornes fixées par 20C7:0000 et 20C7:001F.

20C7:0000 13E8 3DD9 4458 0375 EB59 8F16 7106 806D
20C7:0010 0126 F770 29E8 7215 FEAC 0006 8870 0216

DW donne, à l'inverse de précédemment, le codage en "big-endian" en groupant les octets 2 à 2, toujours situées entre les bornes fixées en entrées.

AX=0000 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26B9 ES=26B9 SS=26C9 CS=26CA IP=0000 NV UP EI PL NZ NA PO NC
26CA:0000 B8C926 MOV AX,26C9

Cette commande donne l'état de plusieurs registres : AX, ...., IP; de plusieurs drapeaux : NV,...,NC ainsi que l'adresse de la prochaine commande, sa traduction en langage machine et en langage assembleur.

-T
AX=26C9 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26B9 ES=26B9 SS=26C9 CS=26CA IP=0003 NV UP EI PL NZ NA PO NC
26CA:0003 8ED8 MOV DS,AX
-T
AX=26C9 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=0005 NV UP EI PL NZ NA PO NC
26CA:0005 A10000 MOV AX,[0000] DS:0000=0025
-T
AX=0025 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=0008 NV UP EI PL NZ NA PO NC
26CA:0008 8B0E0200 MOV CX,[0002] DS:0002=0004
-T
AX=0025 BX=0000 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=000C NV UP EI PL NZ NA PO NC
26CA:000C BA0000 MOV DX,0000
-T
AX=0025 BX=0000 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=000F NV UP EI PL NZ NA PO NC
26CA:000F 03D0 ADD DX,AX
-T
AX=0025 BX=0000 CX=0004 DX=0025 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=0011 NV UP EI PL NZ NA PO NC
26CA:0011 E2FC LOOP 000F
-T
AX=0025 BX=0000 CX=0003 DX=0025 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=000F NV UP EI PL NZ NA PO NC
26CA:000F 03D0 ADD DX,AX
-T
AX=0025 BX=0000 CX=0003 DX=004A SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=0011 NV UP EI PL NZ NA PO NC
26CA:0011 E2FC LOOP 000F

"T" exécute la commande en cours du programme, il affiche l'état des registres, des drapeaux et l'instruction suivante.

-P
AX=0025 BX=0000 CX=0000 DX=0094 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=0013 NV UP EI PL NZ AC PO NC
26CA:0013 89160400 MOV [0004],DX DS:0004=0000

"P" avance les étapes du programme jusqu'à exécuter l'instruction de la ligne suivante. Il réalise le même affichage que précédemment.

-T
AX=0025 BX=0000 CX=0000 DX=0094 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=0017 NV UP EI PL NZ AC PO NC
26CA:0017 B44C MOV AH,4C ;'L'

"T" exécute la commande en cours du programme, il réalise le même affichage que précédemment.

-T AX=4C25 BX=0000 CX=0000 DX=0094 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26CA IP=0019 NV UP EI PL NZ AC PO NC
26CA:0019 CD21 INT 21 ;Terminate a Process

"T" exécute la commande en cours du programme, il affiche l'état des registres, des drapeaux et indique la fin du programme.

III ) Utilisation de Symdeb pour les autres programmes

Début du programme :

AX=26CA BX=0000 CX=001A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26BA ES=26BA SS=26CA CS=26CA IP=0003 NV UP EI PL NZ NA PO NC
26CA:0003 8ED8 MOV DS,AX

Fin du programme :

AX=4C04 BX=0000 CX=001A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26CA ES=26BA SS=26CA CS=26CA IP=0018 NV UP EI PL ZR NA PE NC
26CA:0018 CD21 INT 21 ;Terminate a Process

Début du programme :

AX=26CA BX=0000 CX=0029 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26BA ES=26BA SS=26CA CS=26CB IP=0003 NV UP EI PL NZ NA PO NC
26CB:0003 8ED8 MOV DS,AX

Fin du programme :

AX=4C5A BX=0000 CX=0000 DX=005B SP=0000 BP=0000 SI=0000 DI=0000
DS=26CA ES=26BA SS=26CA CS=26CB IP=0017 NV UP EI PL NZ NA PO NC
26CB:0017 CD21 INT 21 ;Terminate a Process

Début du programme :

AX=26C9 BX=0000 CX=0028 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=26B9 ES=26B9 SS=26C9 CS=26C9 IP=0003 NV UP EI PL NZ NA PO NC
26C9:0003 8ED8 MOV DS,AX

Fin du programme :

AX=4C30 BX=0000 CX=0000 DX=0030 SP=0000 BP=0000 SI=0000 DI=0000
DS=26C9 ES=26B9 SS=26C9 CS=26C9 IP=0026 NV UP EI PL ZR NA PE NC
26C9:0026 CD21 INT 21 ;Terminate a Process

Maxime CHAMBREUIL - Samy FOUILLEUX - ASI3 - Année 2001 / 2002