Corso di Microprogrammazione: sistemi di numerazione

Programmazione

Oggi sulla griglia di partenza di queste pagine c’è un esperimento che vedrà protagonisti i nostri utenti premium ed i microcontrollori. Si tratta, come il titolo suggerisce, di un corso in cui saranno affrontate le principali tematiche che appartengono a varie discipline, quali matematica (binaria e non), sistemi e circuiti sia combinatori sia sequenziali ma anche elettronica ed informatica, sistemi embedded e sistemi e metodi di rappresentazione dei dati. Questi aspetti saranno tutti funzionali ad apprendere la programmazione su microcontrollori. Buona lettura.

Come tutti i corsi che si rispettino, anche questo comincia affrontando gli argomenti accennati partendo da concetti base che tutti noi applichiamo o utilizziamo tutti i giorni, spesso senza neanche essere troppo consapevoli di che cosa stiamo realmente facendo.

Sistemi di numerazione

Sarebbe troppo facile fare esempi dei momenti in cui, nella vita quotidiana, noi si debba fare i conti con… i conti! E allora, val la pena di prendere subito in considerazione i concetti di base, ovvero le basi. Oltre questi giochi di parole esiste un fatto che assume rilevanza cruciale, ovvero che alla base di tutti i nostri conti c’è il fatto che è stato stabilito un sistema di numerazione, definito tramite l’utilizzo di:

  • Simboli (0,1,2 … )
  • Ordine (0 < 1 < 2 < 3 …..)
  • Operazioni (+,-,x…..)

Partendo dal sistema di numerazione a noi più noto, ovvero quello con cui abbiamo più familiarità, diamo un’occhiata ai sistemi normalmente usati in campo elettronico ed informatico ed approfondiamo, quindi le basi numeriche.

Nel caso in base decimale (ovvero in base 10) i simboli sono, ovviamente, 0 1 2 3 4 5 6 7 8 9. Vale la pena, però, di soffermarsi sull’analisi di un generico numero, ad esempio 2389. Esso viene descritto anche grazie allo scritto, ovvero è interpretato come duemilatrecentoottantanove. Inoltre, questo è un fatto che deriva da un’operazione che è stata effettivamente effettuata dalla nostra mente, ovvero 2000 + 300 + 80 + 9.

E se vogliamo, si tratta di: 2 * 1000 + 3 * 100 + 8 * 10 + 9 * 1.

Ma potremmo anche dire, per essere più completi e formali, che c’è da ricordare che un numero elevato alla zero è pari a 1. Questo comporta il fatto che l’operazione realmente compiuta è: 2 * 103 + 3 * 102 + 8 * 101 + 9 * 100.

Queste operazioni sono state “installate” nella nostra mente da piccoli ma sottintendono due concetti fondamentali, ovvero quello di base è quello di peso. Ed è proprio in quest’ultima rappresentazione che essi vengono fuori ed abbiamo XY con X = Base e Y = Peso.

La base esprime il numero di simboli “base” utilizzati all’interno del sistema di numerazione. Lo scopo del peso, invece, è quello di indicare quale valore assume un simbolo, ovvero ciascun simbolo, a seconda della posizione all’interno della quale si trova.

Le basi

Base 2 (anche nota come sistema Binario)

Un sistema binario usa i seguenti simboli: 0 1. Per questo motivo, un qualsiasi numero binario sarà rappresentato da una sequenza ordinata di 0 e 1. Così, analizzando il numero binario 1101, grazie all’applicazione dei concetti introdotti precedentemente, abbiamo:

1 * 23 + 1 * 22 + 0 * 21 + 1 * 20

che diventa

1 * 8 + 1 * 4 + 0 * 2 + 1 * 1

Il numero binario 1101 ha, quindi, una equivalente rappresentazione nel sistema decimale, che è pari a 13.

Base 8 (anche nota come Ottale, in breve Oct)

