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 :

Afficher le contenu d'un fichier


Sujet :

Assembleur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Afficher le contenu d'un fichier
    pourquoi ce code ne marche pas bien? error: DOS SETBLOCK (4Ah) error

    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
    44
    45
    46
    47
    48
    49
    DOSSEG
    .MODEL small
    .STACK 200h
    .DATA
    texte DB 'texte:',10,13
    db '(nom.fichier)',10,13,'$'
    buffer db 13,14 dup(?)
    donnes db 10000 dup(?)
     
    .CODE
    Begin:
     mov AX, @data
     mov DS, AX
     mov ah, 09h
     mov dx, OFFSET texte
     INT 21h
     mov ah, 0ch
     mov ah, 0ah
     mov dx, offset buffer
     int 21h
     
     xor bx, bx
     mov bl, byte ptr[buffer+1]
     mov byte ptr[buffer+2+bx],0
     
     mov ah, 3dh
     mov dx, offset buffer+2
     mov al, 0
     int 21h
     mov bx, ax
     
     mov ah, 3fh
     mov cx, 10000
     mov dx, offset donnes
     int 21h
     or ax, ax
     jz fin_fichier
     
     fin_fichier:  
     mov ah, 3eh
     int 21h
     
     mov ah, 09h
     mov dx, offset donnes
     int 21h
     
     MOV AH, 4Ch
     INT 21h
     END Begin

  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 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue ! (une petite formule de politesse ne fait jamais de mal)

    Je ne vois pas trop à quoi correspond ton code d'erreur : à quel endroit l'erreur se produit-elle ?

    Tu pourrais franchement te passer d'aller inscrire un zéro terminal à la fin du nom de fichier en déclarant ton buffer comme ceci :
    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
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 1
    Points
    1
    Par défaut ca ne marche
    Merci beaucoup et bonjour,
    mon code il ne marche toujours pas
    il affiche le contenu du fichier et apres il ecrit sur ecran
    END BeginEINST~1\UTILIT~1\BORLANDC\BIN\dpmiload.exe

    ▬ ☺ ☺ ♥
    DOS SETBLOCK (4Ah) error
    comment je verifie que j`ai lu les dates dans le fichier?
    pas avec
    ?

    Merci

  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 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Je crois que je vois le petit problème : la fonction 09h de l'interruption 21h affiche une chaîne dont le caractère terminal doit être '$'.

    Tu devrais donc déclarer ton buffer de données comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    donnes db 10001 dup('$')
    (10001 au cas où ton fichier contient bien 10000 octets).
    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
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    ca marche bien!!!!!!!
    merci beaucoup
    j'ai essayer d'ecrire un code qui affiche le texte de mon fichier sur un ecran de longeur 80 octets et qui ne coupe pas le mots.

    comment je peut lire le fichier ligne par ligne et verifier les quelles ne sont pas plus grande que 80?

    Merci

  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 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Le mieux à faire est, lorsque ton buffer de données a été lu et que ton fichier a été refermé, c'est de créer un buffer d'affichage de 80 caractères.
    Dans celui-ci, tu transfères le texte du buffer de données par paquets de 80 caractères. En commençant par la fin, tu testes le contenu du buffer d'affichage jusqu'à trouver un saut de ligne ou un espace, que tu remplaces par '$' pour afficher à l'écran.

    Bien entendu, pour le paquet de 80 caractères suivants, tu devras tenir compte que tout le buffer d'affichage n'a pas été affiché et tu devras reculer dans le buffer de données pour repartir après le saut de ligne ou l'espace que tu as remplacé par '$' dans le buffer d'affichage.

    Mais d'autres que moi auront peut-être une meilleure idée ?
    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 éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Pourquoi ne pas se limiter à l'ajout d'une variable dans la boucle ? Initialisée à 0, incrémentée chaque itération, remise à 0 à chaque \n, testée pour savoir s'il faut oui ou non afficher le caractère ?

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    j`ai ecrit ce part de code dans mon ancien code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    cld
     
     mov di, OFFSET chfinale 
     mov si, OFFSET donnes
     ;mov cx, 80
     bucle:
     	lodsb
    	stosb
    	cmp al, ' '
    	jne bucle
     
     mov dx, offset chfinale
     mov ah, 09h
     int 21h
    mais ca nu marche pas. il veut afficher le premier mot. il affiche et apres il affiche plein des spaces. comment je teste que je suis a la fin du ligne? j`ai essayer avec '\n' mais ne marche pas.

    Merci beaucoup!!!!!!!!!!!!

  9. #9
    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 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Il y a de grandes chances qu'une fin de ligne soit sous la forme d'un caractère 10h, voire 13h ou du couple 1013h.
    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]

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    j'ai essayer le trois possibilites mais aucune ne marche pas.
    en utilisant le deux premiers il n'affiche rien. le troisieme est trop grande pour le registre AL.
    pourquoi tu dis que 10h, 13h or 1013h peut etre la fin de la ligne?

    Je te remercie pour ton aide tu es vraiement gentile de m'aider!!!!!

  11. #11
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Hello,

    Il s'agit plus probablement de 0Ah et 0Dh (soit 10d et 13d) en fin de ligne.

    0Ah est le caractère spécial pour 'line feed'

    0Dh est le caractère spécial pour 'carriage return'

    C'est avec ces deux caractères qu'on donne un retour à la ligne dans un chaîne de caractères.

  12. #12
    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 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Neitsa
    Il s'agit plus probablement de 0Ah et 0Dh (soit 10d et 13d) en fin de ligne
    Rââh ! C'est exact ! Je suis un abruti...
    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]

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    bonjour,
    j'ai ecrit le code
    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
    cld
     mov di, OFFSET chfinale
     mov si, OFFSET donnes
     
    boucle1:
     
     call findline
     cmp al, '$'
     jne boucle1
     je fin1
     
     fin1:
     MOV AH, 4Ch
     INT 21h
     
    findline PROC
    bucle:
     
     	lodsb
    	stosb
    	cmp al, 10d
    	jne bucle
    	je fin
    fin :
     mov dx, offset chfinale
     mov ah, 09h
     int 21h
     ret
    findline ENDP
    et ce code affiche la premiere ligne de mon fichier et tout. il s'arret. le chaine donnes contient le donnes de fichier. si je fait une simple affichage pour ce chaine, avec le test de arret cmp al '$' il affiche bien.
    pourquoi ca ne marche pas, et comment je dois faire?

    Merci!!![/list]

Discussions similaires

  1. [Reseau]FTPClient pour afficher le contenu d'un fichier
    Par boxsters dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 21/06/2006, 11h12
  2. Afficher le contenu d'un fichier .pst
    Par ATTIA dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 31/03/2006, 17h27
  3. Réponses: 2
    Dernier message: 20/11/2005, 18h54
  4. Afficher le contenu d'un fichier xls dans un DBgrid
    Par bianconeri dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/09/2004, 16h35
  5. Réponses: 1
    Dernier message: 12/02/2003, 09h36

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