begin process at 2012 05 25 11:14:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Autres asm

 > 

manipuler des chaines en assembleur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

manipuler des chaines en assembleur

dimanche 24 juillet 2005 à 15:05:11 | manipuler des chaines en assembleur

sylvain16

Voilà, je débute en assembleur, j'ai lu pas mal de trucs sur le sujet, mais un truc n'est pas très clair:

   comment on lit et écrit des chaines de caractères, et comment on pourrait comparer 2 chaines de caractères?

   Si j'ai bien comprit on utilise DS:ESI pour la source et ES:EDI pour la destination.... mais quelles instructions faut-il utiliser?

   Si quelqu'un peut m'aider à éclaircir ce sujet çà serait sympa, merci.
lundi 25 juillet 2005 à 12:33:15 | Re : manipuler des chaines en assembleur

patatalo

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
salut,

mov [esi],'a'
mov [esi+1],'s'
mov [esi+2],'m'
mov [esi+3],'f'
mov [esi+4],'r'
mov [esi+5],0

mov [edi],'a'
mov [edi+1],'s'
mov [edi+2],'m'
mov [edi+3],'f'
mov [edi+4],'r'
mov [edi+5],0

mov ecx,5
cld
push esi
push edi
repe cmpsb
pop edi
pop esi
je .chaineidem

l'instruction cmpsb incremente esi et edi et decremente ecx.

@++
lundi 25 juillet 2005 à 15:56:02 | Re : manipuler des chaines en assembleur

ToutEnMasm

Réponse acceptée !
Salut,
En instructions assembleur movsb(movsd ...) scasb cmpsb
En api ,lstrlen lstrcpy.Pour les plus courantes.
Avec masm szcatstr.
                            ToutEnMasm
lundi 25 juillet 2005 à 18:04:55 | Re : manipuler des chaines en assembleur

sylvain16

Merci pour les tuyaux, c'est vraiment sympa!

salut a+

mardi 26 juillet 2005 à 08:21:23 | Re : manipuler des chaines en assembleur

Nasman

Une petite précision (ou alors je n'ai rien compris à l'assembleur), c'est le préfixe repe (opcode F3) qui déclanche la décrémentation du registre ecx. L'instruction cmpsb qui compare deux octets incrémente esi et edi si le "direction flag" est à zéro (cld) et décrémente esi et edi s'il est à 1 (std). De façon analogue cmpsw (cmpsd) compare deux words (dwords) et incrémente/décrémente de 2 (4) les index.
vendredi 29 juillet 2005 à 19:07:15 | Re : manipuler des chaines en assembleur

sylvain16

Nasman, tu a entièrement raison, mais je précise un peut plus: J'ai relut la doc Intel et effectivement c'est bien REPE qui décrémente ECX. Pour aller plus loin je traduit ce qui est écrit: REP/REPE/REPZ/REPNE/REPNZ- Repeat String Operation Prefix Description Répète une instruction de chaine le nombre de fois spécifié dans le registre comteur ou jusqu'à ce que la condition indiquée du flag ZF soit rencontrée. Les mnémoniques REP, REPNE, REPZ et REPNZ sont des préfixes qui peuvent être ajoutés à une des instructions de chaine. Le préfixe REP peut être ajouté aux instruction INS, OUTS, MOVS, LODS et STOS, et les préfixes REPE, REPNE, REPZ et REPNZ peuvent être ajoutés aux instructions CMPS et SCAS (REPZ et REPNZ sont synonymes de respectivement REPE et REPNE). La fonction du préfixe REP est indéfinie quand il n'est pas utilisé avec une instruction de chaine. Les préfixes REP s'appliquent seulement à une instruction chaine à la fois. Pour répéter un block d'instruction, utilisez l'instruction LOOP ou une autre construction de boucle. Toutes ces préfixes de répétition impose à l'instruction associée à se répéter jusqu'à ce que le registre compteur (ECX) soit décrémenté à 0. Préfixe Condition(s) de sortie REP RCX ou (E)CX = 0 REPE/REPZ RCX ou (E)CX = 0 | ZF = 0 REPNE/REPNZ RCX ou (E)CX = 0 | ZF = 1 Les préfixes vérifient aussi l'état du flag ZF après chaque itération et termine la boucle si ce flag n'est pas dans l'état spécifié. Quand les 2 conditions testés se terminent, La cause de la fin de la répétition peut être déterminée soit en testant le registre compteur avec une instruction JECXZ ou en testant le flag ZF (avec un JZ, JNZ ou JNE). Y'a encore une page entière sur ces préfixes, mais cela suffit pour comprendre leurs principes. Et dans la description des instructions de comparaisons: CMPS/CMPSB/CMPSW/CMPSD/CMPSQ Il est spécifié que "après la comparaison, les registres (E/R)SI et (E/R)DI sont incrémentés ou décrémentés automatiquement en accord avec le flag DF(Direction Flag), et de n octets en fonction de l'instruction". Encore merci les gars.


Cette discussion est classée dans : chaines, assembleur, sujet, caractères, manipuler


Répondre à ce message

Sujets en rapport avec ce message

Probléme d'Affichage pour les chaines de caractères [ par HwW_Mb ] Salut les petits :-)A L'AIDE !!!!!!!!!!!!!j'ai programmé un Mini Os avec un secteur de démarrage et un noyau de 5 secteursmais je n'arrive pas à affic un programme pour programmer en assembleur [ par cricri_b34 ] j'aimerais essayer de créer un petit programme en assembleur... mais je n'ai pas de programme pour le compiler :-/est ce que quelqu'un connaitrais un dll a partir d'assembleur. [ par sgdaim ] comment créer un fichier dll en utilisant l'assembleur du microcontroleur 8031. au sujet de la compil [ par CCJ ] bonjourj'aimerai savoir si il y a un moyen pour faire un prog sur un ordi coupé du monde autrement dit avec que le bloc not ou le dos et sans internet Condition et enregistrement [ par ciberrique ] Salut, voila je n'ai aucune connaissance en asm.Je voudrais effectuer une comparaison entre deux chaines de caracteres, une des chaines près configure assembleur 8086: Affichage de table ASCII [ par redwings ] je cherche le code source d'un prog en asm : comment on peut afficher toute la table des caractere + le code ascii en héxadecimal exemple : Resultat s Compilateur Assembleur [ par Deimos_ ] Bonjour à tous, Je commence à programmer l'assembleur et je voudrais savoir quel est le soft le plus adapté puor compiler mes programmes ! Je tourne s besoin d'aide pour une conversion ascii/hexa en assembleur [ par MTHOMAS ] Salut,Je voudrais faire une conversion Ascii vers hexa en assembleur (pic 16F630): le paramètre d'entrée (déposé dans w) est un nombre hexadecimal cod Compilateur [ par LordBob ] Bonjour a tous,voila je m'interresse un peu a la creation de langage... je ne sais pas grand chose, mais j'ai une question qui me trote dans la tete.. Sous-procedure externe en Assembleur ? [ par cbil ] débutant en c/c++, flash et asm- Me contacterBonjour à tous,J'utilise TASM et j'aimerais faire une sous procedure externe.J'ai tester un exemple, (je


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales