Inversion de l'ordre d'uns string

Résolu
VBFRANCE Messages postés 22 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 25 juin 2008 - 16 mars 2005 à 17:11
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

3 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
17 mars 2005 à 11:04
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

@++
3
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
18 mars 2005 à 10:39
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.

@++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
18 mars 2005 à 13:06
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 .

@++
0
Rejoignez-nous