Fonction inttobin

Soyez le premier à donner votre avis sur cette source.

Vue 4 035 fois - Téléchargée 645 fois

Description

Appeler une fonction rédigée en assembleur dans un programme C++.
IntToBin convertie un nombre en une chaine contenant la représntation binaire de ce nombre (base 2).

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
C'est encore améliorable, par exemple, en permutant edx et ebx dans leur utilisation.

J'aurais bien retourné un pointeur vers "0",0 si l'entier = 0 sinon, pas de différence entre cette erreur et une erreur de malloc(). C'est embêtant...

@++
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
utiliser bsr et pas bsf sinon, on obtient le premier bit de poids faible à 1.
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
re zut,

IntToBin proc near
xor ecx,ecx
xor eax,eax
mov edx,[esp+4]
bsf ecx,edx ; ecx = index base zero du premier bit de poid fort à 1.
push ebx
je err ; si edx = 0 -> err
push edx
add ecx,2 ; ecx = n bits à allouer + 1 pour zero terminal
push ecx
call malloc
and eax,eax
pop ecx
pop edx
je err ; malloc retourne un pointeur NULL
dec ecx; retour sur index
mov [eax+ecx],0
dec ecx
@1:
xor bl,bl
shr edx,1
adc bl,'0'
mov [eax+ecx],bl
dec ecx
jns @1
err:
pop ebx
ret
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
!!! remplacer jns @1 par jne @1
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
salut,

Utilisation du registre ebx sans sauvegarde/restauration, c'est très dangereux.
Pas de sauvegarde/restauration du registre ecx avant et après le malloc, prions que la fonction ne le modifie pas.

IntToBin proc near
xor ecx,ecx
xor eax,eax
mov edx,[esp+4]
bsf ecx,edx ; ecx = index base zero du premier bit de poid fort à 1.
push ebx
je err ; si edx = 0 -> err
push edx
add ecx,2 ; ecx = n bits à allouer + 1 pour zero terminal
push ecx
call malloc
and eax,eax
pop ecx
pop edx
je err ; malloc retourne un pointeur NULL
mov [eax+ecx],0
dec ecx
@1:
xor bl,bl
shr edx,1
adc bl,'0'
mov [eax+ecx],bl
dec ecx
jns @1
err:
pop ebx
ret

@++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.