voila l'objectif de ce programme c est de comparer deux fichiers de longueur differente et d'y trouver tt les éléments commun kelke soit leur position. avec pour longueur de chaine a rechercher fournie par l utilisateur.
je ne vous ca che pas ke c est un projet scolaire, mais etant bloqué depuis une semaine, je me suis dis ke kelkun pourais m aider.
a votre bon coeur ^^
;***********************************;
;* *;
;* Assembleur : TASM DSSDEMO *;
;* : TLINK DSSDEMO *;
;* *;
;***********************************;
;-- Paramétrage du compilateur --------------------------------------------------;
.MODEL SMALL ;64ko pour les données et 64ko pour le prog
.STACK 256 ;Réserver 256 octets pour la pile
;-- Zone des données
.DATA ;segment de donnée
welc DB "Bienvenu dans ce programme de recherche de chaine dans deux fichiers :p",13,10,"$"
Msg DB 13,10,"Entrer un nombre pour quantifier la chaine a rechercher: ","$"
MsgE db 13,10,"Erreur lors de l'ouverture du fichier ","$"
Msg3 db 13,10,"Les chaines qui coincide entre les deux fichiers sont :","$",13,10
Msg4 db 13,10,"Et voila ki fini ce fichier merci et aurevoir","$"
Handle1 DW ?,"$"
Handle2 DW ?,"$"
TAILLE1 DW ?,"$"
Ttmp1 DW ?,"$"
TAILLE2 DW ?,"$"
Ttmp2 DW ?,"$"
File1 DB "c:\text1.txt",0,"$"
File2 DB "c:\text2.txt",0,"$"
LGchain DW ?,"$"
cpt1 DW ?,"$"
cpt2 DW ?,"$"
BUFFER DB 200 DUP("$")
BUFFER2 DB 200 DUP("$")
;-- Codes de programmes ---------------------------------------------------------;
.CODE
DEBUT: MOV AX,@DATA
MOV DS,AX
;***presentation
lea dx,welc
mov ah,09h ;pour afficher phrase de bienvenu
int 21h
;***recuperation longueur chaine
lea dx,Msg
mov bh,09h ;pour afficher Msg
int 21h
mov ah,01h
int 21h
sub al,30h
mov bx,10
mul bx
;multiplie le chiffre encoder par dix et le met ds AX
MOV LGchain,AX ;additionne les dizaines a la valeur de la variable temporaire
mov ah,01h
int 21h
sub al,30h
MOV AH,0
add LGchain,AX ;additionne les unités a la valeur de la variable temporaire
;***recupere le handle du premier fichier
MOV AH,3DH ;ouverture du fichier
MOV AL,2 ;mode d'ouverture
LEA DX,File1 ;emplacement
INT 21H
MOV Handle1,AX ;sauvegarde du handle du fichier
;***taille du premier fichier
XOR AX,AX ;remise a 0 de AX
MOV AH,42H ;manipulation du pointeur du premier fichier
MOV BX,Handle1
MOV DX,0
MOV cx,0
MOV AL,2 ;mode d'ouverture 2 pour se metre a la fin du fichier
int 21h
MOV TAILLE1,AX ; recupere la taille du fichier de AX pour le sauvegarder ds Taille1
MOV Ttmp1,AX ;sert de seconde sauvegarde au cas ou
;***recupere le handle du second fichier
MOV AH,3DH ;ouverture du fichier
MOV AL,2 ;mode d'ouverture
LEA DX,File2 ;emplacement
INT 21H
MOV Handle2,AX ;sauvegarde du handle du fichier
;***taille du second fichier
MOV AH,42H ;meme manip ke pour le premier fichier
MOV BX,Handle2
MOV DX,0
MOV cx,0
MOV AL,2
int 21h
MOV TAILLE2,AX
MOV Ttmp2,AX
;***mise en place
MOV CX,LGchain
SUB TAILLE1,CX ;pour ne pas depacer la fin du fichier 1
MOV CX,LGchain
SUB TAILLE2,CX ;pour ne pas depacer la taille du fichier 2
lea dx,Msg3
mov ah,09h ;pour afficher la phrase ki annonce les bouts de chaine ki sont similaire entre les deux fichiers
int 21h
MOV CX,0
MOV cpt2,CX
jmp RECHARGE2 ;saute l instruction d'affichage de chaine identique
TEMP:
JMP FIN ;comme ma doucle est trop long ceci est un jump intermediaire
;***ma boucle de comparaison
AFFICHE:
lea dx,BUFFER2
mov ah,09h ;pour afficher la phrase ki annonce les bouts de chaine ki sont similaire entre les deux fichiers
int 21h
RECHARGE2:
;*** chargement du buffer 2 par rapport a la lg de la chaine souhaiter
MOV CX,TAILLE2
MOV BX,cpt2
cmp BX,CX ;sert pour sortire du prog et ne pas boucler a l infini
JA TEMP
MOV AH,42H ;charger le buffer
MOV BX,Handle2
MOV DX,0
MOV cx,cpt2
MOV AL,0
int 21h
MOV AH,3FH
MOV BX,Handle2
MOV CX,LGchain
LEA DX,BUFFER2
int 21h ;fin charge buffer
MOV CX,0
MOV cpt1,CX ;reinitialise le compteur 1
INC cpt2 ;incremente le compteur du second fichier
RECHARGE1:
;***chargement du premier buffer
MOV CX,TAILLE1
MOV BX,cpt1
cmp BX,CX ;sert pour sortire du prog et ne pas boucler a l infini
JA RECHARGE2
MOV AH,42H ;charger le buffer
MOV BX,Handle1
MOV DX,0
MOV cx,cpt1
MOV AL,0
int 21h
MOV AH,3FH
MOV BX,Handle1
MOV CX,LGchain
LEA DX,BUFFER
int 21h ;fin charge buffer
xor bx,bx ;bx=0
mov bX,LGchain ;copie le nombre de caractère a lire dans BX
mov BUFFER2+[bx],'$' ;ajout du caractère '$' à la fin de la chaîne
xor bx,bx ;bx=0
mov bX,LGchain ;copie le nombre de caractère a lire dans BX
MOV BUFFER+[bx],'$'
INC cpt1 ;incremente le compteur du premier fichier
cld ;direction flag=0 (DI et SI s'incrémente)
xor ch,ch ;ch=0
mov CX,LGchain
lea si,BUFFER2 ;SI contient l'adresse du premier offset de la chaine du second fichier
lea di,BUFFER ;DI contient l'adresse du premier offset de la chaine du premier fichier
REP CMPSB ;comparaison des 2 chaines
JNE RECHARGE1 ;pour avancer ds le premier fichier
JMP AFFICHE
;***fin du programme
FIN:
lea dx,Msg4
mov ah,09h
int 21h
MOV AH,3EH
LEA BX,Handle1
int 21h
MOV AH,3EH
LEA BX,HANDLE2
int 21h
MOV AX,4C00H ;Termine le programme
INT 21H
;--- Fin -------------------------------------------------------------------------;
End debut