SE : TP4 |
; 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).
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.
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.
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.
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" exécute la commande en cours du programme, il affiche l'état des registres, des drapeaux et l'instruction suivante.
"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" exécute la commande en cours du programme, il réalise le même affichage que précédemment.
"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=0000Début du programme :
AX=26CA BX=0000 CX=0029 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000Fin du programme :
AX=4C5A BX=0000 CX=0000 DX=005B SP=0000 BP=0000 SI=0000 DI=0000Début du programme :
AX=26C9 BX=0000 CX=0028 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000Fin du programme :
AX=4C30 BX=0000 CX=0000 DX=0030 SP=0000 BP=0000 SI=0000 DI=0000Maxime CHAMBREUIL - Samy FOUILLEUX - ASI3
- Année 2001 / 2002