[LMI] lire et ecrire dans un fichier

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LMI] lire et ecrire dans un fichier

Message  trikman le Mar 10 Mai 2011, 19:50

Bonjour,

voila je ne comprend pas bien le fonctionnement des appels systeme,

j essaye de lire un fichier situé dans le répertoire '/home/martin/g32537/Micro/TD6/ex6.asm'
Ensuite de recopier les 100 premiers octets dans une variable message.
pour finir , recopier ce qu il y a dans la variable message dans un nouveau fichier ( création necessaire ) dont le chemin serait 'home/martin/g32537/Micro/TD7/ex66.txt' dans une variable sortant

voila mon bout de code , avec en commentaire les endroits où je coince (plus ou moins tout le code Embarassed )

Code:
;TD7 ouverture , lecture, fermeture et reecriture dans un nouveau fichier

global main
section .data

fichier  dd 'home/martin/g32537/micro/TD6/ex6.asm' ; fichier a lire
sortant  dd 'home/martin/g32537/Micro/TD7/ex.txt' ; fichier a ecrire

section .bss

message REST 1 ; reservation d une variable pour stocker le contenu de 'fichier'

section .text

main :
   mov eax,5  ; appel systeme open
   mov ebx,[fichier] ; je pense avoir compris que je dois
           ; mettre dans ebx, le chemin du fichier a lire ?
   mov ecx,0 ; lecture seule
   int 0x80
   ; je coince deja ici, je pense ne pas avoir compris le fonctionnement
   ; de read , ainsi que write (plus loin)
   mov eax,3 ; appels systeme read
   mov ebx,2 ; handle de fichier ?
   mov ecx,message ; on stocke dans la variable message
         ; le contenu du fichier ?
   mov edx,100 ; 100 premier octet a lire
   int 0x80

   mov eax,6 ; fermeture du fichier
   mov ebx,[fichier]
   int 0x80
   ; je ne suis pas sur que j utilise bien la fonction open
   ; pour ouvrir et creer un fichier en meme temps
   mov eax,5 ; ouverture et creation d un fichier nomme ex6.asm
   mov ebx,[sortant] ; dans le chemin specifie
   mov ecx,700q ; creation de fichier ???
   int 0x80
   
   mov eax,4 ; ecriture dans le fichier (je ne pense pas que ce soit bon)
   mov eax,2 ; handle de fichier ?
   mov ebx,[message]
   mov ecx,100
   int 0x80
   
   mov eax,6 ; fermeture du fichier cree
   mov ebx,[sortant]
   int 0x80
   
   mov eax,1
   mov ebx,0
   int 0x80

je vous remercie d'avance pour votre aide ,

Martin

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  nvs le Mar 10 Mai 2011, 20:20

utiliser des tableaux de double mots pour les chaînes de caractères, sans marque de fin de chaîne, c'est pas bon...




No

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  trikman le Mar 10 Mai 2011, 21:16

utiliser des tableaux


des tableaux ? je ne savait pas que j utilisais un tableau ... ou ca ?

de double mots pour les chaînes de caractères, sans marque de fin de chaîne, c'est pas bon...
devrais-je declarer une variable de cette facon, pour la marque de fin de fichier ?

Code:
section .data
message    dw 'cheminDeMonFichier',0 ; le 0 marque la fin de fichier ?

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  trikman le Mar 10 Mai 2011, 21:40

voila j'ai trouvé un petit fichier qui m aide un peu a comprendre mais il y a plusieurs ligne que je ne comprend pas

voici un extrait du code lectureAffichage.asm que j'ai trouvé sur votre site mr NVS

j'ai mit un " ????" en commentaire des lignes que je ne comprend pas . que font-elles? que signifie-t-elle ? a quoi serve-t-elle ?

Code:
; ouverture du fichier
   mov      eax,5
;   mov      ebx,nomFichier
   mov      ebx,dword [ebp+8]  ; ????
   mov      ecx,0         ; rd_only
   int      80h

   cmp      eax,0
   js      .erreurFichier
;   mov      dword [fd],eax
   mov      dword [ebp-4],eax  ; ????

   ; lecture d'un caractère du fichier
 .lecture:
   mov      eax,3
;   mov      ebx,dword [fd]
   mov      ebx,dword [ebp-4] ; ????
;   mov      ecx,caractere
;   mov      ecx,ebp-5         ; compile malheureusemet pas
   mov      ecx,ebp  ; ????
   sub      ecx,5  ;  ????
   mov      edx,1
   int      80h

   cmp      eax,1
   jne      .fermeture

   ; affichage du caractère lu
   mov      eax,4
   mov      ebx,1
;   mov      ecx,caractere
   mov      ecx,ebp  ;  ????
   sub      ecx,5  ;  ????
   mov      edx,1
   int      80h

   jmp      .lecture   

   
   ; fermeture du fichier
 .fermeture:
   mov      eax,6
;   mov      ebx,dword [fd]
   mov      ebx,dword [ebp-4]  ; ????
   int      80h

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  pbt le Mer 11 Mai 2011, 11:52

D'après les bruits dans la salle des profs, vous n'avez pas parlé de la pile (stack) cette année ... ce code l'utilise.

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  trikman le Mer 11 Mai 2011, 12:15

vous parlez sans doute du registre esp
d'où l instruction mov ebp,esp que je retrouve souvent dans des bouts de code ?

effectivement on ne la pas utilisé énormément, mais je suis embeté, il y a interro demain , et je suis un peu largué avec les appels systèmes

on doit quand meme etre capable d ouvrir , lire , ecrire et fermer un fichier

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  nvs le Mer 11 Mai 2011, 15:35

trikman a écrit:
utiliser des tableaux


des tableaux ? je ne savait pas que j utilisais un tableau ... ou ca ?

partout où tu manipules des chaînes de caractères.

trikman a écrit:
de double mots pour les chaînes de caractères, sans marque de fin de chaîne, c'est pas bon...
devrais-je declarer une variable de cette facon, pour la marque de fin de fichier ?

Code:
section .data
message    dw 'cheminDeMonFichier',0 ; le 0 marque la fin de fichier ?
bof, utiliser un tableau de mots pour stocker une chaîne de caractères, ça risque de poser quelques problèmes. sinon, la marque de fin de chaîne est un bon début...




silent

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  nvs le Mer 11 Mai 2011, 15:40

trikman a écrit:voila j'ai trouvé un petit fichier qui m aide un peu a comprendre mais il y a plusieurs ligne que je ne comprend pas

voici un extrait du code lectureAffichage.asm que j'ai trouvé sur votre site mr NVS

j'ai mit un " ????" en commentaire des lignes que je ne comprend pas . que font-elles? que signifie-t-elle ? a quoi serve-t-elle ?

Code:
; ouverture du fichier
   mov      eax,5
;   mov      ebx,nomFichier
   mov      ebx,dword [ebp+8]  ; ????
   mov      ecx,0         ; rd_only
   int      80h

   cmp      eax,0
   js      .erreurFichier
;   mov      dword [fd],eax
   mov      dword [ebp-4],eax  ; ????

   ; lecture d'un caractère du fichier
 .lecture:
   mov      eax,3
;   mov      ebx,dword [fd]
   mov      ebx,dword [ebp-4] ; ????
;   mov      ecx,caractere
;   mov      ecx,ebp-5         ; compile malheureusemet pas
   mov      ecx,ebp  ; ????
   sub      ecx,5  ;  ????
   mov      edx,1
   int      80h

   cmp      eax,1
   jne      .fermeture

   ; affichage du caractère lu
   mov      eax,4
   mov      ebx,1
