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

x86 32-bits / 64-bits Assembleur Discussion :

[Nasm][Linux] Open and read


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut [Nasm][Linux] Open and read
    Bonjour,
    je débute un peu en assembleur et j'essaie de faire un programme qui lit le début d'un fichier dont le nom est entré par l'utilisateur.

    Voici 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    ; Instruction de compilation : 
    ; nasm -f elf dcat.asm
    ; ld -o dcat dcat.o
     
    segment .data				; variables initialisées constantes
    	buflen: dd 254
    	readlen: dd 254
    	err: dd 128
     
    	error:     db 'error open',10    
    	errorLen:  equ $-error    
    segment .bss
    	buf:		resb	254
    	read:	resb	254
    	lerr: resb 128
    segment .text				; équivalent de main() mais c'est pas une fonction
    	global _start
     
    errorf:		;si on ne peut pas ouvrir le fichier
     
    	mov eax,4 			;syscall 4 => write
    	mov ebx,1				;1 => STDOUT
    	mov ecx,error			;what ? error
    	mov edx,errorLen		;length? errorLen	
    	int 80h				;execute
     
    	mov eax,1				;syscall 1 => exit
    	mov ebx,0				;error code => 0
    	int 80h				;execute
    	ret					;end
     
    readf:		;si on a ouvert le fichier
     
    	mov ebx,eax			; move file descriptor in ebx
    	mov eax,3				;syscall 3 => read
    	mov ecx,read			;put in read
    	mov edx,readlen		;length
    	int 80h				;execute
     
    	mov eax,4				;syscall 4 => write
    	mov ebx,1				;where? STDOUT
    	int 80h				;execute
    						;ecx , edx already defined
    	mov eax,1				;syscall 1 => exit
    	mov ebx,0				;error code
    	int 80h				;execute
    	ret					;ret
     
     
    _start:					; programme en lui même
     
    	mov eax,3				;syscall 3 => read
    	mov ebx,0				; Where? STDIN
    	mov ecx,buf			;save in buf
    	mov edx,buflen			;length of buf
    	int 80h				;execute
     
    	mov eax,5				;syscall 5 => open
    	mov ebx,buf			;open what ?buf
    	mov ecx,0				;flag => read only
    	int 80h				;execute
     
    	test	eax,-1			; an error ?
    	je	errorf			;yes jump to error
    	jne	readf				;no read file
    Je n'ai aucune sortie comme quoi le fichier n'existe pas (qu'il existe ou pas d'ailleurs).
    Enfin bref je ne sais pas où est mon erreur.
    Pouvez-vous m'aider ou me mettre sur la voie ?

    Merci
    ++

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    salut,


    Je n'ai que de vagues souvenir de l'assembleur mais
    tu pourais tester provisoirement un code qui verifie si le saut à bien eu lieu où non déjà ça permettrai de savoir si tes fonctions error et read sont bien lancée ou si l'erreur vient du corp du programme.

    en tout cas il n'y a pas d'erreur "évidente" dans ton code.
    tu ne semble pas avoir inversé les syscall ...

Discussions similaires

  1. [NASM / Linux] Problème de linkage avec lib C
    Par donkeyquote dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 01/11/2008, 16h09
  2. Réponses: 0
    Dernier message: 02/06/2008, 18h12
  3. Unable to open '' for reading: Permission denied
    Par Hi-CHAM dans le forum Langage
    Réponses: 5
    Dernier message: 11/10/2006, 22h21
  4. [NASM][Linux] Afficher une chaîne à l'écran
    Par aloula dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 26/04/2006, 08h17
  5. Recherche tutorial NASM Linux
    Par camje_lemon dans le forum Assembleur
    Réponses: 2
    Dernier message: 20/11/2004, 00h42

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