Questo sistema è “composto” di simboli quali: 0 1 2 3 4 5 6 7. Analogamente a quanto detto nel caso precedente, e sempre con riferimento a quanto introdotto, se abbiamo il numero ottale 3416, allora sappiamo che

3 * 83 + 4 * 82 + 1 * 81 + 6 * 80

cioè

3 * 512 + 4 * 64 + 1 * 8 + 6 * 1

Base 16 (anche nota come Esadecimale, in breve Hex)

Qui i simboli in uso diventano alfa-numerici, per ovvi motivi, e sono: 0 1 2 3 4 5 6 7 8 9 A B C D E F. Questa base è, quindi, un pò complicata perchè utilizza un numero di simboli maggiore della base decimale ma è facile intuire che, di fatto i simboli A, B, C, D ,E, F hanno rispettivamente il corrispondente decimale in 10, 11, 12, 13, 14, 15.

Così, il numero esadecimale A85F è convertibile in decimale esattamente con procedura analoga a prima:

A * 163 + 8 * 162 + 5 * 161 + F * 160

cioè

10 * 163 + 8 * 162 + 5 * 161 + 15 * 160

da cui

10 * 4096 + 8 * 256 + 5 * 16 + 15 * 1

Queste considerazioni trovano una piacevole, e sicuramente più agevole, declinazione nella tabella che segue, grazie alla quale viene riassunta la conversione tra le diverse rappresentazioni trattate fino a questo momento.

Decimale

Binario

Oct

Hex

0

0000

0

0

1

0001

1

1

2

0010

2

2

3

0011

3

3

4

0100

4

4

5

0101

5

5

6

0110

6

6

7

0111

7

7

8

1000

10

8

9

1001

11

9

10

1010

12

A

11

1011

13

B

12

1100

14

C

13

1101

15

D

14

1110

16

E

15

1111

17

F

Facciamo brevemente due osservazioni:

  1. con una sola cifra Hex, si rappresentano tutti i numeri rappresentabili in binario con 4 cifre;
  2. le basi che è possibile utilizzare o immaginare sono infinite.

In virtù di questa seconda osservazione passiamo ad analizzare un aspetto fondamentale, ovvero come sia possibile effettuare la conversione di un dato espresso in una base (X) verso una nuova base (Y).

Per effettuare la conversione da una base ad un’altra è sufficiente utilizzare una qualsiasi calcolatrice scientifica. E se non l’avete a disposizione, allora apprezzerete la possibilità di ripassare il metodo. Si tratta di svolgere qualche breve e semplice operazione.

La procedura è la seguente:

