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 : 21
    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 : 563
    Points
    563

    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