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

Assembleur Discussion :

[DOS] Problème pour incrémenter un pointeur de chaîne


Sujet :

Assembleur

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [DOS] Problème pour incrémenter un pointeur de chaîne
    Bonjour à tous,

    J'ai un petit souci pour terminer un prog en assembleur qui m'a pris pas mal de temps vu que je débute. Le but du programme est de lire une chaîne de caractères encodée au clavier et d'afficher a l'écran le nombre de consonnes, voyelles et autres caractères qui composent cette chaîne. Tout fonctionne correctement au niveau des tests sur les caractères et de l'affichage, le problème est que je n'arrive pas à déclarer un pointeur ou incrémenter le pointeur de début de chaîne à chaque passage dans ma boucle de test pour qu'il saute au caractère suivant de ma chaîne. Donc, je teste toujours le premier caractère. 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    ;*****************************************************************************************;
    ;*Assembler:TASM                                                                         *;
    ;*          TLINK                                                                        *;
    ;*****************************************************************************************;
       .MODEL SMALL
       .STACK 128
       
    ;----------------------------------Donnees------------------------------------------------;
       .DATA
    
    message1 db "Entrez votre chaine de caracteres :",10,13,"$"
    message2 db "Longueur de la chaine :",10,13,"$"
    message3 db 10,13,"$"
    message4 db "Nombre de consonnes :",10,13,"$"
    message5 db "Nombre de voyelles :",10,13,"$"
    message6 db "Nombre d'autres caracteres :",10,13,"$"
    
    MAX db 81
    nbcarac db ?
    chaine db 81 dup(" "),0D,"$"   
    
    nbcons db 0
    nbvoy db 0
    nbautre db 0
    
    
    aff db 0
    cpt db 0
       
    
    
    ;*--------------------------------Programme-----------------------------------------------*;
       .CODE
    
    DEBUT:
      mov ax,@data
      mov ds,ax
       
    mov ah,09h
    LEA dx,message1
    int 21h
    
    mov ah,0ch
    mov al,0ah
    LEA dx,MAX
    int 21h
    mov cl,0
    jmp test1
    
    
    
    
    test0:
    mov bl,cpt
    cmp bl,nbcarac
    je fin
    jl test1
    
    test1:
    mov al,chaine
    cmp al,41h
    jl autre
    jge test2
    
    test2:
    cmp al,5Ah
    jle test3
    jg test4
    
    test3:
    cmp al, 'A'
    je voyelle
    cmp al, 'E'
    je voyelle
    cmp al, 'I'
    je voyelle
    cmp al, 'O'
    je voyelle
    cmp al, 'U'
    je voyelle
    cmp al, 'Y'
    je voyelle
    jmp consonne
    
    test4:
    cmp al,60h
    jle autre
    jg test5
    
    test5:
    cmp al,7Ah
    jle test6
    jg autre
    
    test6:
    cmp al, 'a'
    je voyelle
    cmp al, 'e'
    je voyelle
    cmp al, 'i'
    je voyelle
    cmp al, 'o'
    je voyelle
    cmp al, 'u'
    je voyelle
    cmp al, 'y'
    je voyelle
    jmp consonne
    
    
    consonne:
    inc nbcons
    inc cpt
    jmp test0
    
    voyelle:
    inc nbvoy
    inc cpt
    jmp test0
    
    autre:
    inc nbautre
    inc cpt
    jmp test0
    
    fin:
                                            
    RETOUR_AU_DOS:
        mov AX, 4C00h   ;Appel de la fonction 4ch pour revenir au DOS
        int 21h
          
    
    end
    J'ai supprimé les affichages qui prennent beaucoup de place et mis en gras la ligne qui pose à mon avis problème. Après pas mal de recherches, je m'en remets à vous, merci d'avance.

  2. #2
    Rukia
    Invité(e)
    Par défaut
    Bonjour
    Tu avances dans la chaîne par un registre d'index et vous incrémentez le registre d'index et tu compares dans ta boucle par la taille de la chaîne
    Exemple 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mov cx,size[chaine]  /* cx contient la taille de la chaine*/
    mov si ,0
    refaire:  
               mov al,chaine[si]  
               inc si
               cmp si, cx
               jne refaire
    Exemple 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mov cx,size[chaine]         /* cx contient la taille de la chaine*/
    mov si ,offset[chaine]       /* si contient l'offeste de la chaine*/
    refaire:  
               mov al,[si]
               dec cx
               cmp cx, 0
               jne refaire
    Remarque : moi j'ai travaillé avec la machine 8086 et le compilateur masm et ça a marché.
    Dernière modification par Alcatîz ; 09/04/2007 à 21h41. Motif: balises code

Discussions similaires

  1. problème pour incrémenter avec condition
    Par la nouvelle dans le forum Excel
    Réponses: 7
    Dernier message: 18/05/2015, 14h06
  2. [XL-2010] problème pour incrémenter
    Par JulienLeno dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/10/2011, 10h48
  3. Réponses: 12
    Dernier message: 14/07/2009, 17h34
  4. Réponses: 3
    Dernier message: 03/09/2007, 20h09
  5. Problème pour exécuter une chaîne de caractères
    Par Pongo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h34

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