Conversion assembleur hexa-binaire
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

Conversion assembleur hexa-binaire



  1. #1
    paix40

    Conversion assembleur hexa-binaire


    ------

    Bonjour à tous. je m'adresse à vous car n'ayant trouvé aucune piste pour résoudre mon problème.

    je voudrais écrire un code qui permet de convertir un entier codé en hexa vers le binaire. je précise que je programme en yasm. orientez moi s'il vous plait. merci d'avance.

    -----

  2. #2
    Jack
    Modérateur

    Re : Conversion assembleur hexa-binaire

    Citation Envoyé par paix40 Voir le message
    je voudrais écrire un code qui permet de convertir un entier codé en hexa vers le binaire. je précise que je programme en yasm. orientez moi s'il vous plait. merci d'avance.
    Tel que formulé, ça ne veut rien dire: hexadécimal et binaire ne sont pas des codes mais des bases de comptage.

    En revanche, si tes entiers sont CODES en ASCII, sous forme de chaines de caractères par exemple, ta demande prend tout son sens. Tâche donc d'être plus précis dans ta demande.

  3. #3
    paix40

    Re : Conversion assembleur hexa-binaire

    mon programme doit lire un entier en hexa et le convertir en binaire. pour l'instant j'ai une seule idée c'est de le convertir en bcd en retranchant d'abord les milliers puis les centaines.... mais je ne voie pas si c'est possible de convertir en binaire pur.

  4. #4
    jiherve

    Re : Conversion assembleur hexa-binaire

    Bonsoir,
    C'est pas clair:
    mon programme doit lire un entier en hexa
    codé en ASCCII ?
    car sinon un nombre Hexa c'est du binaire pur!
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Conversion assembleur hexa-binaire

    Citation Envoyé par paix40 Voir le message
    mon programme doit lire un entier en hexa et le convertir en binaire.
    Lire depuis quoi ?
    Le convertir pour en faire quoi ?

    Comme l'a dit Jack, cela n'a pas de sens. Intrinsèquement, tout est stocké en binaire en mémoire.

    Citation Envoyé par paix40 Voir le message
    pour l'instant j'ai une seule idée c'est de le convertir en bcd en retranchant d'abord les milliers puis les centaines.... mais je ne voie pas si c'est possible de convertir en binaire pur.
    Le convertir en BCD est sans doute la pire des choses à faire.

    Le convertir en binaire pur est inutile : il est déjà en binaire et il suffit de lire les bits les uns après les autres pour l'afficher dans ce format.

  7. #6
    Jack
    Modérateur

    Re : Conversion assembleur hexa-binaire

    Encore une fois, ça ne veut rien dire.
    Sous quelle forme sera mémorisé le nombre entier et sous quelle forme sera mémorisé le nombre que tu veux obtenir? Donne un exemple avec les valeurs en mémoire avant et après conversion, sous forme d'octets.

  8. #7
    paix40

    Re : Conversion assembleur hexa-binaire

    on doit saisir un entier codé en hexadécimal et le convertir en binaire;

  9. #8
    Jack
    Modérateur

    Re : Conversion assembleur hexa-binaire

    J'abandonne ...

  10. #9
    paix40

    Re : Conversion assembleur hexa-binaire

    l'intitulé de l'exercice est le suivant:
    " Ecrire un programme qui prend en entrée un entier en hexadécimal et qui dit si sa représentation binaire est bien parenthésée, le 0 correspond à une parenthèse ouvrante et le 1 à une parenthèse fermante."

  11. #10
    pm42

    Re : Conversion assembleur hexa-binaire

    Citation Envoyé par Jack Voir le message
    J'abandonne ...
    Moi aussi. Je suppose qu'il s'agit de lire au clavier et d'afficher à l'écran en retour mais le refus de faire le moindre effort et de prendre en compte les réponses tout en se contentant de répéter l'énoncé sans détail est à la limite du foutage de gueule.

  12. #11
    polo974

    Re : Conversion assembleur hexa-binaire

    Citation Envoyé par paix40 Voir le message
    l'intitulé de l'exercice est le suivant:
    " Ecrire un programme qui prend en entrée un entier en hexadécimal et qui dit si sa représentation binaire est bien parenthésée, le 0 correspond à une parenthèse ouvrante et le 1 à une parenthèse fermante."
    il faut donc juste que le nombre de bits à 1 soit égal au nombre de bits à 0, mais sur quelle taille de mot ? ? ?
    (dit autrement, le nombre de bits à 1 (ou à 0) est égal à la moitié de la taille du mot à considérer...)

    yasm compile en 16, 32 ou 64 bits, les jeux d'instructions ne sont pas les mêmes...

    il y a même l'instruction popcnt qui fait le job, mais elle n'est pas toujours disponible (bref, c'est un peu de la triche...).

    il y a aussi la solution de la lut (look up table)...
    Jusqu'ici tout va bien...

  13. #12
    jacknicklaus

    Re : Conversion assembleur hexa-binaire

    Citation Envoyé par polo974 Voir le message
    il faut donc juste que le nombre de bits à 1 soit égal au nombre de bits à 0
    celà ne suffit pas.
    "0011" est ok : "(())"
    mais "1100" est ko : "))(("

    je comprends de l'énoncé, mais le posteur doit confirmer :

    "Ecrire un programme qui prend en entrée (stdin ? autre ?) une chaine de caractères (quel codage?) correspondant à un entier en hexadécimal" (quelle taille maxi ?) et qui dit si la représentation binaire de cet entier est bien parenthésée, le 0 (de la représentation binaire) correspondant à une parenthèse ouvrante et le 1 à une parenthèse fermante
    There are more things in heaven and earth, Horatio, Than are dreamt of in your philosophy.

  14. #13
    jacknicklaus

    Re : Conversion assembleur hexa-binaire

    -- remplace le message ci-dessus --

    Citation Envoyé par polo974 Voir le message
    il faut donc juste que le nombre de bits à 1 soit égal au nombre de bits à 0, mais sur quelle taille de mot ? ? ?
    ca ne suffit pas : "0011" est ok = "(())" mais "1100" = "))((" est ko.

    la question de la taille du mot est cruciale.
    sur 1 octet, "0F" est ok "(((())))" mais sur 2 octets il est ko "(((((((((((())))".
    There are more things in heaven and earth, Horatio, Than are dreamt of in your philosophy.

  15. #14
    LeMulet

    Re : Conversion assembleur hexa-binaire

    Ce que je comprends de l'énoncé :

    En entrée : Une chaine de caractères représentant un nombre entier sous sa forme hexadécimale.
    Créer une chaine de caractère représentant ce même nombre entier, mais sous sa forme binaire.
    Le 1 et le 0 de la représentation binaire obtenue précédemment correspondant au signe "(" et ")", vérifier si les parenthèses sont correctement imbriquées.

    Donc pour la conversion du nombre hexa en nombre binaire, il suffit de prendre chaque caractère de la chaine hexadécimale (0,1,2,3,4,5,6,7,8,9,1,B,C,D,E ,F) et de le remplacer par la chaine de caractères binaires (0,1) correspondante.

    0=0000
    1=0001
    2=0010
    3=0011
    4=0100
    5=0101
    6=0110
    7=0111
    8=1000
    9=1001
    A=1010
    B=1011
    C=1100
    D=1101
    E=1110
    F=1111

    Par exemple avec la chaine de caractère hexadécimal FF, qui correspond au nombre 255, la chaine binaire correspondante sera
    11111111
    Pour 1B on obtient 00011101, etc.
    Dernière modification par LeMulet ; 05/01/2020 à 21h53.
    Bonjour, et Merci.

  16. #15
    polo974

    Re : Conversion assembleur hexa-binaire

    Citation Envoyé par jacknicklaus Voir le message
    ...
    ca ne suffit pas : "0011" est ok = "(())" mais "1100" = "))((" est ko.
    ...
    En effet, je me cacherai donc derrière l'excuse que hier, c'était dimanche et qu'il pleuvait...
    Jusqu'ici tout va bien...

  17. #16
    leon19

    Re : Conversion assembleur hexa-binaire

    Bonjour,
    Avec le détail que vient d'exprimer leMulet, il y a moyen de comprendre comment convertir en binaire une chaine de caractères ascii représentant une valeur en hexa, celà ne nécessite pas des calculs arithmétiques complexes, mais l'histoire des parenthèses est pour moi sybillin. En traitant 2 caracteres exprimés en hexa en entrée on peut obtenir un octet binaire sur 8 bits et répéter cette séquence autant de fois que nécessaire.
    Bonne journée.

  18. #17
    leon19

    Re : Conversion assembleur hexa-binaire

    Bonjour,

    Pour re préciser ce qu'a exprimé leMulet chaque caractere ascii représentant une valeur en hexa correspond a une valeur binaire de 4 bits de 0000 a 1111, il faut donc convertir individuellement chacun des 2 caractères ascii pour évaluer une valeur binaire sur 8 bits en 2 fois 4 bits. Pour la conversion il me semble que l'on peut utiliser une look up table comme dit polo974 ou table de correspondance en francais, pour moi le plus simple est d'utiliser la valeur du caractère ascii lui même pour accéder à la bonne position dans une table de 128 octets en utilisant les possibilités d'adressage mémoire, la valeur du caractere ascii donnant le déplacement dans cette table laquelle doit avoir été auparavant initialisée avec les valeurs binaires sur 4 bits renseignés correspondant aux 16 caractères hexa de 0 à F en entrée. Par exemple F en ascii vaut 70 decimal et 46 en hexa, il faut donc que l'octet de la table contienne 00001111 a la position +70 de la table soit la 71ieme position, la position 1 étant au déplacement +0 . Pour 1 en ascii cela vaut 49 decimal et 31 en hexa, il faut donc que l'octet de la table contienne 0000 0001 en position +49 de la table. En chargeant le caractère ascii dans un registre et en additionnant l'adresse de début de la table on obtient l'adresse de l'octet en binaire contenant les 4 bits correspondant dans la table. On peut faire celà a l'aide de 2 registres contenant adresse table et déplacement. Ensuite avec le registre contenant la bonne adresse on peut copier cette valeur binaire sur un octet ailleurs en mémoire. Cela est a faire sur 2 caractères ascii voisins pour obtenir un octet de 8 bits a partir de 2 fois 4 bits. Le premier caractere ascii de la paire représente les 4 bits de la partie haute de l'octet résultat il va donc falloir faire un décalage de 4 bits à gauche dans l'octet résultat de ce caractère. Cela suppose que dans le cours d' assembleur ont été présentées les notions d'adressage mémoire, les instructions de chargement de données dans les registres, les opérations logiques comme les décalages , les et ainsi que les ou logiques, l'addition binaire, etc... Pour préparer cette table il convient de prendre connaissance d'un tableau de 128 éléments donnant pour chaque caractere : la valeur char ascii, sa valeur décimale et sa valeur hexadecimale, mais la table de conversion si elle doit bien etre de 128 octets de longueur ne doit etre renseignee que pour les 16 valeurs hexadecimales. On peut utiliser le meme principe pour la conversion binaire vers hexadecimal.

    Tableau des 128 valeurs ascii :

    https://www.fil.univ-lille1.fr/~wegr...aracteres.html

    Il serait bien que paix40 liste les instructions de code assembleur pour les lecteurs du forum, plusieurs contributeurs interviennent sur d'autres fils de discussion sur ces instructions dans ce forum. Pour ma part je connais en partie l'assembleur de code intel utilisé par microsoft mais pas yasm.

    J'espère que ces quelques lignes permettent d'éclairer les possibilités sur ce sujet.

    Bonne journée.

  19. #18
    leon19

    Re : Conversion assembleur hexa-binaire

    Aprés conversion des 2 caractéres ascii en 2 octets ayant 4 bits renseignés il faut additionner ces valeurs ou appliquer un ou logique pour avoir l'octet complet.

  20. #19
    jiherve

    Re : Conversion assembleur hexa-binaire

    bonjour,
    pour convertir un chiffre hexa en binaire il suffit de retrancher 0x30 au code ASCII c'est basique!
    JR
    l'électronique c'est pas du vaudou!

  21. #20
    leon19

    Re : Conversion assembleur hexa-binaire

    En effet c'est bien plus simple. Pour les nombres de 0 a 9 c'est ok.

    Alors expliques moi ou j'ai une erreur. Dans la table notée dans l'url ci dessus A vaut 65 decimal et 41 en hexa. La valeur x'30' vaut 48 decimal. En faisant l'operation : 65 - 48 = 17 decimal ce qui n'est pas 10 decimal que l'on exprime en ecrivant A en hexa. Ou me trompais je pliize.

  22. #21
    leon19

    Re : Conversion assembleur hexa-binaire

    Cependant ta reflexion a du bon pour simplifier. On peut appliquer une soustraction de valeur différente si le caractere est egal ou superieur a A en soustrayant non 48 mais 48 + 7 = 55 on peut retomber sur les bonnes valeurs. Ainsi 65 -55 = 10 pour A.

    Cela simplifie les operations en se contentant de faire une soustraction. Pour F la valeur decimale est 70 -55 = 15. Si les caracteres de A à F sont en majuscule on peut se contenter de celà. Tout cela ne concerne qu'un demi octet du résultat.

  23. #22
    leon19

    Re : Conversion assembleur hexa-binaire

    Pour les caractères de A a F il faudrait donc soustraire 55 decimal soit x'37' hexa

  24. #23
    jiherve

    Re : Conversion assembleur hexa-binaire

    bonsoir
    en effet j'avais répondu un peu vite en oubliant le test supplémentaire mais je constate que certains suivent.
    JR
    l'électronique c'est pas du vaudou!

  25. #24
    polo974

    Re : Conversion assembleur hexa-binaire

    Heu, là, comme ça, en passant, le primo posteur n'a rien écrit depuis le 05/01...
    Jusqu'ici tout va bien...

Discussions similaires

  1. Langage c conversion binaire hexa
    Par invitecee01c25 dans le forum Programmation et langages, Algorithmique
    Réponses: 16
    Dernier message: 30/12/2014, 14h50
  2. langage C : conversion en binaire d'un fichier en hexa
    Par invitedba13d1f dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 06/07/2009, 08h46
  3. conversion Hexa-BCD en assembleur
    Par invite1fe4e213 dans le forum Électronique
    Réponses: 19
    Dernier message: 24/06/2009, 12h58
  4. Conversion hexa-binaire dans une macro Excel
    Par invite92276dd8 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 06/06/2007, 21h47