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] Strchr


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 56
    Points
    56
    Par défaut [NASM] Strchr
    bonjour,
    je débute en ASM, j ai plutôt l habitude de language de plus haut niveau...
    j essaye deseperement de réaliser strchr dans le but de creer une minilibc en ASM.
    voici le code que j ai pour l instant,j ai une erreur ligne 16 et qd je remplace edx par dl segfault
    Si quelqu'un pouvait m aider et m expliquer en même temps je suis preneur.(je prend aussi un bon tuto )

    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
    section .text
            global my_strchr
     
    my_strchr:
            xor eax, eax
            xor ebx, ebx
     
            mov ecx, [esp + 4]
            mov edx, [esp + 8]
     
    str_boucle:
            mov al, byte [ecx + ebx]
            cmp byte [ecx + ebx] ,0         ;si caract = \0                                
            je nofind
     
            cmp byte [ecx + ebx], edx    ; j ai une erreur ici
            je strchr_end
     
            inc ebx                 ;ebx++                                                 
            jmp str_boucle
    nofind:
            xor eax, eax
     
    strchr_end:
            ret
    j ai une fonction main.c qui appel my_strchr

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Bonjour,

    L'erreur doit venir du fait que tu veux comparer un byte (8 bits) avec EDX (32 bits).
    Pour parcourir la chaîne tu peux incrémenter ECX au fur et à mesure que tu avances, comme avec un pointeur en C.

    Voilà ma version :
    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
    strchr:
            mov eax, [esp+4]  ; chaîne s
            test eax, eax
            jz .pointeurInvalide
     
            mov ecx, [esp+8]  ; char à chercher
     
    .iteration:
            movzx edx, byte[eax]
            cmp edx, ecx
            je .trouve
     
            add eax, 1
     
            test edx, edx
            jne .iteration
     
            xor eax, eax
     
    .trouve:
    .pointeurInvalide:
            ret
    Elle est prévue pour FASM mais il y a des chances pour qu'elle compile telle qu'elle avec NASM.
    :wq

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 56
    Points
    56
    Par défaut
    que signifie exactement movzx
    quelle est la difference avec mov ?

    Sinon ca fonctionne merci beaucoup, cependant je cherche quand meme a comprendre un peu mieux

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bao,
    Citation Envoyé par toams69 Voir le message
    que signifie exactement movzx
    quelle est la difference avec mov ?
    Pour faire de l'assembleur, il faut disposer de la documentation du processeur visé.

    Pour les x86, tu trouveras le nécessaire sur le site de Intel.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 56
    Points
    56
    Par défaut
    Je vais rechercher, merci pour votre aide, j ai réussi a adapter sur mon code et cela fonctionne

  6. #6
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Citation Envoyé par toams69 Voir le message
    que signifie exactement movzx
    quelle est la difference avec mov ?
    MOVZX copie la source dans une destination qui est plus grande, en élargissant la source avec des zéros. MOVSX fait le même chose à part qu'elle élargit la source en tenant compte du signe.
    C'est pratique parce ça permet de faire les traitements sur 32 bits, ce qui est plus rapide. En plus je trouve que c'est plus simple de s'en tenir du 32 bits autant que possible que de mixer les types partout.

    La documentation d'Intel est ici : http://developer.intel.com/products/...uals/index.htm.
    :wq

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

Discussions similaires

  1. [NASM] Utiliser des fichiers ressources
    Par trax44 dans le forum Assembleur
    Réponses: 8
    Dernier message: 26/09/2004, 18h42
  2. [NASM] Ligne de commande
    Par sirozz dans le forum Assembleur
    Réponses: 1
    Dernier message: 23/08/2004, 19h31
  3. [Linux] [NASM] Entrée de chaines
    Par vi4ever dans le forum Assembleur
    Réponses: 4
    Dernier message: 27/07/2004, 21h28
  4. [NASM] Redirection de l'interruption 09h
    Par sirozz dans le forum Assembleur
    Réponses: 2
    Dernier message: 16/07/2004, 17h32
  5. Réponses: 12
    Dernier message: 14/06/2004, 13h06

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