Esercizio 4somme in complemento a 2, overflow e flag (temi d'esame gennaio 2023, luglio 2026 e esempi di prova)
In questa pagina 5
Testo (tema d'esame gennaio 2023, problema P4; esempio d'appello 2020-21, problema 2; prove del 2004; luglio 2026, problema 6).
(i) In una aritmetica a virgola fissa a 8 bit si eseguono le somme dei seguenti numeri decimali, rappresentati come interi con segno: . Determinare (a) il risultato delle due somme indicate; (b) quante volte si attiva il flag di overflow del processore; (c) quanto indicato ai punti precedenti se l'ordine diventa .
(ii) Si consideri il formato 2.6 su 8 bit (complemento a 2). Eseguire e dare il risultato in decimale: , , . Dire se c'è overflow.
(iii) Sommare i numeri esadecimali a 8 bit in complemento a 2 e e riportare il risultato in decimale.
(iv) Indicare vero o falso: a. l'overflow di una somma viene sempre segnalato dalla ALU; b. lo stato della ALU è descritto dai bit di un registro apposito; c. in ogni istante il program counter punta la locazione dell'istruzione in esecuzione; d. il vettore delle eccezioni è un altro dei registri essenziali di una ALU; e. nessuna ALU può essere priva di un circuito moltiplicatore; f. alcuni microcontrollori a basso costo sono privi di ALU.
Teoria usata: Numeri binari e complemento a dueI processori lavorano con un numero fisso di bit $n$. I naturali vanno da $0$ a $2^n-1$; per i negativi si usa il complemento a due: $C_2(N)=2^n-N=\overline N+1$ (si invertono tutti i bit e si somma 1). Con $n$ bit rappresenta $-2^{n-1}\le N\le2^{n-1}-1$, ha un solo zero e unifica somma e sottrazione. Quando il risultato esce dall'intervallo c'è overflow; gli overflow intermedi si compensano se il risultato finale è rappresentabile. La lunghezza di parola non è l'accuratezza.Numeri binari e complemento a due →, ALU - sommatore, overflow, carry look-ahead e shiftL'ALU è un insieme di celle a 1 bit (full adder + selettori) collegate in parallelo: somma, sottrae ($A-B=A+\overline B+1$: si inverte $B$ e si porta il riporto iniziale a 1), fa AND/OR. Il ritardo è dominato dal riporto: nel ripple-carry cresce linearmente con i bit; col carry look-aheadtecnica che calcola in anticipo i riporti da generazione e propagazione, riducendo il ritardo i riporti si calcolano da generazione $g_i=A_iB_i$ e propagazione $p_i=A_i+B_i$ in pochi livelli di logica. L'overflow è $V=C_{in,n-1}\oplus C_{out,n-1}$. Gli shift logici inseriscono 0, gli aritmetici estendono il segno; il barrel shiftercircuito che sposta una parola di un numero qualsiasi di posizioni in un solo ciclo sposta di $m$ posti in un ciclo.ALU - sommatore, overflow, carry look-ahead e shift →, Virgola fissa - formati n.m e normalizzazioneIn virgola fissa il processore fa aritmetica sugli interi (con segno) e il fattore di scalacostante per cui si moltiplica un valore reale per ottenere l'intero memorizzato $2^{m}$ resta sottinteso: il formato n.m dice che dei bit disponibili $n$ sono la parte intera (compreso il segno se il numero è con segno, S; nessun segno se U) e $m$ la parte frazionaria. Il valore è $\text{codice}/2^m$. Passare dal formato n.m al decimale, o viceversa, è il calcolo più frequente dell'esame: su 16 bit $\text{valore}=\text{codice}/2^m$, l'intervallo è $[0,2^n)$ (U) oppure $[-2^{n-1},2^{n-1})$ (S), la risoluzione è $2^{-m}$.Virgola fissa - formati n.m e normalizzazione →.
(i) Ordine delle somme
Con 8 bit con segno l'intervallo è .
. Prima somma: : overflow (due positivi danno un negativo): su 8 bit (). Nell'ultima cella il riporto in ingresso è 1 e quello in uscita è 0: . Seconda operazione: ; : . Due negativi hanno dato un positivo: di nuovo overflow (, ). Il risultato finale è , corretto (, rappresentabile): per la circolarità del complemento a 2 gli overflow intermedi si compensano. Il flag di overflow si attiva 2 volte.
. (positivo meno positivo: nessun overflow, : segni opposti dopo la negazione di 82); , nessun overflow. Risultato 94, 0 volte il flag.
Riassunto: stesso risultato (94), ma nel primo ordine il flag si accende due volte. Un overflow non compensato renderebbe invece il risultato errato: per esempio come risultato finale su 8 bit è (errato) e il flag segnala il problema.
(ii) Formato 2.6
Il formato 2.6 su 8 bit ha intervallo e risoluzione .
- , cioè ; (cioè ). Somma: . Segni opposti: nessun overflow.
- (); (): somma . Segni opposti: nessun overflow.
- () meno (): , fuori da : overflow. Il risultato nel circuito è , errato (il valore vero è , non rappresentabile in 2.6). In termini di riporti: nell'ultima cella e , .
(iii) Somme esadecimali
e : (), nessun overflow. e : (), nessun overflow (segni opposti). In decimale (con le tabelle del 2004): ; .
(iv) Vero o falso
- a. Vero. Tutti i processori rilevano l'overflow con un bit del registro di stato (flag V, che vale nell'ultima cella: ALU - sommatore, overflow, carry look-ahead e shiftL'ALU è un insieme di celle a 1 bit (full adder + selettori) collegate in parallelo: somma, sottrae ($A-B=A+\overline B+1$: si inverte $B$ e si porta il riporto iniziale a 1), fa AND/OR. Il ritardo è dominato dal riporto: nel ripple-carry cresce linearmente con i bit; col carry look-aheadtecnica che calcola in anticipo i riporti da generazione e propagazione, riducendo il ritardo i riporti si calcolano da generazione $g_i=A_iB_i$ e propagazione $p_i=A_i+B_i$ in pochi livelli di logica. L'overflow è $V=C_{in,n-1}\oplus C_{out,n-1}$. Gli shift logici inseriscono 0, gli aritmetici estendono il segno; il barrel shiftercircuito che sposta una parola di un numero qualsiasi di posizioni in un solo ciclo sposta di $m$ posti in un ciclo.ALU - sommatore, overflow, carry look-ahead e shift →).
- b. Vero. I flag (zero, segno, riporto, overflow) formano il registro di stato.
- c. Falso. Il program counter contiene l'indirizzo dell'istruzione successiva da prelevare (durante l'esecuzione, in una pipeline, è già avanzato).
- d. Falso. Il vettore delle eccezioni è una tabella in memoria, non un registro della ALU.
- e. Falso. Molte ALU (e molti µC) sono prive del moltiplicatore hardware: il prodotto si fa con somme e shift (Moltiplicazione e algoritmo di BoothLa moltiplicazione hardware imita il calcolo a mano: somme e shift ripetuti. Per numeri senza segno si somma il moltiplicando se il bit del moltiplicatore è 1 e si fa shift a destra del prodotto parziale; il moltiplicatore sta nella metà bassa del registro del prodotto. Per i numeri con segno serve l'algoritmo di Booth: si guardano i bit del moltiplicatore a coppie (bit corrente, bit precedente, all'inizio 0): 10 → si sottrae il moltiplicando, 01 → si somma, 00/11 → niente; poi shift aritmeticoscorrimento che conserva il segno: a destra ripete il bit di segno a destra. Dopo $n$ passi si hanno $2n$ bit in complemento a 2. Va eseguito sui compiti d'esame a mano con lo schema di registri $A,|,Q,|,q_{-1}$.Moltiplicazione e algoritmo di Booth →).
- f. Falso. Ogni processore ha una ALU (anche i µC più semplici, a 4 o 8 bit).
Errori comuni
- Dire che l'overflow intermedio rende errato il risultato finale quando questo è rappresentabile.
- Cercare overflow con operandi di segno opposto (non si verifica mai in una somma).
- Confondere riporto uscente e overflow: l'overflow è lo XOR dei riporti in ingresso e in uscita dall'ultima cella.
- Interpretare i bit del formato 2.6 come interi nel risultato finale (dividere per 64 dopo la somma).
Versione ripasso
Testo. Somme in complemento a 2 a 8 bit con conteggio degli overflow e formato 2.6 (gennaio 2023, prove 2004 e 2020-21, luglio 2026).
- : (overflow), (overflow): risultato 94 corretto, flag 2. : , : flag 0.
- 2.6: ; ; : overflow ( non sta in 8 bit), il circuito dà al posto di ().
- Hex:
73+CA;7F+80. - V/F: a V, b V, c F (PC = istruzione successiva), d F, e F, f F (ALU - sommatore, overflow, carry look-ahead e shiftL'ALU è un insieme di celle a 1 bit (full adder + selettori) collegate in parallelo: somma, sottrae ($A-B=A+\overline B+1$: si inverte $B$ e si porta il riporto iniziale a 1), fa AND/OR. Il ritardo è dominato dal riporto: nel ripple-carry cresce linearmente con i bit; col carry look-aheadtecnica che calcola in anticipo i riporti da generazione e propagazione, riducendo il ritardo i riporti si calcolano da generazione $g_i=A_iB_i$ e propagazione $p_i=A_i+B_i$ in pochi livelli di logica. L'overflow è $V=C_{in,n-1}\oplus C_{out,n-1}$. Gli shift logici inseriscono 0, gli aritmetici estendono il segno; il barrel shiftercircuito che sposta una parola di un numero qualsiasi di posizioni in un solo ciclo sposta di $m$ posti in un ciclo.ALU - sommatore, overflow, carry look-ahead e shift →).
- Errori: intermedi ritenuti fatali; overflow con segni opposti; riporto uscente = overflow (Numeri binari e complemento a dueI processori lavorano con un numero fisso di bit $n$. I naturali vanno da $0$ a $2^n-1$; per i negativi si usa il complemento a due: $C_2(N)=2^n-N=\overline N+1$ (si invertono tutti i bit e si somma 1). Con $n$ bit rappresenta $-2^{n-1}\le N\le2^{n-1}-1$, ha un solo zero e unifica somma e sottrazione. Quando il risultato esce dall'intervallo c'è overflow; gli overflow intermedi si compensano se il risultato finale è rappresentabile. La lunghezza di parola non è l'accuratezza.Numeri binari e complemento a due →).