Sezione |
Indirizzi Base
Registri Interni
|
Schede del Tutorial |
Numeri e Logica Binaria |
SCHEDA n° 09 [ 20 di 20] |
|
|
Il Codice BCD (Binary Coded Decimal, codifica binaria dei simboli decimali) è formato da 10 parole, ciascuna delle quali utilizza 4 bit (un nibble) per codificare ciascun simbolo del Sistema di numerazione Decimale: |
|
BCD |
Binario |
Decimale |
0000 |
0000 |
0 |
0001 | 0001 | 1 |
0010 | 0010 | 2 |
0011 | 0011 | 3 |
0100 | 0100 | 4 |
0101 | 0101 | 5 |
0110 | 0110 | 6 |
0111 | 0111 | 7 |
1000 | 1000 | 8 |
1001 | 1001 | 9 |
|
Il Codice BCD sembra apparentemente uguale al Codice Binario Puro a 4 bit, ma non è la stessa cosa! La differenza sta nel fatto che il primo utilizza solo le prime 10 quaterne di bit del secondo. |
|
Si tratta per questa ragione di un codice ridondante, che non ammette tra le sue parole le possibili rimanenti 6 combinazioni. | |
Inoltre è un codice pesato, secondo la sequenza di pesi classica 8421, da sinistra a destra; per questa caratteristica è noto anche con il nome di Codice 8421. |
|
In generale è importante capire che gli 8 bit di un Codice Binario Puro a 8 bit non sono la stessa cosa degli 8 bit espressi con le parole di un codice. |
|
Questo vale a maggior ragione per il Codice BCD,
data la sua apparente uguaglianza con il Codice Binario Puro a 4 bit:
|
|
Abbiamo imparato che l'informazione binaria, così com'è, è difficile da intendere in modo decimale; la scrittura di un'informazione in BCD tende a superare questa difficoltà, proponendo direttamente le singole cifre decimali, e mettendo in sequenza le rispettive quaterne di bit, come in questo esempio: |
|
(10010011)BCD = (93)10 |
|
E' facile verificare che le 2 parole BCD (1001)BCD e (0011)BCD corrispondono rispettivamente ai simboli decimali (9)10 e (3)10; questa possibilità ne giustifica la fama e la diffusa applicazione, specialmente nella codifica delle informazioni da porre su visualizzatori (in generale). |
|
La codifica di questo esempio è detta impacchettata (BCD packed) perchè nel medesimo bytes trovano ospitalità entrambe le parole del codice; con un byte BCD impacchettato possiamo esprimere al massimo il numero decimale 99; con questa ogni parola (cioè ogni cifra decimale) occupa lo spazio di un nibble (mezzo byte). | |
La gestione di informazioni BCD packed è però poco pratica, per cui di solito si provvede a ...spacchettarle: tutte le quaterne di bit BCD vengono trasformate in byte del tipo (0X), con X ovviamente compreso tra 0 e 9; il byte BCD packed dell'esempio precedente diventa, con codifica BCD unpacked: |
|
(10010011)BCD packed = (00001001)(00000011)BCD unpacked = (93)10 |
|
La disponibilità di bytes BCD unpacked rende facile, per esempio, la conversione da BCD ad Ascii; i caratteri Ascii numerici hanno infatti codici binari nell'intervallo 30H÷39H="9"÷"0", per cui per ottenerli a partire dai (00000000)÷(00001001)BCD unpacked basta aggiungere 30H. |
|
Ma torniamo per un attimo sull'espressione binaria di partenza: lo stesso numero in binario (2 nibble) avrebbe dato un altro risultato: |
|
(10010011)2 = (147)10 |
|
Questo esempio mostra, nella codifica di un numero decimale, anche scarsa compattezza delle espressioni BCD rispetto a quelle binarie pure e, al tempo stesso, la necessità di un numero di bit decisamente superiore; per rimanere nell'esempio precedente notiamo che per esprimere il numero 147 servono ben 12 bit (che, in realtà, diventano 16 se, come in questo caso, il numero decimale ha un numero dispari di cifre: per formattare il dato binario alla misura minima del byte, è necessario aggiungere davanti altri 4 bit a 0): |
|
(0000000101000111)BCD packed = (147)10 |
(00000001)(00000100)(00000111)BCD unpacked = (147)10 |
|
Per finire si provi a pensare cosa succede se si presenta la necessità di operare aritmeticamente numeri in BCD; la dichiarata ridondanza del codice rende inapplicabili le tecniche utilizzate con i numeri binari puri. |
|
Data la assoluta paranoia di questo discorso mi rifiuto categoricamente di affrontarlo, anche perchè i processori moderni eseguono automaticamente le correzioni logiche necessarie, con l'aiuto di potenti istruzioni dedicate. |
|
Il processore 80x86 prevede ben 6 istruzioni per questo scopo: |
|
PseudoOp | Descrizione |
AAA AAD AAM AAS DAA DAS |
Aggiustamento Ascii dopo l'Addizione Aggiustamento Ascii prima della Divisione Aggiustamento Ascii dopo la Moltiplicazione Aggiustamento Ascii dopo la Sottrazione Aggiustamento Decimale dopo l'Addizione Aggiustamento Decimale dopo la Sottrazione |
|
Scheda n° 09 | Numeri e Logica Binaria | |||||||
Scheda n° 09 - 20 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|