Conversion de nombre

jolindji Messages postés 3 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 6 juin 2003 - 18 mai 2003 à 16:44
prunkdump Messages postés 33 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 19 avril 2004 - 18 mai 2003 à 19:01
bonjour a tous...

j'ai besoin d'un petit programme qui effectuerai la conversion d'un nombre entré au clavier en base 2,8,10,16
ou quelque choes qui y ressemble merci d'avance
ou bien des idées sur comment je pourrai y arriver merci bcp d'avance....

1 réponse

prunkdump Messages postés 33 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 19 avril 2004
18 mai 2003 à 19:01
-------------------------------
Réponse au message :
-------------------------------

Voilà comment il faut procéder:

tu à un nombre en hexadécimal dans un registre de processeur, nous allons convertir ce nombre en décimal:

-le nombre est par exemple dans eax
-tu divise ce nombre par dix

mov edx, 0
mov esi, 10
div esi

-tu a alors le reste de la division dans edx, il faut maintenant convertir ce nombre en ascii pou cela tu ajoute tout simplement le caractère "0"

add dl, "0"

-mais ce reste est le chiffre décimal de poids le plus faible il faudra donc l'afficher en dernier on met donc ce chiffre sur la pile

push dx

-il faut également savoir combien de chiffre tu a donc à chaque fois que tu pousse le reste sur la pile tu écremente cx

inc cx

-quand le reste est 0 c'est fini donc tu peu commencer à desempiler la pile.

;---------------------------------------
;la première routine est donc:

mov esi, 10
mov cx, 0
;-----------------
routine1:
mov edx 0
div esi
add dl, "0"
push dx
inc ecx
cmp ax, 0
jne routine1
;--------------------------------------

-il suffit en suite de désempiler les caractères 1 par 1 et de les placer dans un buffer il faut donc placer l'adresse de ce buffer dans un registre.

mov dx, buffer (offset buffer)

-tu désempile le caractère

pop ax

-tu met le caractère dans le buffer

mov byte [bx], al

-tu incrémente dx

inc bx

-puis puisque tu à dans cx le nombre de caractère enpilé tu recommence cette boucle le nombre de fois que donne cx

-loop routine2

;-----------------------------------------------------------
;la deuxième boucle est donc

mov bx, buffer
;-----------------------
routine2:
pop ax
mov byte [bx], al
inc bx
loop routine2

-puis si tu est sous ms-dos tu finis par

mov byte [bx], "$"

;------------------------------------------------------------
;------------------------------------------------------------
;routine complète

mov eax, nombre
mov esi, 10
mov cx, 0
;-----------------
routine1:
mov edx 0
div esi
add dl, "0"
push dx
inc ecx
cmp ax, 0
jne routine1
mov bx, buffer
;-----------------------
routine2:
pop ax
mov byte [bx], al
inc bx
loop routine2
;-----------------------
mov byte [bx], "$"
;-------------------------------------------------------------
;-------------------------------------------------------------

-voilà tu à dans ton buffer la chaine à afficher

-pour changer de base il suffit de changer la division (diviser par 2, 4, 8, 10)

si tu a un problême [mailto:prunkdump@hotmail.com prunkdump]

> bonjour a tous...
>
> j'ai besoin d'un petit programme qui effectuerai la conversion d'un nombre entré au clavier en base 2,8,10,16
> ou quelque choes qui y ressemble merci d'avance
> ou bien des idées sur comment je pourrai y arriver merci bcp d'avance....
0
Rejoignez-nous