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

Signaler
Messages postés
22
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
25 juin 2008
-
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
-
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

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
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

@++
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
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.

@++
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
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 .

@++