prob avec chaine de caractere

prob avec chaine de caractere - ASM - Programmation

Marsh Posté le 12-11-2010 à 17:05:08    

bonjour, je veux ecrire un code pour trouver le mot le plus long dans une chaine et l'afficher.j'ai essayé d'ecrire mais mon code ne fonctionne pas si vous voulez bien me corriger
mov t_max,0
mov cx,n
mov si,0
mov p,0
calcul_longueur_mot:
test_si_separateur:
cmp chaine[si],' '
je oui_separateur
cmp chaine[si],';'
je oui_separateur
cmp chaine[si],','
je oui_separateur
cmp chaine[si],'.'
je oui_separateur
cmp chaine[si],':'
je oui_separateur
cmp chaine[si],'-'
je oui_separateur
jne non_separateur
 
oui_separateur:
mov bx,p
cmp bx,t_max
ja stockage
jbe re_initialisation
stockage:
mov bx,p
mov t_max,ax
mov indice_mot,si
mov p,0
mov ah,9
mov dx,offset msg6
int 21h                    
sub indice_mot,t_max
mov cx,t_max
mov ah,2
mov si,indice_mot
le_mot_plus_long:
mov dl,chaine[si]
int 21h
inc si
loop le_mot_plus_long
jmp incrementation
re_initialisation:
mov p,0
incrementation:
inc si
loop calcul_longueur_mot

Reply

Marsh Posté le 12-11-2010 à 17:05:08   

Reply

Marsh Posté le 15-11-2010 à 15:31:00    

j'ai changé complétement de code,je n'ai pas su comment faire pour afficher le mot le plus long .svp aidez moi
mov indice_mot,0 \\indice du mot le plus long
mov bx,chaine[si] \\l'indice du mot courant
mov t_max,0    \\ longueur du mot le plus long  
mov cx,0     \\ la longueur du mot courant
mov si,offset chaine
scrute:
cmp byte ptr[ds:si],35  \\comparaison avec # qui marque la fin de la chaine
jz findescrutation
cmp byte ptr[ds:si],20h \\comp avec les espaces
je separateur
inc si  
inc cx
separateur:
cmp t_max,cx
jge stockage
stockage:
mov t_max,cx \\ stckage de la nouvelle longueur
mov indice_mot,bx \\stockage du nouveau indice
mov bx,chaine[si+2]
mov cx,0
jmp scrute
findescrutation: \\traitement du dernier mot et affichage
mov bx,chaine[si+2]  
cmp t_max,cx
jge stock
mov ah,9
mov dx,offset msg3
int 21h
mov cx,t_max
mov ah,2
int 21h
mov ah,9
mov dx,offset msg6
int 21h
mov  dx,bx
mov ah,2
int 21h

Reply

Marsh Posté le 16-11-2010 à 00:55:13    

De mémoire une fin de chaine pour l'interruption 21h est un $
 
De plus tu n'utilise jamais a fonction 9 sur ta variable indice_mot, c'est normal?
Je ne comprend pas le mov bx,chaine[si+2], inc bx serait plus approprié non?
 
Sinon pour aller plus loin, t'as essayer en pas à pas au débogueur? Que te sors ton programme?


---------------
sheep++
Reply

Marsh Posté le 16-11-2010 à 14:38:01    

Re,
la chaine est saisie au debut par l'utilisateur,je veux la parcourir et elle se termine par#.
Mov bx,chaine[si+2]: en fait j'avais l'intention de choisir bx comme etant le registre qui donne l'indice du mot courant mais je n'ai pas su vraiment comment faire

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed