IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Problème avec INT 13h : lire et écrire secteur de disquette


Sujet :

Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut Problème avec INT 13h : lire et écrire secteur de disquette
    Salut.

    Je voudrais pouvoir écrire et lire un secteur d'une disquette mais je n'y arrive pas . J'utilise l'int 13h pour écrire; le prog se compile mais malheuresement rien ne se sauvegarde puisque je formate ma disquette et j'y écris quelque chose mais la taille ne change pas.
    Voici mon prog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    bits 16
    org 100h
    segment .text
    mov ah,03h
    mov al,01h;ecrire un secteur
    mov ch,05h;choisir le cylindre
    mov cl,03h;choisir le secteur
    mov bx,x;
    sub dx,dx;ecrire x
    mov es,dx;
    mov dh,00h;la tete de lecture
    mov dl,00h;le lecteur
    int 13h
    ret
    segment .data
    x db 13
    J'aimerais bien quelqu'un m'aide à trouver l'erreur et à corriger et, si c'est possible, la même fonction qui pourrait permettre la lecture d'un secteur avec int 13h.
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Bonjour et bienvenue sur le forum de developpez.com :

    malheuresement rien ne se
    sauvgarde puisque je formate ma disquette et j'y ecrit quelque chose mais la taille ne change pas
    Je n'ai pas trop compris cette phrase. Es-tu sûr que le secteur n'est pas écrit ? Il faut bien faire attend, si tu écris n'importe comment sur la disquette, il est fort possible que tu corrompes le système de fichier (souvent FAT), et donc faire un double clic sur celle-ci t'indiquera qu'elle n'est pas formatée (car non valide FAT étant donné que ça a été corrompu).

    Tu parles de quel tailles ? Si c'est la taille que tu obtiens par rapport au propriété de la disquette, c'est normal car tu outrepasses le système de fichier.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    oui c'est de ca que je parle je trouve que rien n'a ete ecrit sur la disquette
    mais quand j'essaye avec l'int 26h sa ecrit dessus mais pas un secteur mais plusieurs piste,j'ai calculé j'ai trouvé a peut-prets 6 pistes(et là quand je verifie dans propriete je trouve que 60ko ont etes ecrits).Alors selon tes dires
    millie c'est normal que je trouve rien d'ecrit dessus quand je mets propriete de la disquette.Mais il rest toujours un problème c'est cmt lire les donnès de la disquette j'essaye avec la meme interuption mais avec la fct 02h dont les entrèes sont:

    AH = 02h
    AL = number of sectors to read (must be nonzero);le nombre de secteur
    CH = low eight bits of cylinder number;cylindre
    CL = sector number 1-63 (bits 0-5);secteur
    high two bits of cylinder (bits 6-7, hard disk only)
    DH = head number;face
    DL = drive number (bit 7 set for hard disk);lecteur
    ES:BX -> data buffer;c'est la ou je sais plus quoi faire
    si quelqun pouvait me donnez le code qui permettrait la lecture serait très sympa ou au moins me donnez un exemple de quoi mettre dans ES:BX .Merci d'avance

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    En fait, l'interruption 13h est une interruption du BIOS, et il ne connait aucun format de fichier. Il ne connait que les termes : secteur, piste et disque. Les seules choses que tu peux faire sont d'écrire ou de lire directement dans un secteur donné.

    Pour utiliser correctement des fichiers sur une disquette, il te faut utiliser des fonctions de plus haut niveau (intégrant par exemple la FAT), l'interruption 21h (sous DOS réalise cela, mais comme tu n'as pas précisé sous quel système tu travaillais...)
    Avec :
    ah = 3Ch > création de fichier
    ah = 3Dh > ouverture de fichier
    ...

    Par exemple, si tu n'as aucun système pour t'aider (par exemple si c'est ton propre OS), alors il te faudra écrire ton propre système de fichier (et donc tes propres interruptions où tes propres appels systèmes)

  5. #5
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Par défaut
    oui c'est dans l'optique d'un os que je dois faire ça mais puisque je suis un habitué du c et non de l'asembleur j'ai quelque problème.Mais je suis obligé d"ecrire cette partie de prg en assembleur puis l'inserrer dans une fct inline.J'ai trouvé un peu partout sur internet que c'est l'int 13h que je dois utilisé.Alors considérons que le prg que j'ai écrit auparavant marche c'est la lecture qui me pose problème,j'ai lu aussi qu'il faut utilisé ah=02h de int 13h pour lire c'est la que je demande de l'aide pour le code je sais pas comment faire.

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    http://www.bellamyjc.org/fr/theoriem...t2.html#int13h

    Comment as-tu vérifié que ton programme ne marchait effectivement pas ? Il ne faut pas passer par la lecture standard du disque, mais par un utilitaire qui permet de regarder directement les secteurs de la disquette.

    Quand est-il de ton format de fichier ? Comptes-tu l'écrire en assembleur ou en C. En tout cas, juste comme ça, avec l'interruption 13h, je repète que tu ne pourrais faire que des accès bas niveau au disque et en aucun cas écrire des fichiers (comme avec l'interruption 21h) à moins de définir son propre système de fichier.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Lire et écrire dans les classeurs Excel fermés : Problème avec CopyFromRecordset
    Par schumiaja dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2015, 20h18
  2. Problème avec la fonction Lire.S()
    Par Luffy49 dans le forum Langage
    Réponses: 9
    Dernier message: 16/03/2007, 20h21
  3. [Débutant] Ecrire sur disque dur avec int 13h
    Par bregolhen dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 15h06
  4. Problème avec un secteur de boot en mode protégé...
    Par Nico*3-3 dans le forum Assembleur
    Réponses: 17
    Dernier message: 10/02/2005, 19h32
  5. Problème avec l'affichage de souris INT 33,01h
    Par belgampaul dans le forum Assembleur
    Réponses: 7
    Dernier message: 07/12/2004, 21h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo