Inversion de l'ordre d'uns string [Résolu]

Messages postés
22
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
25 juin 2008
- - Dernière réponse : cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
- 18 mars 2005 à 13:06
Je suis un jeune debutant dans l'assembleur.

J'ai un petit prog pour afficher les valeur sous format binaire, mais je suis bloquer par un petit soucis.

Ma reponse binaire est pacer a l'envers.
Je n'arrive pas a remettre le tout a l'endroit sans un code assez long et tirer par les cheveux.

Quelque pourrait, non pas me donner la solution mais me mettre sur la bonne voie.

.data
number dd 1110111001010b
.code
mov ebx,number
lea edi,result
loop1:
test ebx,ebx
jz fin
test ebx,1
jz pair
impair:
mov al,"1"
stosb
shr ebx,1
jmp loop1
pair:
mov al,"0"
stosb
shr ebx,1
jmp loop1
fin:
mov al,0
stosb
invoke MessageBox,0, offset result,offset szDlgTitle,MB_OK


Thierry
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
3
Merci
salut,

.data

number dd 1110111001010b
result db 32 dup(0)

.code
xor eax,eax
lea edi,result
mov ebx,number
mov [edi],eax

@@:
sal ebx,1 ; on traite par le poids fort comme ça plus besoin de remettre en place
setc al
lea eax,[eax+'0']
stosb
jne @B
mov [edi],ah
invoke MessageBox,0, offset result,offset szDlgTitle,MB_OK

@++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 189 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
re,

Attention, y'a quand meme des trucs a revoir !!!
que ce passe t-il quand le nombre est 00100100 ?
le result sera: 001001 ( c faux )

.data

number dd 1110111001010b
result db 32 dup(0)
db 0

.code
xor eax,eax
lea edi,[result+31]
mov ebx,number

@@:
sar ebx,1
setc al
lea eax,[eax+'0']
mov [edi],al
lea edi,[edi-1]
jne @B
invoke MessageBox,0,edi,offset szDlgTitle,MB_OK

c'est mieux non ?
on traite plutot le buffer a l'envers et notre resultat est ok.

@++
Commenter la réponse de cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
encore ??

.data


number dd 1110111001010b
result db 32 dup(0)
db 0


.code
pushfd
xor eax,eax
lea edi,[result+31]
mov ebx,number
std ; inverse la direction. d'ou le pushfd/popfd.
@@:
sar ebx,1
setc al
lea eax,[eax+'0']
stosb
jne @B
inc edi
invoke MessageBox,0,edi,offset szDlgTitle,MB_OK
popfd

là, je crois que c la bonne .

@++
Commenter la réponse de cs_patatalo