;   mov      ecx,caractere
   mov      ecx,ebp  ;  ????
   sub      ecx,5  ;  ????
   mov      edx,1
   int      80h

   jmp      .lecture   

   
   ; fermeture du fichier
 .fermeture:
   mov      eax,6
;   mov      ebx,dword [fd]
   mov      ebx,dword [ebp-4]  ; ????
   int      80h
impossible de répondre avec certitude à ta question sans savoir où pointe ebp. ceci dit, de prime abord et à vue de nez, chaque ligne marquée par ; ???? fait probablement la même chose que la ligne précédente mise en commentaire mais avec une variable locale plutôt qu'une variable globale...







Suspect

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  nvs le Mer 11 Mai 2011, 15:43

pbt a écrit:D'après les bruits dans la salle des profs, vous n'avez pas parlé de la pile (stack) cette année ... ce code l'utilise.
sans vouloir pinailler -- tu sais que ce n'est pas mon genre -- je ne vois pas où la pile est utilisée dans cet exemple. ebp est un registre général. il y a de grosses chances qu'il pointe effectivement quelque part dans la pile, mais cela n'apparaît pas dans l'extrait de code que trikman donne.






Wink

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  trikman le Mer 11 Mai 2011, 17:04

bon j ai travaillé toute la journée , je commence a m'en sortir ...

mais j'ai une question
exemple :
Code:
section .data
      fichier  dw  'test',0 
      motAafficher  db  'i',10
que signifie le ",0" ? ainsi que le ",10" pour un mot a afficher (par exemple) ?

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  nvs le Mer 11 Mai 2011, 17:37

nvs a écrit:utiliser des tableaux de double mots pour les chaînes de caractères, sans marque de fin de chaîne, c'est pas bon...
j'ai quand même été voir le manuel, et je dois modérer ma remarque ci-avant. pour la marque de fin de chaîne, je ne retire rien. par contre, nasm gère bien les tableaux de double mots ou de mots pour le stockage de chaînes de caractères.







Rolling Eyes

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  pbt le Jeu 12 Mai 2011, 08:44

nvs a écrit:
pbt a écrit:D'après les bruits dans la salle des profs, vous n'avez pas parlé de la pile (stack) cette année ... ce code l'utilise.
sans vouloir pinailler -- tu sais que ce n'est pas mon genre -- je ne vois pas où la pile est utilisée dans cet exemple. ebp est un registre général. il y a de grosses chances qu'il pointe effectivement quelque part dans la pile, mais cela n'apparaît pas dans l'extrait de code que trikman donne.






Wink
Pas de soucis. En lecture rapide, je vois ebp, je me rappelle l'usage habituel de ebp et boum ! Je parle de pile :-)

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  mvh le Jeu 12 Mai 2011, 11:16

pbt a écrit:
nvs a écrit:
pbt a écrit:D'après les bruits dans la salle des profs, vous n'avez pas parlé de la pile (stack) cette année ... ce code l'utilise.
sans vouloir pinailler -- tu sais que ce n'est pas mon genre -- je ne vois pas où la pile est utilisée dans cet exemple. ebp est un registre général. il y a de grosses chances qu'il pointe effectivement quelque part dans la pile, mais cela n'apparaît pas dans l'extrait de code que trikman donne.
Wink
Pas de soucis. En lecture rapide, je vois ebp, je me rappelle l'usage habituel de ebp et boum ! Je parle de pile :-)
ou fasse ...
... que les dieux de l'asm te pardonnent Wink

_________________

La fête c'est nul sans Kidibul !
... (vieux proverbe local)



mvh

Nombre de messages : 5973
Age : 104
Prénom : Marcel VANHAELEN
Statut : (fin de bail)
Win 3.1 à reprendre
Localisation : Koekeliek de Baselberg
Date d'inscription : 06/12/2006

Revenir en haut Aller en bas

Re: [LMI] lire et ecrire dans un fichier

Message  Contenu sponsorisé Aujourd'hui à 14:48


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum