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 de suppression de fichier


Sujet :

Assembleur

  1. #1
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut Problème de suppression de fichier
    Salut, j'ai un probleme pour effacer un fichier trouvé à l'aide d'un masque.
    Voici le code, ça sera plus claire :
    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
    17
    18
    19
    20
     
    <...>
    mov dx, offset masque
    xor cx, cx
    mov ah, 4eh       ;recherche du 1er fichier *.txt
    int 21h
    jc RienTrouvé     ;si CF = 1 ==> rien a été trouvé
    mov dx, offset msg_succes
    mov ah,09h
    int 21h
     
    mov dx, 80h + 1eh  ;on met ds dx le nom+extension du fichier trouvé
    mon ah, 41h           ;on l'efface
    int 21h
     
    RienTrouvé :
    <...>
     
    masque db "*.txt",0
    msg_succes db "Un fichier a été trouvé"
    Le programme trouve bien un fichier car j'ai le message de succes en revanche il ne l'efface pas... j'ai essayé l'interruption 41h en lui passant direct un path et cela marche bien

    Le probleme vient donc de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mov dx, 80h + 1eh  ;on met ds dx le nom+extension du fichier trouvé
    Or c'est bien à cette adresse que ce trouve le nom du fichier trouvé d'apres le tuto de Benoit-M
    Voila, si quelqu'un trouve mon erreur, je m'inclinerai devant lui
    Merci pour vos réponses
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 418
    Points
    59 418
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Après le FindFirst, le nom du 1er fichier correspondant doit être lu dans la DTA (ce que tu fais). Mais le registre DS pointe-t-il bien sur le début du PSP (on ne voit pas le début du programme dans l'extrait de code) ?

    Autre possibilité : le 1er fichier trouvé serait un répertoire, qui ne peut être supprimé par la fonction 41h de l'interruption 21h.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Euh.. là tu me poses une colle
    Voila le code entier
    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
    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
     
    .386
     
    code segment use16
     
    assume cs:code, ds:data, ss:pile
     
    debut :
    push data
    pop ds
     
    mov dx, offset masque
    xor cx, cx
    mov ah, 4eh       ;recherche du 1er fichier *.txt
    int 21h
    jc RienTrouvé     ;si CF = 1 ==> rien a été trouvé
    mov dx, offset msg_succes
    mov ah,09h
    int 21h
     
    mov dx, 80h + 1eh  ;on met ds dx le nom+extension du fichier trouvé
    mon ah, 41h           ;on l'efface
    int 21h
     
    mov ah,4ch
    int 21h
     
    code ends
     
    data segment use16
     
    	msg_succes db "Succes"
    	masque  db "*.txt",0
     
    data ends
     
    pile segment stack use16
     
    	remplissage db 256 DUP(?)
     
    pile ends
     
    end debut
    Voila
    Merci pour ton aide
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 418
    Points
    59 418
    Billets dans le blog
    2
    Par défaut
    Alors c'est la 1ère possibilité évoquée. En début de programme, DS pointe sur le PSP. Tu pourrais donc commencer par sauvegarder la valeur de DS pour l'utiliser avec la fonction 41h de l'interruption 21h :
    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
    17
    18
    debut : 
    mov bx, ds        ; <---------------------
    push data 
    pop ds 
     
    mov dx, offset masque 
    xor cx, cx 
    mov ah, 4eh       ;recherche du 1er fichier *.txt 
    int 21h 
    jc RienTrouvé     ;si CF = 1 ==> rien a été trouvé 
    mov dx, offset msg_succes 
    mov ah,09h 
    int 21h 
     
    mov dx, 80h + 1eh  ;on met ds dx le nom+extension du fichier trouvé 
    mov ds, bx         ; <--------------------
    mon ah, 41h        ;on l'efface 
    int 21h
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Merci pour ta réponse, j'ai néanmoins quelques questions :

    à quoi sert la 1ere ligne :
    car tu mets ds dans bx alors que juste apres on change le contenu de bx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mov dx, 80h + 1eh  ;on met ds dx le nom+extension du fichier trouvé
    mov ds, bx
    il faut mettre le nom du fichier dans ds et bx ? car je pensais que c'etait seulement dans bx, comme pour l'affichage d'une chaine par exemple.
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 418
    Points
    59 418
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sorry60
    à quoi sert la 1ere ligne :
    car tu mets ds dans bx alors que juste apres on change le contenu de bx
    Je ne vois pas où l'on change le contenu de BX ?

    Citation Envoyé par sorry60
    il faut mettre le nom du fichier dans ds et bx ? car je pensais que c'etait seulement dans bx, comme pour l'affichage d'une chaine par exemple.
    Pour la fonction 41h de l'interruption 21h, l'adresse du nom de fichier doit être contenue dans DSX. Or, en début de programme, quand tu fais
    tu changes la valeur de DS, qui ne pointe plus sur le PSP mais bien sur le segment de données. C'est cette valeur initiale, qui a été sauvegardée dans BX, que l'on rend à DS pour que DSX pointe bien sur le nom du fichier dans la DTA (elle-même contenue dans le PSP).
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #7
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Je ne vois pas où l'on change le contenu de BX ?
    Je me trompe surement mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    debut :
    mov bx, ds        ; <---------------------
    push data
    pop ds
    Ici on met bien ds dans bx

    et justa apres on met l'offset de masque dans dx, donc ds est écrasé non ?
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  8. #8
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Je ne vois pas où l'on change le contenu de BX ?
    c'est normal, je délire, je sais meme plus lire j'avais cru que tu mettais DS dans DX (j'avais lu D aulieu de B)

    Ca marche parfaitement !
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

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

Discussions similaires

  1. [PowerShell] Problème de suppression de fichiers temporaires
    Par Krout dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 17/09/2008, 11h13
  2. Migration VB.NET - Problème de suppression de fichiers
    Par Satare dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/05/2008, 16h55
  3. Problème de suppression de fichier
    Par selmak7 dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/10/2006, 14h08
  4. Problème de suppression de fichier
    Par Leiloche dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/10/2006, 13h43
  5. Réponses: 4
    Dernier message: 16/04/2004, 08h20

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