Salta al contenuto
Note per Studenti Aritmetica binaria

Aritmetica binaria

In questa pagina 7
In questa pagina 3

Somma

In colonna come in base 10, con le regole 0+0=00+0=0, 0+1=10+1=1, 1+1=01+1=0 con riporto 1, 1+1+1=11+1+1 = 1 con riporto 1.

0101 1011+ 0011 10011001 0100(91+57=148)\begin{array}{r} 0101\,1011 \\ +\ 0011\,1001 \\ \hline 1001\,0100 \end{array} \qquad (91 + 57 = 148)

Il circuito che lo fa è il sommatore a propagazione di riporto (vedi Circuiti combinatori notevoliMultiplexer, decodificatore e codificatore; semisommatore e sommatore completo; sommatore a propagazione del riporto e suo ritardo, idea dell'anticipo del riporto; sommatore-sottrattore in complemento a 2 con rilevazione dell'overflow; comparatore.Circuiti combinatori notevoli →).

Sottrazione in complemento a 2

a−b=a+(−b)a - b = a + (-b): si calcola l'opposto di bb (inverti i bit, +1; vedi Rappresentazione dei numeri interi con segnoInteri con segno su n bit: modulo e segno, complemento a 1, complemento a 2 ed eccesso K; intervalli rappresentabili, calcolo dell'opposto, estensione del segno.Rappresentazione dei numeri interi con segno →) e si somma. In hardware: si invertono i bit di bb e si porta a 1 il riporto in ingresso del sommatore, così non serve un sottrattore.

Esempio a 8 bit, 25−4025 - 40:

25=0001 1001,40=0010 1000→−40=1101 100025 = 0001\,1001, \quad 40 = 0010\,1000 \to -40 = 1101\,1000

0001 1001+1101 1000=1111 0001=−128+64+32+16+1=−15 ✓0001\,1001 + 1101\,1000 = 1111\,0001 = -128+64+32+16+1 = -15 \ ✓

Il riporto che esce dal bit più significativo si scarta: 50−2050 - 20 dà 0011 0010+1110 1100=1 0001 11100011\,0010 + 1110\,1100 = 1\,0001\,1110 → 0001 1110=300001\,1110 = 30.

Overflow

Il risultato non sta negli nn bit. La regola dipende da come si interpretano i bit:

Interpretazione Overflow quando Bit che lo segnala
senza segno esce un riporto dal MSB nella somma (nella sottrazione: manca il prestito) C (carry)
complemento a 2 due operandi dello stesso segno danno un risultato di segno opposto V (overflow)

Sommando due numeri di segno diverso non c'è mai overflow in complemento a 2. Equivalente: V=V = riporto entrante nel MSB ⊕\oplus riporto uscente dal MSB.

Esempio a 8 bit: 0111 0000+0101 0000=1100 00000111\,0000 + 0101\,0000 = 1100\,0000.

  • Senza segno: 112+80=192112 + 80 = 192, nessun riporto, risultato corretto (C = 0).
  • Complemento a 2: 112+80112 + 80 dà −64-64: due positivi, risultato negativo → overflow (V = 1).

I processori calcolano sempre entrambi i flag; è il programma a scegliere quale guardare (in ARM: condizioni diverse per confronti con e senza segno, vedi Strutture di controllo in assembly ARMSalti B e condizionati, codici di condizione con e senza segno; traduzione di if, if-else, while, for e do-while da C ad ARM; esecuzione condizionata per eliminare salti brevi; switch con tabella di salto.Strutture di controllo in assembly ARM →). I quattro flag tipici sono N (risultato negativo, cioè MSB), Z (risultato zero), C, V.

Moltiplicazione

Il prodotto di due numeri di nn bit occupa fino a 2n2n bit.

Senza segno, per somme e scorrimenti. Per ogni bit del moltiplicatore, se vale 1 si somma il moltiplicando opportunamente spostato:

1011× 110110110000010110010110001000 1111(11⋅13=143)\begin{array}{r} 1011 \\ \times\ 1101 \\ \hline 1011 \\ 0000\phantom{0} \\ 1011\phantom{00} \\ 1011\phantom{000} \\ \hline 1000\,1111 \end{array} \qquad (11 \cdot 13 = 143)

L'hardware tiene un accumulatore A e il moltiplicatore Q affiancati: a ogni passo, se Q0=1Q_0 = 1 somma il moltiplicando ad A, poi fa scorrere a destra la coppia C, A, Q di un bit. Dopo nn passi il prodotto è in A:Q. Svolto passo per passo in Esercizio 2 · moltiplicazione 11 per 13 su 4 bit.

