|
 |
Numeri
e Logica Binaria |
SCHEDA n° 09 [
4
di 20] |
 |
|
Numeri senza segno: la somma aritmetica |
|
 | Cominciamo con il considerare
senza
segno i
numeri
binari della tabella precedente; come detto, se
formattati a 8 bit (cioè della dimensione
di un Byte)
il loro valore va da
00000000
(0)
a 11111111
(255). |
 | Vediamo in che modo possiamo
esercitare su di essi le 4 operazioni;
devo sottolineare che questo compito è
svolto in maniera egregia da qualunque processore, per cui
sembra inutile accanirsi a capire tecniche
che nessuno di noi metterà realmente in pratica... |
 | Tuttavia ammetto che la
lettura di questi esempi può aiutare a capire i meccanismi effettivamente
attivati dai processori stessi; del resto questi ultimi sono nostre
creature e dovranno obbedire a criteri ormai consolidati, se pur in
binario... |
 | Così la
somma aritmetica binaria non è poi molto diversa da
quella decimale; le cifre dei due addendi
sono sommate colonna dopo colonna, tenendo conto dell'eventuale
riporto, da
sommare con gli eventuali operandi della colonna adiacente a sinistra. |
 | La regola da applicare a
ciascuna colonna è, nei 4 casi possibili: |
|
Binario |
Decimale |
|
0+0=
0
con riporto di
0 |
0+0=
0 (00)2 |
|
0+1=
1 con riporto di
0
|
0+1=
1 (01)2 |
|
1+0=
1
con riporto di
0 |
1+0=
1 (01)2 |
|
1+1=
0 con riporto di
1 |
1+1=
2 (10)2 |
 | La "traduzione" decimale
della tabella mostra che l'ultima somma (1+1), dovendo dare 2 come risultato,
lascerà le "unità" a 0 e proporrà un riporto da aggiungere alle "decine"
(la colonna adiacente a sinistra) per garantire il risultato binario atteso,
(10)2 (naturalmente i termini "unità" e "decine" sono
del tutto figurati..). |
 | Vediamo alcuni esempi: |
|
Binario |
Decimale |
|
R ...
100 +
11 =
----------
111 |
4 +
3 =
----------
7 |
|
Binario |
Decimale |
|
R 1..
110 +
11 =
----------
1001 |
6 +
3 =
----------
9 |
|
Binario |
Decimale |
|
R 111.
1101 +
11 =
----------
10000 |
13 +
3 =
----------
16 |
 | Da notare che i processori
eseguono questo compito in pochi nanosecondi,
con numeri a 8, 16, 32 bit, ..., senza batter ciglio
(da qui l'assurdità di perdere ulteriore tempo con queste pratiche
ancestrali...); il processore 80x86 prevede
2 istruzioni specifiche, la
ADD
(Addizione aritmetica tra
numeri interi)
e la
ADC
(Addizione aritmetica tra
numeri interi, con riporto). |
 | Se la somma viene operata con
dati formattati (per esempio a 8 bit) può succedere
che il risultato non sia
attendibile; l'errore si manifesta quando, sommando i bit più
significativi (quelli della colonna più a sinistra), si verifica la necessità
di generare un riporto: |
|
Binario |
Decimale |
|
R1........
11101010+
10000000=
---------
01101010 |
234 +
128 =
----------
106 (?!) |
 | La cosa è assolutamente
logica: la somma dei due addendi darebbe risultato
362
decimale,
che in binario ha bisogno di 9 bit,
101101010,
provocando un overflow, cioè un
trabocco dei limiti consentiti; infatti, poichè i
bit sono solamente 8, il risultato viene troncato a
01101010,
pari a
106
decimale,
esattamente la differenza tra
362
(il risultato decimale atteso) e 256
(il peso del mancante
nono bit). |
 | Per ovviare a questo
inconveniente i costruttori di processori hanno previsto un particolare bit (flag Carry) che assume comunque il valore del
riporto della somma di numeri binari
della stessa dimensione. |
 | Questo bit (insieme ad altri
dello stesso tipo) è conservato in un particolare Registro
del processore 80x86, facilmente consultabile, per consentire al
programmatore assembly di prendere
(eventualmente) i provvedimenti del caso. |
 | In ultimo possiamo mostrare la Tabella di Verità
di una somma aritmetica tra 2 numeri da 1 bit
ciascuno: |
|
A |
B |
Somma |
Riporto |
|
0 |
0 |
0 |
0 |
|
0 |
1 |
1 |
0 |
|
1 |
0 |
1 |
0 |
|
1 |
1 |
0 |
1 |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|