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 16-bits Assembleur Discussion :

Inverser une chaîne de caractères


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 27
    Points
    27
    Par défaut Inverser une chaîne de caractères
    Bonjour.
    Je veux faire un programme qui copie l'inverse d'une chaine (message) dans une autre chaine (inverse).

    J'ai fais ceci, mais ça ne marche pas.

    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
    data segment 
        message db  "salut$"
        inverse db 10   dup(0)        ;  devrait être "tulas$"
     
     
    ends
     
    stack segment
     
    ends
     
    code segment
    start:
     
        mov ax, data
        mov ds, ax
        mov es, ax
     
     
            MOV CX, 5 
            MOV AX,offset message
     
    toto:   PUSH [DI]  ; mov ax, [di]    push ax      ; je mes la chaine dans la pile
            INC DI
            LOOP toto  ; dec cx   JNZ toto
     
     
            MOV CX, 5
     
    titi:   
            POP AX      
            MOV [inverse], AL
     
            LOOP titi
     
     
            mov dx, offset inverse
    		mov ah, 9
    		int 21h
     
     
     
     
        mov ah, 1
        int 21h
     
        mov ax, 4c00h 
        int 21h    
    ends
     
    end start
    normalement ça devrait enregistrer les caractères dans l'ordre inverse, mais ça enregistre tout sur la 1ère case mémoire de "inverse".
    C'est à dire qu'en regardant pas à pas le déroulement du programme, on voit qu'il place "$" au 1er emplacement, puis "t" à cette même place, en écrasant "$".
    D'ailleur, je n'ai pas traité le problème du "$". Dans mon cas, il se met en début de chaine (dernier caractère devient 1er) alors qu'il faudrait qu'il soit encore en dernière position pour être ensuite lu par la fonction d'affichage de chaine.

    Merci de votre aide.

  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
    Avant la première boucle DI n'est pas initialisée, tu devrais ajouter ça :
    Dans la deuxième tu stockes toujours AL à l'adresse inverse, qui est une constante. Si tu utilises DI comme dans la première boucle ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            mov cx, 5
            mov di, offset inverse
     
    titi:   
            pop ax
            mov [di], AL
            inc di
            loop titi
     
            mov byte ptr[di], '$'

Discussions similaires

  1. [Débutant] Inverser une chaîne de caractères
    Par zbooon dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 28/04/2017, 13h44
  2. Inversion d'une chaîne de caractères
    Par camoa dans le forum x86 16-bits
    Réponses: 7
    Dernier message: 31/10/2011, 13h56
  3. Réponses: 3
    Dernier message: 26/05/2010, 23h39
  4. Réponses: 3
    Dernier message: 24/10/2007, 01h47
  5. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09

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