In complemento a 2: algoritmo di Booth. Si esaminano le coppie (Q0,Q−1)(Q_0, Q_{-1}) con Q−1Q_{-1} inizialmente 0:

Q0 Q−1Q_0\,Q_{-1} Azione
1 0 A←A−MA \leftarrow A - M
0 1 A←A+MA \leftarrow A + M
0 0, 1 1 niente

poi scorrimento aritmetico a destra di A, Q, Q−1Q_{-1}. Una sequenza di 1 consecutivi nel moltiplicatore costa una sottrazione all'inizio e una somma alla fine invece di una somma per bit.

Esempio 7⋅37 \cdot 3 su 4 bit (M=0111M = 0111, Q=0011Q = 0011):

Passo A Q Q−1Q_{-1} Operazione
inizio 0000 0011 0
1 1001 0011 0 10 → A−MA - M
1100 1001 1 shift
2 1110 0100 1 11 → solo shift
3 0101 0100 1 01 → A+MA + M
0010 1010 0 shift
4 0001 0101 0 00 → solo shift

Risultato A:Q=0001 0101=21A:Q = 0001\,0101 = 21 ✓.

Divisione

Senza segno, come in colonna: a ogni passo si prova a sottrarre il divisore dal resto parziale; se il risultato è ≥0\ge 0 il bit del quoziente è 1, altrimenti è 0 e si ripristina il resto. Esempio 13:313 : 3: 1101:111101 : 11 → quoziente 100=4100 = 4, resto 11.

Scorrimenti (shift)

Operazione Effetto Esempio su 8 bit
shift logico a sinistra di kk moltiplica per 2k2^k (se non c'è overflow) 0000 0101≪2=0001 01000000\,0101 \ll 2 = 0001\,0100 (5 → 20)
shift logico a destra di kk divide per 2k2^k un senza segno (entra 0) 1111 0000≫1=0111 10001111\,0000 \gg 1 = 0111\,1000 (240 → 120)
shift aritmetico a destra di kk divide per 2k2^k un numero in complemento a 2 (entra il bit di segno), arrotondando verso −∞-\infty 1111 0000≫1=1111 10001111\,0000 \gg 1 = 1111\,1000 (−16 → −8)
rotazione i bit che escono rientrano dall'altro lato 1000 0001→0000 00111000\,0001 \to 0000\,0011 (a sinistra)

ARM ha gli shift come modificatore del secondo operando di quasi ogni istruzione (LSL, LSR, ASR, ROR, vedi Istruzioni ARM di elaborazione datiIstruzioni aritmetiche (ADD, SUB, RSB, ADC), logiche (AND, ORR, EOR, BIC, MVN), di spostamento (MOV), moltiplicazione (MUL, MLA); secondo operando immediato o registro scalato con LSL, LSR, ASR, ROR; aggiornamento dei flag con S, CMP e TST; esempi di traduzione di espressioni C.Istruzioni ARM di elaborazione dati →).

Errori tipici

  • Considerare overflow il riporto uscente in una somma in complemento a 2: conta solo il cambio di segno.
  • Usare lo shift logico a destra per dividere un negativo: −16=1111 0000-16 = 1111\,0000 diventa 0111 1000=1200111\,1000 = 120.
  • Dimenticare che il prodotto richiede 2n2n bit.

Versione ripasso

Somma, sottrazione, overflow

Moltiplicazione

Il prodotto di nn bit occupa fino a 2n2n bit.

  • Senza segno: se Q0=1Q_0 = 1 si somma M ad A, poi scorrimento a destra di C, A, Q; dopo nn passi il prodotto è in A:Q. 1011⋅1101=1000 11111011 \cdot 1101 = 1000\,1111 (11⋅13=14311 \cdot 13 = 143, Esercizio 2 · moltiplicazione 11 per 13 su 4 bit).
  • Booth (complemento a 2): coppia (Q0,Q−1)(Q_0, Q_{-1}) con Q−1=0Q_{-1} = 0 all'inizio: 10⇒A←A−M10 \Rightarrow A \leftarrow A - M; 01⇒A←A+M01 \Rightarrow A \leftarrow A + M; 00,11⇒00, 11 \Rightarrow niente; poi shift aritmetico a destra. 7⋅37 \cdot 3 su 4 bit (M=0111M = 0111): A−M=1001A - M = 1001 e shift, shift, A+M=0101A + M = 0101 e shift, shift ⇒\Rightarrow A:Q=0001 0101=21A:Q = 0001\,0101 = 21.

Divisione e scorrimenti

Errori tipici: contare il riporto come overflow in complemento a 2; shift logico su un negativo; dimenticare i 2n2n bit del prodotto.

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata