Introduzione

Codice BCD

Codice Aiken

Codice 7421

Codice 5421

Codice 2 su 5

Codice Biquinario

Codice Eccesso-3

Codice Gray

Introduzione

Alla luce di quanto esposto sono quindi da considerarsi codici tutti i sistemi di numerazione già visti: decimale, binario, ottale, esadecimale. Il numero non è convertito in binario con il metodo delle divisioni successive, bensì come tante cifre separate, ciascuna delle quali, indipendentemente da tutte le altre, è convertita in binario.





CODICE BCD

Binary Code Decimal, usato nelle tastiere, nei display e nelle applicazioni gestionali.

DEC BCD
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001

Per esempio, (379)10 = (0011 0111 1001)BCD

Quello riportato in tabella, detto anche codice 8421 è un codice pesato, in quanto ogni elemento del carattere, a partire da destra e procedendo verso sinistra, ha peso rispettivamente 1, 2, 4, 8.

Ad esempio, (0101)BCD = 0*8+1*4+0*2+1*1 = (5)10

Delle possibili combinazioni ottenibili con quattro bit, solamente dieci sono utilizzate, i restanti sei caratteri possibili (1010, 1011, 1100, 1101, 1110, 1111) non hanno significato nel codice BCD. Per questo motivo il codice BCD è detto ridondante.

Questa rappresentazione è ancora meno compatta di quella binaria, in quanto, per esempio, con un byte sono rappresentabili:

in binario da (0)10 a (255)10 in esadecimale da (0)H a (FF)H

in BCD da (0)10 a (99)10

I numeri e le operazioni in questo codice, pur rispondendo alle normali regole aritmetiche, sono di difficile trattazione mnemonica, quando si eseguono operazioni di somma o sottrazione, a causa della ridondanza appena definita. Ad esempio:

5 + 0101 +

8 = 1000 =

---- ---------

13 1101

Utilizzando le normali regole della somma il risultato è 1101, però tale valore non esiste in BCD, è infatti tra i caratteri privi di significato, mentre equivale al numero 13 in binario puro. Il valore 13 espresso in BCD è invece: 0001 0011.

La discordanza tra i due valori, dovuta alla ridondanza del codice, sta nel fatto che al risultato della somma, in BCD, occorre aggiungere (6)10 = (0110)BCD ogni volta che viene superato il numero 9, in quanto di sei posizioni è il salto che occorre fare per evitare i caratteri privi di significato in quel codice.

È appunto il caso dell’esempio precedente, pertanto per correggere il risultato occorre eseguire la seguente operazione:

1101 + (primo risultato)

0110 =

----------------

0001 0011

Questo accade tutte le volte che con la somma, nel sistema decimale, si ottiene un riporto, poiché in questo caso la cifra del risultato supera il nove.

35 + 0011 0101 +

5 = 0101 =

----- ----------------

40 0011 1010 +

0110 =

----------------

0100 0000

Analogamente, per le sottrazioni in BCD, si pone il problema della correzione del risultato ogni volta che, nell’eseguire una differenza decimale, occorre un prestito dalla cifra precedente.

AAA (Adjust ASCII for Addition) e AAS (AA for Subtraction)

DAA (Decimal Adjust for Addition) e DAS (DA for Subtraction)

Oltre alla complicazione già evidenziata nelle operazioni aritmetiche, che per altro normalmente sono eseguite da automatismi logici, il codice BCD presenta lo svantaggio di richiedere un maggior numero di bit rispetto al codice binario puro.

La codifica qui descritta è più precisamente indicata con BCD packed, per distinguerla da un’analoga, che utilizza un intero byte per codificare una cifra, ponendo a zero il semibyte più significativo: quest’ultima, definita BCD unpacked risulta comoda quando i numeri così rappresentati sono trasferiti in caratteri ASCII.

Per esempio, (35)10

  HIGH LOW  
  0011 0101 packed
       
  0000 0011 unpacked
  0000 0101  



CODICE AIKEN

DEC AIKEN
0 0000
1 0001
2 0010
3 0011
4 0100
5 1011
6 1100
7 1101
8 1110
9 1111

Pesato (2421) e ridondante, aumenta la velocità dell’ALU.

Caratteristica peculiare di questo codice è quella di essere autocomplementante, in altre parole il codice è tale per cui il complemento a nove di ogni carattere si ottiene per semplice singola negazione di tutti i bit, come si deduce immediatamente dalla definizione di complemento ad uno. Ad esempio: C9 [7] = C9 [1101] = 0010 = (2)10




CODICE 7421

DEC 7421
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 1000
8 1001
9 1010

Pesato (7421) e ridondante.

Non usa mai più di due bit ad uno, utile per la rilevazione degli errori.




CODICE 5421

DEC 5421
0 0000
1 0001
2 0010
3 0011
4 0100
5 1000
6 1001
7 1010
8 1011
9 1100

Pesato (5421) e ridondante.

Nelle combinazioni da cinque a nove cambia solo MSB.




CODICE 2 SU 5

DEC 2 SU 5
0 00110
1 00011
2 00101
3 01001
4 01010
5 01100
6 10001
7 10010
8 10100
9 11000

Pesato (63210) fa eccezione il numero zero; ridondante.

Peso costante: due bit ad uno su cinque, utile per la rilevazione degli errori.




CODICE BIQUINARIO

DEC BIQUINARIO
0 01 00001
1 01 00010
2 01 00100
3 01 01000
4 01 10000
5 10 00001
6 10 00010
7 10 00100
8 10 01000
9 10 10000

Pesato (50 43210) e ridondante.

Peso costante: due bit ad uno, gli altri cinque sono a zero.

Utile per la rilevazione degli errori.




CODICE ECCESSO-3 (XS3)

Codice non pesato, ridondante e autocomplementante.

Ciascun numero espresso in questo codice è aumentato di (3)10 = (0011)BCD rispetto al BCD. Ad esempio:

1000 + = (8)BCD

0011 =

---------

1011 = (8)XS3

Viceversa la conversione di un numero XS3 nell’equivalente BCD, è fatta sottraendo tre.

Nessuna parola ha tutti i bit nulli: utile per la rilevazione degli errori.

Somma e differenza: se c’è il carry si somma (sottrae) (0011)XS3.

DEC XS3
0 0011
1 0100
2 0101
3 0110
4 0111
5 1000
6 1001
7 1010
8 1011
9 1100



CODICE GRAY (CICLICO)

è un codice non pesato, possono essere rappresentati tutti i numeri e quindi il livello del codice non è definibile.

Per ottenere il codice Gray è possibile ricorrere in pratica alla regola della specularità, a partire dalla combinazione (0 1) è possibile costruire il codice per successive operazioni speculari, aggiungendo poi uno zero per ogni cifra al di sopra della linea di specularità ed un uno, sempre per ogni cifra, nella parte inferiore.

Queste cifre vanno man mano aggiunte nella parte sinistra del numero che si ottiene.

Nel passaggio da una parola alla successiva cambia un solo bit, minimizza gli errori nel passaggio da uno stato al successivo e aumenta la velocità dell’ALU.

Usato, nei trasduttori di posizione, per il controllo di macchine utensili ad incremento unitario.

Ci si limiterà quindi alla trattazione di numeri con quattro bit.

0 0000

1 0001

-------- 1° specchio

2 0011

3 0010

------- 2° specchio

4 0110

5 0111

6 0101

7 0100

-------- 3° specchio

8 1100

9 1101

10 1111

11 1110

12 1010

13 1011

14 1001

15 1000