[ASSEMBLEUR] lire, écrire, ouvrir , fermer un fichier
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

[ASSEMBLEUR] lire, écrire, ouvrir , fermer un fichier



  1. #1
    invite7ccd85f5

    [ASSEMBLEUR] lire, écrire, ouvrir , fermer un fichier


    ------

    Bonjour,

    je suis étudiant en informatique a bruxelles et il me reste 1 dernier TP ou je coince en Assembleur , tp sur les appels systemes.

    voila je ne comprends pas bien le fonctionnement des appels systeme en assembleur, et plus particulierement les arguments a donné a l appel.

    et aussi je suis un peu perdu avec les handle , 0=clavier 1= ecran 2= fichier ?

    j essaye de lire un fichier situé dans le répertoire '/home/martin/g32537/Micro/TD6/ex6.asm'
    Ensuite de recopier les 100 premiers caractere 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 HTML:
    ;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 vos réponses ,

    Martin

    -----

  2. #2
    pazcal

    Re : [ASSEMBLEUR] lire, écrire, ouvrir , fermer un fichier

    Je suppose que tu es sous linux.
    L'interruption 0x80 pemret d'appeler des fonctions systemes du kernel. PAr principe si le nombre de paramètres est inférieur à 5 ils sont passés dans les registres, au delà les paramètres sont passés sur la pile.
    Donc ce que tu dois connaître, c'est :
    - l'ordre de passage des paramètres, et le type de paramètre à passer...
    - L'appel a int 0x80 génère un appel à la fonction "sys_call_table".

    voici un lien sur la table des appels systems linux : http://bluemaster.iu.hio.no/edu/dark.../syscalls.html
    Et un lien de référence : http://asm.sourceforge.net/
    Et un petit exemple ici : http://www.cs.wm.edu/~cjk/syscall.pdf
    Avec ça tu devrais t'en sortir, sinon tu repasses
    A plus

  3. #3
    invite7ccd85f5

    Re : [ASSEMBLEUR] lire, écrire, ouvrir , fermer un fichier

    merci pour tout ses liens ils m ont été utile , j ai beaucoup avancé vous pouvez le constater ci dessous ^^

    j ai un dernier probleme .
    je resume l enoncé de l exercice , je dois concatener 2 fichier

    voici mon code , je ne trouve pas l erreur , au debuggage je vois que ca plante lors du " int 0x80 " de la lecture . je ne comprend pas pourquoi

    second problème , je ne suis pas sur d ouvrir correctement le fichier test , essaye de l ouvrir en mode ajout (append) .
    Code HTML:
    ;TD7 concatenation de fichier
    
    global main
    
    section .data
    
    fichier2 dw 'test2',0
    fichier  dw 'test',0 ; fichier a lire
    
    
    section .bss
    
    message RESW 1 ; reservation d une variable pour stocker le contenu de 'fichier'
    dest    RESD 1
    dest2   RESD 1
    size    RESB 1
    section .text
    
    main :
    	mov eax,5  ; appel systeme open
    	mov ebx,fichier2 
    	mov ecx,0 ; lecture seule
    	int 0x80
    	cmp eax,-1
    	je _fin
    	mov [dest2],eax
    	
    ;	mov eax,5 ; open RW (en commentaire)
    ;	mov ebx,fichier
    ;	mov ecx,2q
    ;	int 0x80
    ;	mov DWORD [dest],eax
    ;	cmp eax,-1
    ;	je _fin
    
    	mov eax,5 ; open en APPEND
    	mov ebx,fichier
    	mov ecx,2000q
    	int 0x80
    	mov DWORD [dest],eax
    	cmp eax,-1
    	je _fin
    
    	mov BYTE [size],0
    	mov edi,0
    
    _lecture:
    	mov eax,3 ; appels systeme read
    	mov ebx,DWORD [dest2] 
    	mov ecx,message 
    	mov edx,1 
    	int 0x80 ; PLANTAGE
    	
    	cmp eax,1
    	jne _erreur
    	
    	mov eax,4 ; ecriture  
    	mov ebx,DWORD [dest]
    	mov ecx,message
    	mov edx,1
    	int 0x80
    	
    	jmp _lecture
    	
    _erreur:	
    	mov eax,6
    	mov ebx,fichier2
    	int 0x80
    	mov eax,6
    	mov ebx,fichier
    	int 0x80
    _fin:
    	mov eax,1
    	mov ebx,0
    	int 0x80

  4. #4
    pazcal

    Re : [ASSEMBLEUR] lire, écrire, ouvrir , fermer un fichier

    Tu lis combien d'oactets dans ton fichier?
    A plus

  5. A voir en vidéo sur Futura
  6. #5
    invite7ccd85f5

    Re : [ASSEMBLEUR] lire, écrire, ouvrir , fermer un fichier

    une erreur s'est glissée dans le dernier parametre de write , c est 1 et non 4
    je dois lire un octet a la fois et je le copie directement dans le fichier

    j'ai résolu le probleme, je devais faire un "ou logique" entre RW et append :

    mov ecx,2000q |02

    merci pour votre aide,

    a plus

Discussions similaires

  1. [fortran] lire/ecrire un fichier binaire : quelques interrogations sur des syntaxes
    Par bratisla dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 03/03/2010, 12h56
  2. lire et écrire dans un fichier en utilisant le VHDL
    Par invite8c6f844d dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 23/10/2009, 02h48
  3. ouvrir et fermer le circuit d'une sonde
    Par ludocool33 dans le forum Électronique
    Réponses: 25
    Dernier message: 12/04/2009, 16h33
  4. Ouvrir et fermer une machoire
    Par invite9e1d5434 dans le forum Électronique
    Réponses: 11
    Dernier message: 17/08/2005, 14h26
  5. Ouvrir et fermer une machoire
    Par invite9e1d5434 dans le forum Électronique
    Réponses: 0
    Dernier message: 16/08/2005, 15h15