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 :

[x64] Boucle infinie


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Epitech Paris
    Inscrit en
    Septembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Epitech Paris
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 11
    Par défaut [x64] Boucle infinie
    Bonjour,

    Je débute avec le langage Assembleur, j'aimerais faire une boucle qui affiche 5 fois "hello world!".

    Voici mon 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
     
    global  my_strlen                                                                                                                                                                     
     
            section .data                                                                                                                                                                        
     
            msg db      "hello, world!", 10                                                                                                                                                      
     
            section .text                                                                                                                                                                        
     
    my_strlen:                                                                                                                                                                                   
            enter 0,0                                                                                                                                                                            
            mov rcx, 0                                                                                                                                                                           
            jmp loop                                                                                                                                                                             
     
    loop:                                                                                                                                                                                        
            cmp rcx, 5                                                                                                                                                                           
            jne _increment                                                                                                                                                                       
            leave                                                                                                                                                                                
            ret                                                                                                                                                                                  
     
    _increment:                                                                                                                                                                                  
            inc rcx                                                                                                                                                                              
            jmp hello                                                                                                                                                                            
     
     
    hello:                                                                                                                                                                                       
        mov     rax, 1                                                                                                                                                                           
        mov     rdi, 1                                                                                                                                                                           
        mov     rsi, msg                                                                                                                                                                         
        mov     rdx, 14                                                                                                                                                                          
        syscall                                                                                                                                                                                  
            jmp loop
    Cependant j'ai un problème, la boucle ne s'arrête jamais... Pourtant j'incrémente bien rcx, je ne trouve pas mon erreur.

    Quelqu'un peut m'aider svp ?

    Cordialement,

  2. #2
    Membre Expert
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Par défaut
    Salut,

    T'es sûr que ton syscall ne modifie par la valeur de rcx ?
    essaye d'utiliser une variable à la place pour voir...

  3. #3
    Membre habitué
    Femme Profil pro
    Epitech Paris
    Inscrit en
    Septembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Epitech Paris
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 11
    Par défaut
    Quand j'utilise une variable j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my_strlen.s:15: error: invalid combination of opcode and operands
    my_strlen.s:21: error: invalid combination of opcode and operand
    Voici mon 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
     
            global  my_strlen                                                                                                                                                                     
     
            section .data                                                                                                                                                                         
     
            msg db  "hello, world!", 10                                                                                                                                                           
            i db    0                                                                                                                                                                             
     
            section .text                                                                                                                                                                         
     
    my_strlen:                                                                                                                                                                                    
            enter 0,0                                                                                                                                                                             
            jmp loop                                                                                                                                                                              
     
    loop:                                                                                                                                                                                         
            cmp i, 5                                                                                                                                                                              
            jne _increment                                                                                                                                                                        
            leave                                                                                                                                                                                 
            ret                                                                                                                                                                                   
     
    _increment:                                                                                                                                                                                   
            inc i                                                                                                                                                                                 
            jmp hello                                                                                                                                                                             
     
     
    hello:                                                                                                                                                                                        
            mov rax, 1                                                                                                                                                                            
            mov rdi, 1                                                                                                                                                                            
            mov rsi, msg                                                                                                                                                                          
            mov rdx, 14                                                                                                                                                                           
            syscall                                                                                                                                                                               
            jmp loop

  4. #4
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Cela aurait pu marcher (sur un autre assembleur) , mais les programmes assembleur ont tous leur propre syntaxe pour représenter les valeur immédiate/adresse , donc j'imagine que en x86 la syntaxe habituelle serait plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    _increment:                                                                                                                                                                                   
            inc [i]
    (en étant tjs sur de rien faudrait vraiment que je me remette un peu en x86 un jour :p ).

    C'est vraiment un exo d'école ?

  5. #5
    Membre habitué
    Femme Profil pro
    Epitech Paris
    Inscrit en
    Septembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Epitech Paris
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 11
    Par défaut
    J'ai toujours le même message d'erreur :/

    Non, mon exercice consiste à recoder un strlen en asm, cependant il boucle inf a cause de l'incrémentation qui ne marche pas, alors j'ai voulu essayer avec des "hello world" ^^

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 264
    Par défaut
    Regardes ce POST, prob similaire :
    https://www.developpez.net/forums/d1...lt-strlen-asm/
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. [Boucle Infinie] pour un menu
    Par NhyMbuS dans le forum C++
    Réponses: 5
    Dernier message: 20/07/2005, 09h14
  2. symptome de la boucle infinie dans une requete
    Par ouam81 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/05/2005, 12h10
  3. Réponses: 15
    Dernier message: 24/05/2005, 08h34
  4. [Socket] Pb de boucle infinie
    Par Myogtha dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 10/06/2004, 14h10
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

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