1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
;******************************************************************************;
;* *;
;* Assembleur : TASM DSSDEMO *;
;* TLINK DSSDEMO *;
;* *;
;* *;
;* Attention, il faut placer un fichier contenant du texte dans le *;
;* dossier courant, il doit avoir pour nom : fichier.txt *;
;* *;
;******************************************************************************;
;-- 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
; variables relatives à l'affichage (chaines,...)
chaine_affich_contenu db 10d,13d,"Voici le contenu du fichier : $"
chaine_erreur db 10d,13d,"/!\ ERREUR ouverture/lecture/ecriture/fermeture du fichier$"
saut db 10d,13d,"$" ; affiche un saut de ligne
; variables relatives aux fichiers à manipuler
buffer dw 100,'$' ;taille du buffer de lecture
bytes_lus dw 0,'$' ;nombre d'octets lus
fichier2 db "fichier.cry",0 ;chemin du fichier
fh2 dw ? ;handle (n° du fichier)
tampon2 dw 65000d ;tampon
fichier1 db "fichier.txt",0 ;chemin du fichier
fh1 dw ? ;handle (n° du fichier)
tampon1 dw 65000d ;tampon
;-- Codes de programmes ---------------------------------------------------------;
.CODE ;segment de code
mov ax,@DATA ;placement de l'adresse du segment de données
mov ds,ax ;dans DS via AX.
mov es,ax ;initialise extra segment
;-- Traitement des données ----------------------------------------------------;
;-- creation du fichier qui recevra les données cryptées
mov ah,3Ch ;fonction de création de fichier
mov cx,00h ;atttributs du fichier (0 = normal)
lea dx,fichier2 ;copie du nom de fichier dans ds:dx
int 21h
mov fh2,ax
;-- ouverture du fichier original -----------------------------------------;
mov ah,3dh
mov al,0 ;mode d'ouverture : 0 = lecture seule
lea dx,fichier1
int 21h
jb erreur ;si le cf est à 1 -> msg d'erreur
mov fh1,ax ;copie du handle dans fh1
;-- lecture du contenu du fichier original --------------------------------;
continuer_lecture1:
mov ah,3fh
mov bx,fh1 ;copie du handle (n° du fichier ouvert) dans bx
mov cx,buffer ;nombre de caractères à lire
lea dx,tampon1 ;copie du buffer dans ds:dx
int 21h
jb erreur ;si le cf est à 1 -> msg d'erreur
mov bytes_lus,ax ;mise en mémoire du nombre de bytes lus
;-- affichage du contenu du fichier ---------------------------------------;
mov dx,offset saut
mov ah,09h ;affiche la chaine de caractère saut de ligne
int 21h
mov dx,offset tampon1
mov ah,09h ;affiche le contenu du tampon
int 21h
;-- cryptage et recopie ds autre fichier ----------------------------------------;
;-- cryptage du contenu du fichier ---------------------------------------;
mov cx,bytes_lus ;on met le nombre d'octets lus dans cx (pour la boucle)
mov di,0d ;on initialise cx (pour la boucle)
octet_suivant:
xor tampon1+[di],00101000b ;cryptage : inversion des bits 2 et 4
inc di ;on incrémente di pour passer à l'octet suivant
loop octet_suivant ;on passe à l'octet suivant
jmp suite
erreur: ;étape, sinon, out of range pour le saut
jmp erreur1
continuer_lecture:
jmp continuer_lecture1
suite:
;-- affichage du contenu crypté -------------------------------------------;
mov dx,offset saut
mov ah,09h ;affiche la chaine de caractère saut de ligne
int 21h
mov dx,offset tampon1
mov ah,09h ;affiche le contenu du tampon
int 21h
;-- Ouverture du fichier --------------------------------------------------;
mov ah,3dh
mov al,1 ;mode d'ouverture : 1 = écriture seule
lea dx,fichier2
int 21h
mov fh2,ax ;copie du handle dans fh1
;-- positionnement en fin de fichier --------------------------------------;
mov ah,42h ;fonction de positionnement ds le fichier
mov bx,fh2 ;copie du handle (n° du fichier ouvert) dans bx
mov al,2 ;code de la distance (2=par rapport à la fin du fichier)
mov dx,0 ;distance dans ds:dx (0 car on veut se placer à la fin du fichier)
mov cx,0 ;idem
int 21h
;-- écriture du fichier ---------------------------------------------------;
mov ah,40h
mov bx,fh2 ;copie du handle (n° du fichier ouvert) dans bx
mov cx,buffer ;nombre de caractères à écrire
lea dx,tampon1 ;copie du buffer dans ds:dx
int 21h
;-- fermeture du fichier --------------------------------------------------;
mov ah,3eh
mov bx,fh2 ;copie du handle (n° du fichier ouvert) dans bx
int 21h
mov ax,bytes_lus ;récup de ax ds la pile
cmp ax,buffer ;si le nombre d'octets lus = taille buffer...
je continuer_lecture ;...on continue la lecture
;-- fermeture du fichier --------------------------------------------------;
mov ah,3eh
mov bx,fh1 ;copie du handle (n° du fichier ouvert) dans bx
int 21h
jb erreur1 ;si le cf est à 1 -> msg d'erreur
;-- message d'erreur en cas de problème avec un fichier -------------------;
jmp fin
erreur1: mov dx,offset saut
mov ah,09h ;affiche la chaine de caractère saut de ligne
int 21h
mov dx,offset chaine_erreur
mov ah,09h ;affiche la chaine de caractères 'ERREUR'
int 21h
mov dx,offset saut
mov ah,09h ;affiche la chaine de caractère saut de ligne
int 21h
fin:
;-- Fin -------------------------------------------------------------------------;
mov ax,4C00h ;Quitter le programme
int 21h ;Appeler l'interruption DOS
END |
Partager