[Numérique] MSB et LSB
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

MSB et LSB



  1. #1
    cedric125

    MSB et LSB


    ------

    bonjour,
    considérons un octet 2C dans la base 16
    si je devais connaitre son MSB et son LSB dois-je d'abord convertir l'octet en binaire?

    -----

  2. #2
    paulfjujo

    Re : MSB et LSB

    bonjour,


    base 16 ?
    la notion de MSB LSB est habituellement utilisée à partir de mot de 16 bits ( 2 octets)=> (MSB <<8)+ LSB
    pourquoi faudrait -il le convertir en binaire ?
    0x2C= 0B00101100
    0010 1100



    si on considere la taille minimale d'un octet ( MCU 8 bits)
    pour un octet 0x2C , en base 8 (Hexadecimal)
    MSB=2
    LSB=C

    attention au notion INTEL ou Motorola ou le MSB et LSB sont inversés ..
    Dernière modification par paulfjujo ; 17/03/2021 à 12h13.

  3. #3
    jiherve

    Re : MSB et LSB

    bonjour,
    en fait tout dépend de ce que MSB/LSB signifie :
    on peut comprendre mos/least significant byte et effectivement il faut au moins deux octets
    ou bien most/least significant bit et là 2 bits suffisent.
    Il n'y a pas d'inversion MSB/LSB à proprement parler entre Motorola et Intel c'est l'ordre d'adressage en mémoire qui est inversé, big endian/little endian, les valeurs ont bien sur la même écriture une fois chargées dans les registres du µP concerné
    Il est plus facile de lire du Motorola que de l'Intel et c'est aussi plus facile à afficher car les octets sont alors rangés dans l'ordre qui va bien
    JR
    l'électronique c'est pas du vaudou!

  4. #4
    cedric125

    Re : MSB et LSB

    Citation Envoyé par jiherve
    on peut comprendre mos/least significant byte
    oui je parle bien de celle là
    Citation Envoyé par paulfjujo
    0x2C= 0B00101100
    d'où vient le 0x ?
    Sinon ce que je voulait dire par conversion binaire c'est faire 0010=2 1100=C et prendre ainsi le MSB dans le 2 et le LSB dans le C

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

    Re : MSB et LSB

    Citation Envoyé par cedric125 Voir le message
    oui je parle bien de celle là
    Tu sembles confondre bit et byte au vu de ce que tu dis plus bas.

    Citation Envoyé par cedric125 Voir le message
    d'où vient le 0x ?
    C'est une convention d'écriture pour indiquer que le nombre qui suit 0x est en base hexadécimale.

    Citation Envoyé par cedric125 Voir le message
    Sinon ce que je voulait dire par conversion binaire c'est faire 0010=2 1100=C et prendre ainsi le MSB dans le 2 et le LSB dans le C
    Pour savoir cela il faut en effet convertir en binaire, mais avec un peu d'entrainement on remarquera que pour un demi-octet impaire (0x1, 0x3, 0x5, 0x7, 0x9, 0xB, 0xD, 0xF) le LSB vaut 1 et que le MSB vaut 1 pour une demi-octet dont la valeur est plus grande que 0x7.
    Dernière modification par Povogla ; 17/03/2021 à 13h30.

  7. #6
    Shuffle777

    Re : MSB et LSB

    Bonjour,

    Une très bonne réponse a été donnée par Povogla.

    Toutefois, je pense qu'il y a une petite chose dans sa réponse qui est tout à fait correcte si on lit attentivement, mais qui peut introduire une confusion : il sera plus clair selon moi de dire que le MSB est à 1 lorsque la valeur de l'octet est > 0x7F.
    (Anecdote : "demi-octet" est un terme correct et équivalent à "quartet")



    D'autre part, je voudrais ajouter ma pierre à cet édifice, en prenant en considération un point qui me paraît important s'il s'agit d'un cas réel et non d'un cas d'école (information non précisée) et qui n'a pas encore été abordé dans la discussion : celui de la représentation en machine des dites valeurs.

    En effet : la représentation, et donc la réponse au problème initial, vont changer selon le fait que le type de données est signé ou non.
    Et également selon l'architecture utilisée, je précise donc que ma réponse sera faite pour les architectures utilisant la représentation en complément à deux pour les valeurs signées négatives, et une représentation binaire "classique" pour les valeurs positives ou non signées. C'est le cas de la majorité des systèmes actuels, à ma connaissance.

    La réponse est plus facile pour moi à donner en langage C (mais se traduira aisément dans tous les langages supportant les opérateurs booléens et les décalages de registre). Pour les entiers en représentation non signée, on a :
    Code:
    MSB_unsigned = valeur >> (bits - 1) ; // Pour l'énoncé, bits = 8, mais c'est toujours intéressant d'avoir la formule générale ;-)
    LSB_unsigned = valeur & 1 ;
    En revanche, le premier bit n'est pas le bit de poids fort si l'on utilise des valeurs entières signées : il s'agit alors du second bit, le premier stockant le signe. De plus, la représentation en complément à deux inverse tous les bits sauf le LSB. On utilisera alors le code suivant :
    Code:
    signBit = valeur >> (bits - 1) ;
    MSB_signed = signBit ^ (valeur >> (bits - 2)) & 1) ;
    LSB_signed = signBit ^ ((valeur - signBit) & 1) ;
    Les instructions ci-dessus corrigent la valeur du bit en fonction du signe : c'est comme si on demandait les MSB et LSB de la valeur absolue, mais sans avoir besoin de calculer celle-ci.

    Enfin, comme la demande ne le précisait pas non plus, si l'entrée est donnée en texte et non dans une variable de type entier, il est possible de la convertir (en C, à l'aide de sscanf() ), mais il sera plus rapide en l'occurence de faire un tableau de correspondance entre les quartets et leur MSB/LSB respectif et de considérer le premier et le dernier caractère de la chaîne.

    Voilà... J'espère avoir été utile !
    Bonne journée à tous

    PS : je n'ai pas testé en machine les dernières instructions... mais sur mon papier elles semblent marcher

    PPS : cela me semble plus être un problème de programmation que d'électronique... si un modérateur passe par là.
    Dernière modification par Shuffle777 ; 18/03/2021 à 14h48.

  8. #7
    jiherve

    Re : MSB et LSB

    bonsoir,
    que ce soit signé (positif ou négatif) ou non le LSB reste le LSB puisque c'est le seul à conserver sa valeur lors de la complémentation à deux!
    JR
    l'électronique c'est pas du vaudou!

  9. #8
    Shuffle777

    Re : MSB et LSB

    Ah oui, au temps pour moi et bien vu jiherve !

    Du coup, on peut effectivement simplifier :
    Code:
    MSB_signed = (valeur >> (bits - 1)) ^ (valeur >> (bits - 2)) & 1) ;
    LSB_signed = valeur & 1 ;

Découvrez nos comparatifs produits sur l'informatique et les technologies.