les chaines de caracteres en assembleur

les chaines de caracteres en assembleur - ASM - Programmation

Marsh Posté le 17-04-2008 à 20:37:15    

bonjour,
je commence a programmer en assembleur,et je veux ecrire un programme qui me permet de saisir une chaine de caracteres et de m'afficher tous les mots saisis qui seront par la suite testés, j'ai utilisé:
mov ah,0Ah
lea dx,chaine
int 21h
cela me permet de saisir la chaine mais je ne sais pas comment faire pour parcourir toute la chaine :??:
toute suggestion et la bienvenue !!!
merci  

Reply

Marsh Posté le 17-04-2008 à 20:37:15   

Reply

Marsh Posté le 17-04-2008 à 22:18:02    

Laisse tomber l'assembleur 16 bits, lis ce tutoriel-là par exemple : http://drpaulcarter.com/pcasm/
(il y a une traduction en français)


---------------
dap.developpez.com
Reply

Marsh Posté le 18-04-2008 à 15:57:12    

merci dap++ pour le lien mais c'est un travail que je dois remettre, je dois parvenir a avoir tous les mots de mon texte pour les soumettre a un test

Reply

Marsh Posté le 19-04-2008 à 11:07:40    

Il y a plusieurs façons de faire "parcourir" une chaine.
 
Voici un exemple simple.


        mov ax, data_seg      ; initialise ds avec le segment des données
        mov ds, ax
        mov bx, OFFSET chaine ; bx contient l'addresse de la chaine
loop_for_every_char:
        mov al, BYTE PTR [bx]  al contient le caractère pointé par la bx
... fait quelque chose avec le caractère
        inc bx                ; incrémente le pointeur pour se préparer à lire le suivant
        cmp al, '$'           ; compare le caractère avec le caractère de fin de chaine
        jnz loop_for_every_char ; si ce n'est pas la fin, on recommence

En fait, il serait plus performant d'utiliser le registre si mais je n'ai pas ma documentation à portée de main, et je ne me souviens plus comment on l'utilise.

Reply

Marsh Posté le 21-04-2008 à 13:29:03    

en version 32 bits avec chaine terminée par un zéro
 
xor edx, edx                              ;sert de compteur pour la longueur de la chaine
lea esi, chaine                           ;pointe la chaine à analyser
suivant : lodsb                          ; charge dans al le caractère courant et pointe le suivant
or al, al                                      ; fin de chaine ?
jz suite                                      ; oui on sort
; faire quelque chose avec le caractère
inc dx                                         ; un caractère de plus dans la chaine
jmp suivant                                ; boucle vers le caractère suivant
suite :                                        ; al, esi perdu dx longueur de la chaine
 


---------------
je suis né fatigué et fait pour me reposer
Reply

Sujets relatifs:

Leave a Replay

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