Les fichiers

 

Beaucoup pensent que la gestion des fichiers en ASM est très complexe. Voici de quoi les faire changer d'avis...

La gestion des fichiers se fait grâce à l'interruption 21h du DOS (qu'est ce qu'on ferait sans elle !!).

     

Fonction 3Dh : Ouvrir un fichier

Entrées

AH 3Dh
AL Mode d'accès. Les principaux sont :
  0 = lecture seule
  1 = écriture seule
  2 = lecture + écriture
DS:DX Adresse logique du nom de fichier

Sorties

Carry Flag = 0 Fichier ouvert. AX = handle du fichier
Carry Flag = 1 Erreur d'ouverture. AX = code d'erreur
  2 = fichier non trouvé
  3 = chemin non trouvé ou fichier n'existe pas
  4 = plus de handle disponible
  5 = accès refusé

En pratique...

.data
nom db "fichier.dat",0 ; nom du fichier en chaîne ASCIIZ
.code
...
mov ax, 3D00h ; fonction 3Dh + lecture seule
mov dx, offset nom ; adresse effective de la chaine
int 21h
jc ... ; jump si erreur d'ouverture

Rmq:

* Le handle est un nombre utilisé par le DOS pour distinguer chaque fichier ouvert. Chaque fichier ouvert possède son propre handle.

* Le nom du fichier est stocké sous forme d'un chaîne ASCIIZ (terminée par le    caractère de code ASCII 0)

* Le pointeur du fichier est dirigé sur le premier octet du fichier.

     

Fonction 3Eh : Fermer un fichier

Tout fichier ouvert doit forcément être fermé par la suite. Tout comme la fonction fclose du C, la fermeture provoque l'écriture dans le fichier des données qui seraient toujours dans les buffers.

Entrées

AH 3Eh
BX Handle du fichier à fermer.

Sorties

Carry Flag = 0 Fichier fermé
Carry Flag = 1 Erreur de fermeture. AX = code d'erreur :
  6 = Handle non autorisé ou fichier non ouvert

En pratique...

mov ah, 3Eh
pop bx ; restauration du handle dans BX
int 21h
jc ... ; jmp si erreur

Rmq:

* Les périphériques d'entrées ou de sorties standards sont considérés comme des fichiers et possèdent donc un handle (0 à 4). La fermeture d'un de ces handle rendrait impossible l'envoi de caractères à partir du clavier, ou l'affichage de caractères à l'écran !! Gniark Gniark !!

     

Fonction 3Fh : Lire dans un fichier

Cette fonction permet de lire un nombre déterminé d'octets dans un fichier ouvert. Les caractères lus sont placés dans un buffer.

Entrées

AH 3Fh
BX Handle du fichier
CX Nombre d'octets à lire
DS:DX Adresse logique du buffer

Sorties

Carry Flag = 0 Lecture réussie. AX = nombre d'octets lus.
Carry Flag = 1 Erreur. AX = code d'erreur
  5 = Accès refusé
  6 = Handle non autorisé ou fichier non ouvert

En pratique...

.data
buf db 100 dup ('0') ; déclaration du buffer
.code
... ; ouverture du fichier
mov ah, 3Fh ; fonction 3Fh
pop bx ; restauration du handle
mov cx, 20 ; lire 20 octets
mov dx, offset buf ; adresse effective du buffer
int 21h
jc ... ; jmp si erreur

     

Fonction 40h : Ecrire dans un fichier

Cette fonction permet d'écrire un nombre déterminé d'octets dans un fichier. Les caractères à placer doivent être présents dans un buffer.

Entrées

AH 40h
BX Handle du fichier
CX Nombre d'octets à écrire
DS:DX Adresse logique du buffer

Sorties

Carry Flag = 0 Ecriture réussie. AX = nombre d'octets écrits.
Carry Flag = 1 Erreur. AX = code d'erreur
  5 = Accès refusé
  6 = Handle non autorisé ou fichier non ouvert

En pratique...

.data
buf db 100 dup ('0') ; déclaration du buffer
.code
... ; ouverture du fichier
mov ah, 40h ; fonction 40h
pop bx ; restauration du handle
mov cx, 20 ; écrire 20 octets
mov dx, offset buf ; adresse effective du buffer
int 21h
jc ... ; jmp si erreur


     

© Copyright Benjamin Fonzé 1999/2000