A cosa serve MSB e LSB? [duplicare]

1

Ho difficoltà a comprendere l'uso di MSB (bit più significativo) rispetto a LSB (bit meno significativo) e del perché vengono utilizzati del tutto. Ho capito che ha a che fare con Endianness, ma non riesco a capirlo.

In sostanza: se leggo una specifica su X e specificano che i dati devono essere letti LSB o MSB - ok, posso farlo - ma perché lo sto facendo.

Perché non inviamo solo tutti i dati MSB?

    
posta Michael 13.08.2015 - 22:46
fonte

4 risposte

6

Endianness for binary (base 2) non è diverso da endianness per qualsiasi altra base.

Senza una specifica che ti indichi da che parte erano i decimali più significativi e meno significativi, non sapresti se

1234

è il millenovecentotrentaquattro o quattromilaquattrocentoventuno.

Nota per ulteriore curiosità che "ventuno" è MSD mentre "diciannove" è LSD, quindi non è certamente universalmente ovvio anche all'interno della stessa comunità quale è quello giusto.

Per le date, ci sono tre diverse convenzioni (usando come esempio il compleanno di Alan Turing):

  • prima il componente meno significativo (ad es. in Germania): 23.06.12
  • prima il componente più significativo (ad es. ISO): 12-06-23
  • completa e totale confusione (USA): 23/06/12

Ancora una volta, devi scegliere un ordine un po ' e devi comunicare quale ordine hai scelto, e non c'è ovviamente un ordine "giusto". (Direi comunque che il formato data americano è ovviamente sbagliato :-D.)

    
risposta data 13.08.2015 - 23:43
fonte
1

Quando un byte viene serializzato in un flusso di bit e trasmesso in serie, diventa importante sapere se viene trasmesso prima LSbit-first o MSbit-first. Il trasmettitore può inviare i bit in qualsiasi ordine e il contratto, sia che si tratti di LSbit-first o di MSbit-first, è stabilito nelle specifiche (o nella scheda tecnica). Ad esempio, il destinatario riceve questo:

time: 01234567
bit:  01000000

Se il trasmettitore inviava LSbit-first, il valore è 0x02 . Se il trasmettitore inviava prima MSbit, il valore è 0x40 . La ricezione deve sapere quale è.

    
risposta data 13.08.2015 - 23:11
fonte
1

L'ordine dei bit e l'ordine dei byte sono due cose separate, ma possono influenzare le tue preferenze. Di 'che hai una macchina little-endian e vuoi trasmettere un numero a 32-bit. Anche trasmettere i bit LSB-first significa che l'intero bit order per l'intero int (con lsb numerato 0) è:

0 1 2 3 4 5 6 7 8 9 10 11 12 ... 31

Se hai trasmesso prima MSB, l'ordine globale complessivo per l'intero int sarebbe:

7 6 5 4 3 2 1 0 15 14 13 11 ... 24

Guardare questo segnale su un oscilloscopio è diventato ancora più difficile, e progettare i registri a scorrimento nell'hardware è diventato un po 'più complicato.

Il contrario si verifica per le macchine big-endian. Quindi endianness non ordina dettare , ma sicuramente rende l'ordine un po 'più facile da usare.

Per quanto riguarda preferire una endianità a un'altra, è più che sceglierne una a caso. Big Endian è più facile da capire concettualmente, ma little endian significa che non è necessario sfalsare l'indirizzo per trattare un byte come parola.

    
risposta data 14.08.2015 - 00:01
fonte
1

MSB e LSB possono essere pensati in termini di proprietà numeriche delle sequenze di bit. Ad esempio, durante l'aggiunta, il flusso trasporta dall'aggiunta di due LSB verso il bit successivo più alto. Lo stesso LSB non riceve alcun carico perché avvia l'aggiunta; mentre tutti gli altri bit ottengono un carry dalla successiva posizione di bit meno significativa. L'overflow si verifica quando un carry (di valore 1) si verifica dall'MSB, poiché non ci sono più bit (nel byte o dimensione word) da trascinare a. L'MSB è anche considerato il bit di segno per i tipi di dati firmati: se l'MSB è 1 il valore è negativo, se 0 il valore è positivo (o zero).

L'endianità è una questione di ordine di memorizzazione (o trasmissione) di bit all'interno di un byte e anche più significativo (come risulta) per l'ordine di byte all'interno di una parola o di una parola lunga. Queste differenze possono essere viste quando i dati vengono spostati da un sistema all'altro. Fortunatamente l'ordine dei bit all'interno di un byte è standardizzato su dischi rigidi e reti, quindi non dobbiamo preoccuparci del bit endianess. Tuttavia, l'ordine dei byte all'interno di una parola è diverso per alcuni processori rispetto ad altri e i byte vengono scambiati quando si cambiano le architetture; poiché ciò causa problemi, è necessario attenuarli (ad esempio il software deve gestirli). Little endian memorizza i byte meno significativi per primi seguiti da byte più significativi in ordine di memorizzazione o ordine di pacchetto superiore, mentre big endian è il contrario.

    
risposta data 14.08.2015 - 00:06
fonte

Leggi altre domande sui tag