|
 |
Numeri
e Logica Binaria |
SCHEDA n° 09 [
20
di 20] |
 |
|
Numeri Binari organizzati: Codice BCD o Codice 8421 |
|
 | 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:
 | con 8 bit di Codice Binario Puro a
8 bit possiamo rappresentare tutti i numeri decimali
da 0 a 255 |
 | con 8 bit di Codice BCD
possiamo rappresentare tutti i numeri decimali da 0
a 99 |
|
 | 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: |
 | 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: |
 | 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 |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|