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] Codage de strlen en assembleur x64


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [NASM] Codage de strlen en assembleur x64
    Bonjour,

    Je suis débutant en langage assembleur. J'éssaye de recoder la fonction strlen.

    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
     
    BITS 64
            SECTION         .text
     
            global  my_strlen
    my_strlen:
            PUSH    RBP
            MOV     RBP, RSP
     
            XOR 	RSI, RSI
            XOR     RCX, RCX
    boucle:
            CMP     BYTE [RDI + RCX], sil
            JZ      fin
            INC     RCX
            JMP     boucle
    fin:
            MOV     RAX, RCX
            LEAVE
            RET
    Le code est fonctionnel, cependant, je remarque que si j'enleve la ligne XOR RSI, RSI, mon programme segfault. J'ai donc cherché énormément à quoi cela servait d'assigner la valeur 0 à RSI, mais je trouve pas grand chose. Pouvait vous m'éclairer s'il vous plait ?

    Merci d'avance !

  2. #2
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour.

    J'ai donc cherché énormément à quoi cela servait d'assigner la valeur 0 à RSI, mais je trouve pas grand chose. Pouvait vous m'éclairer s'il vous plait ?
    Mettre RSI à 0 permet de mettre SIL à 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CMP     BYTE [RDI + RCX], sil
    Cette ligne de code cherche donc le 0 qui marque la fin de la chaine.

    Si SIL n'est pas à 0, la recherche peut se prolonger dans une zone mémoire qui n'est pas autorisée, d'où le segfault ...

    On peut supprimer la ligne XOR RSI, RSI à condition de remplacer CMP BYTE [RDI + RCX], sil par :


Discussions similaires

  1. Réponses: 2
    Dernier message: 15/07/2014, 08h29
  2. Programmer directement en assembleur x64 à partir de Delphi XE3
    Par Delphix dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 11/06/2014, 23h45
  3. assembleur NASM et x64
    Par tychus dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 18/12/2011, 15h27
  4. Réponses: 10
    Dernier message: 22/05/2008, 12h29
  5. Le C++ et l'Assembleur x64 en ligne
    Par doom3 dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 26/07/2007, 13h33

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