supponiamo di avere il numero 19 espresso in decimale e di volerlo convertire in binario. Tutto ciò che c’è da fare è dividere il numero n volte per 2. Quello che otterrete è un numero con resto annesso ed a ciascuno dei risultati va associato il peso corrispondente (che rappresenta il numero ordinale progressivo della n-1sima divisione che state eseguendo. È incredibilmente più facile a farsi che a spiegarsi:

Numero

Nuova base

Risultato

Risultato

Peso

19

2

9

1

0

9

2

4

1

1

4

2

2

0

2

2

2

1

0

3

1

2

0

1

4

Così il risultato è il numero binario 10011.

Ancora, supponiamo di avere il numero 31 decimale e di volerlo convertire in esadecimale (hex)

Numero

Nuova base

Risultato

Risultato

Peso

31

16

1

15 (F)

0

1

16

0

1

1

Il risultato è il numero binario 1F.

Qualora abbiate la necessità di effettuare conversioni tra Base 2 e Base 16, esiste un metodo di conversione “rapida”. Supponiamo, infatti, di aver un numero binario ad 8 bit e di volerlo convertire in esadecimale. Il trucco per avere una conversione rapida è suddividere in blocchi da 4 bit (che vengono chiamati nibble) il numero e ricordarsi che con 4 bit si codifica una cifra hex.

Esempi di applicazioni di questo metodo sono:

10101001 -> 1010 1001 -> A 9

1110011110101001 -> 1110 0111 1010 1001 -> E 7 A 9

Altre operazioni importanti

Scorrimento a Sinistra (Shift Left)

Se consideriamo il numero binario 0011, che è pari al 3 decimale, possiamo effettuare un’operazione di spostamento di una posizione a sinistra di tutte le sue cifre, ottenendo così 0110, che è pari al 6 decimale. Se applichiamo un ulteriore scorrimento a sinistra otteniamo 1100, che in decimale è 12. Cioè:

0011 -> 3; 0110 -> 3*2=6; 1100 -> 6*2 = 3*4 = 12.

Queste operazioni ci permettono di notare che uno scorrimento a sinistra equivale ad una moltiplicazione per un fattore 21; allo stesso modo due scorrimenti a sinistra equivalgono ad una moltiplicazione per 22. Ciò si può generalizzare dicendo che uno scorrimento a sinistra di N posizioni moltiplica il numero per 2N. Questa proprietà torna molto utile per spiegare quanto visto al paragrafo precedente.

Scorrimento a Destra (Shift Right)

Operazione duale della precedente è quella di shift a destra; se consideriamo il numero binario 1100, spostiamo di una posizione a destra tutte le sue cifre ed otteniamo 0110, che è pari a 6 decimale. Un ulteriore scorrimento a destra ci fa ottenere 0011 pari a 3 decimale. E, quindi, riassumendo:

1100 -> 12; 0110 -> 12/2 = 6; 0011 -> 12/4 = 6/2 = 3.

A questo punto è facile osservare che uno scorrimento a destra equivale ad una moltiplicazione per 2-1 (1/2), due scorrimenti a destra equivalgono ad una moltiplicazione per 2-2 (1/4) e così via. Generalizziamo, quindi, il concetto dicendo che uno scorrimento a destra di N posizioni moltiplica il numero per 2-N (1/2N).

Scorrimento Aritmetico o Logico

Nelle seguenti figure viene evidenziata la differenza fra i due tipi di scorrimento, ovvero fra lo scorrimento aritmetico e quello logico.

La differenza appare evidente in particolare nello scorrimento a destra, dove il bit di peso più alto, ovvero il più significativo (MSB), viene mantenuto. Vedremo in seguito che tale bit può rappresentare il segno del numero quindi la necessità di mantenere tale informazione risulta vitale fintanto che usiamo la matematica con segno.

Scorrimento Circolare (Rotazione)

Un altro caso particolare di scorrimento è quello circolare, che viene anche detto “rotazione” (per ovvi motivi):

In quello a sinistra il bit più significativo viene riportato al posto di quello meno significativo (LSB). In quello a destra, invece, il bit meno significativo viene riportato nella posizione che prima occupava quello più significativo.

È appena il caso di far notare che applicare questa operazione n volte, con n numero di bit di cui è composto il numero, equivale a non aver applicato l’operazione.

Rotazione a Destra (Rotate Right) e Sinistra (Rotate Left) con Carry

Questo tipo di operazione è un classico esempio di operazione che viene, in genere, utilizzata dai microprocessori per effettuare operazioni matematiche, come avremo modo di approfondire più avanti.

Tutto chiaro fin qui? Bene! Allora…

…arrivederci alla prossima lezione

Quanto detto fino a questo momento potrebbe sembrare semplicemente elementare ma si tratta di concetti, se vogliamo pre-concetti, nel vero senso della parola, che risulteranno piuttosto utili alla comprensione dell’intero corso.

Questo sarà molto più chiaro già dalla prossima lezione, in cui ci occuperemo dei sistemi digitali e quindi delle funzioni logiche. Ciò verrà fatto introducendo anche i concetti di tabella della verità e funzione logica.

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.

volantino eos-book1

Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book?
Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!

Scopri di più

3 Comments

  1. Piero Boccadoro Piero Boccadoro 30 ottobre 2012
  2. Piero Boccadoro Piero Boccadoro 30 ottobre 2012
  3. Piero Boccadoro Piero Boccadoro 2 novembre 2012

Leave a Reply