Aritmetica binaria
In questa pagina 7
In questa pagina 3
Somma
In colonna come in base 10, con le regole , , con riporto 1, con riporto 1.
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
: si calcola l'opposto di (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 e si porta a 1 il riporto in ingresso del sommatore, così non serve un sottrattore.
Esempio a 8 bit, :
Il riporto che esce dal bit più significativo si scarta: dà → .
Overflow
Il risultato non sta negli 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: riporto entrante nel MSB riporto uscente dal MSB.
Esempio a 8 bit: .
- Senza segno: , nessun riporto, risultato corretto (C = 0).
- Complemento a 2: dà : 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 bit occupa fino a bit.
Senza segno, per somme e scorrimenti. Per ogni bit del moltiplicatore, se vale 1 si somma il moltiplicando opportunamente spostato:
L'hardware tiene un accumulatore A e il moltiplicatore Q affiancati: a ogni passo, se somma il moltiplicando ad A, poi fa scorrere a destra la coppia C, A, Q di un bit. Dopo 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 con inizialmente 0:
| Azione | |
|---|---|
| 1 0 | |
| 0 1 | |
| 0 0, 1 1 | niente |
poi scorrimento aritmetico a destra di A, Q, . Una sequenza di 1 consecutivi nel moltiplicatore costa una sottrazione all'inizio e una somma alla fine invece di una somma per bit.
Esempio su 4 bit (, ):
| Passo | A | Q | Operazione | |
|---|---|---|---|---|
| inizio | 0000 | 0011 | 0 | |
| 1 | 1001 | 0011 | 0 | 10 → |
| 1100 | 1001 | 1 | shift | |
| 2 | 1110 | 0100 | 1 | 11 → solo shift |
| 3 | 0101 | 0100 | 1 | 01 → |
| 0010 | 1010 | 0 | shift | |
| 4 | 0001 | 0101 | 0 | 00 → solo shift |
Risultato ✓.
Divisione
Senza segno, come in colonna: a ogni passo si prova a sottrarre il divisore dal resto parziale; se il risultato è il bit del quoziente è 1, altrimenti è 0 e si ripristina il resto. Esempio : → quoziente , resto .
Scorrimenti (shift)
| Operazione | Effetto | Esempio su 8 bit |
|---|---|---|
| shift logico a sinistra di | moltiplica per (se non c'è overflow) | (5 → 20) |
| shift logico a destra di | divide per un senza segno (entra 0) | (240 → 120) |
| shift aritmetico a destra di | divide per un numero in complemento a 2 (entra il bit di segno), arrotondando verso | (−16 → −8) |
| rotazione | i bit che escono rientrano dall'altro lato | (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: diventa .
- Dimenticare che il prodotto richiede bit.
Versione ripasso
Somma, sottrazione, overflow
- Somma in colonna: con riporto 1, con riporto 1 (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: , con bit di invertiti e riporto iniziale 1 (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 →); il riporto uscente dal MSB si scarta. A 8 bit .
- Overflow senza segno: riporto uscente dal MSB (flag C). In complemento a 2: operandi dello stesso segno e risultato di segno opposto (flag V riporto entrante riporto uscente); segni diversi: mai overflow.
- : senza segno corretto (C = 0); in complemento a 2 , V = 1.
- Flag N (MSB), Z, C, V: il programma sceglie quali guardare (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 →).
Moltiplicazione
Il prodotto di bit occupa fino a bit.
- Senza segno: se si somma M ad A, poi scorrimento a destra di C, A, Q; dopo passi il prodotto è in A:Q. (, Esercizio 2 · moltiplicazione 11 per 13 su 4 bit).
- Booth (complemento a 2): coppia con all'inizio: ; ; niente; poi shift aritmetico a destra. su 4 bit (): e shift, shift, e shift, shift .
Divisione e scorrimenti
- Divisione senza segno: si sottrae il divisore dal resto parziale; resto bit 1, altrimenti 0 e si ripristina. quoziente , resto .
- Shift logico a sinistra di : . Logico a destra: per i senza segno (). Aritmetico a destra: in complemento a 2, entra il bit di segno (, ). Rotazione: i bit usciti rientrano. In ARM
LSL,LSR,ASR,ROR(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: contare il riporto come overflow in complemento a 2; shift logico su un negativo; dimenticare i bit del prodotto.