IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

hexadecimal to decimal


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut hexadecimal to decimal
    Salut,

    Je cherche à faire un convertisseur hexa vers decimal, mais je bloque complet pour le moment. Faire un convertisseur dec2hex était simple, j'ai pu faire un truc vraiment propre, mais pour l'inverse, c'est beaucoup plus compliqué, de part le faite que le proc calcul en hexa...
    Je n'arrive à comprendre psychiquement comment réussir à déterminer chaque numéro de la valeur décimal finale, afin que ce soit écrit en décimal et non en hexa..

    Par exemple, pour le chiffre hexa 0xFFF

    Le premier "F" = 15, donc le numéro décimal des unitées sera forcément 5.
    Par contre, pour la suite, c'est là que je bloque.

    Au début j'avais simplement pensé à récupérer mon script dec2hex, en remplaçant simplement le (*10) par un (*16):

    F = 15
    F = 15 x 16 = 240
    F = 15 x (16*16) = 3840
    etc..
    3840 + 240 + 15 = 4095

    Efficace et tient sur peu de lignes de code.
    Mais j'ai vite compris que le registre calculerait en hexa, et que donc je ne pourrais rien faire du résultat final ! x |

    Dans mon script dec2hex, j'entre une valeur dans eax, qui est écrite sous forme hexa..
    Par exemple:
    mov eax,0x12345678
    Et en sortie je récupère ceci dans eax: 0xBC614E
    C'est vraiment niquel et je souhaiterais faire pareil en hex2dec... Entrer une valeur en hexa dans un registre et la récupérer convertie en decimal dans un registre.
    Je n'ai pas d'intérêt à pousser à une valeur décimal qui dépasserait 4 bytes (sous forme hexa), donc je n'utilise ni variable locale, ni pile. Ce qui donne un code vraiment dynamique et court.

    Il faut donc pouvoir déterminer unité, dizaine, centaine etc.. Numéro par numéro, car dès l'instant qu'une addition ou une multiplication est faite, le registre va la renvoyer sous forme hexa !!
    This is the big problem ^

    La seule solution que j'imagine là avant d'aller faire dodo c'est de créer un compteur, mais franchement ça craint, et pas facile à implémenter en plus de ça.

    Je pense que je vais aller dans cette direction demain, à moins que vous connaissiez une méthode plus simple par calcul pur, mais c'est justement ça le problème, je ne vois comment ça peut être possible de faire ça par du calcul de part la nature de calcul du proc ! x |

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    J'ai enlevé le code que j'avais mis dans mon premier post car c'était un peu n'importe quoi, écrit sous l'effet de la fatigue.
    J'ai trouvé cette explication plutôt pas mal qui est basée sur un principe de division.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    code segment     ;inicio de un segmento unico
    assume cs:code,ds:code,ss:code
    org 100h       ;localidad de inicio del contador
    main  proc     ;procedimiento principal
     
    mov ax,cs
    mov ds,ax   ; INICIO 
     
    mov ax, x
     
    mov ah,4ch ;comienzo del fin de programa
    int 21h    ;fin del programa
     
    main endp
     
    x dw 0A92FH
     
    code ends   ; fin del segmento de codigo
    end main    ;fin del ensamble

    Je devrais pourvoir écrire un code dynamique à partir de ça. Sauf que, contrairement à lui, la conversion ascii se fera dans un autre code. Le résultat tiendra dans un registre, ensuite il suffit simplement d'ajouter des "3" ^

    edit:
    C'est parfait, en utilisant la méthode par la division avec mon code j'ai pu faire exactement ce que je voulais.

    Dec2Hex > multiplication par 0xa
    Hex2Dec > division par 0xa

    C'était logique en faite que tout soit retrouvable en divisant par la même valeur..

  3. #3
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    non non , le processeur ne compte pas en hexa, mais en binaire

    je ne comprends pas bien ta question, et ce que tu veux faire.
    pourquoi avoir besoin d'un convertisseur ?
    convertisseur pour transformer une chaîne de caractères en valeur ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Ouep c'était pour avoir mes outils perso.
    Il ne restait plus que le hex2dec.
    Oui en faite je suis en train de faire un framework http.
    Au départ c'était un banal script Facebook. Mais je me suis dit "oh tient, et si j'implémentais la gestion de cookie, et puis si j'implémentais le systême de chunk et content-lengh parfaitement, etc.."
    Et une chose en amenant une autre.. Maintenant ça pourrait presque finir par devenir un navigateur web, lol !

    Donc oui là c'était précisément pour la méthode "content-lengh" que j'ai eu besoin de ces outils. J'aurais pu utiliser "sprintf", et c'est ce que je faisais au début, mais ça n'ennuyait de mettre un gros sprintf dans mon code, lol ! Je trouve ça moche ^

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    D'ailleurs au point où j'en suis, j'ai carrément commencé à faire mon propre printf.
    J'utilise uniquement les formats "d,x et s", donc j'ai déjà tout ce qu'il faut pour le faire.
    J'ai regardé vite-fait le code de printf win32. Apparemment il utilise WriteConsoleA pour le stdout. Je l'ai donc utilisé également, et ça le fait.

    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformer un hexadecimal en decimal
    Par funtim78 dans le forum Débuter
    Réponses: 4
    Dernier message: 11/08/2009, 23h02
  2. conversion mot de 4 octets hexadecimal en decimal
    Par adelsunwind dans le forum VBA Access
    Réponses: 7
    Dernier message: 03/03/2009, 22h47
  3. Convertir un hexadecimal en decimal
    Par yann87 dans le forum Débuter
    Réponses: 6
    Dernier message: 24/09/2008, 12h40
  4. convertir decimal a hexadecimal
    Par Micheal1221 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/08/2006, 15h12
  5. convertion valeur hexadecimal en decimal
    Par devdev2003 dans le forum C
    Réponses: 8
    Dernier message: 06/10/2005, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo