Salta al contenuto
Note per Studenti Unità aritmetico-logica (ALU)

Unità aritmetico-logica (ALU)

In questa pagina 5
In questa pagina 3

L'ALU è la parte del processore che produce nuova informazione: tutto il resto sposta o memorizza dati. Riceve due operandi (da registri o dall'istruzione), un codice di operazione dall'Unità di controlloCompiti dell'unità di controllo e micro-operazioni; segnali di controllo del datapath con tabella per le classi di istruzioni; controllo cablato (combinatorio o a stati finiti) e controllo microprogrammato (memoria di controllo, microistruzioni orizzontali e verticali); confronto.Unità di controllo →, e produce il risultato e i flag N, Z, C, V che vanno nel registro di stato (vedi Struttura interna della CPU e registriComponenti interni della CPU (ALU, unità di controllo, banco dei registri, bus interno); registri visibili all'utente e registri di controllo e stato; flag e parola di stato (PSW) con bit di supervisore; quanti registri conviene avere; segmentazione della memoria.Struttura interna della CPU e registri →).

ALU a 1 bit

Per il bit ii: una porta AND, una porta OR, un sommatore completo (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 →) e un multiplexer che sceglie quale risultato mandare in uscita.

  • ingressi: aia_i, bib_i, riporto cic_i, selezione dell'operazione;
  • uscite: risultato rir_i, riporto ci+1c_{i+1}.

ALU a nn bit

nn ALU a 1 bit con i riporti in cascata (o con anticipo del riporto). Aggiunte:

Codifica tipica dei segnali (stile MIPS):

Ainvert Binvert Operazione Funzione
0 0 AND a⋅ba \cdot b
0 0 OR a+ba + b
0 0 somma a+ba + b aritmetico
0 1 somma con c0=1c_0 = 1 a−ba - b
0 1 less slt
1 1 AND NOR

Esempio: flag dopo una sottrazione a 8 bit

a=0101 0000a = 0101\,0000 (80), b=0111 0000b = 0111\,0000 (112). a−b=a+b‾+1=0101 0000+1000 1111+1=1110 0000a - b = a + \overline{b} + 1 = 0101\,0000 + 1000\,1111 + 1 = 1110\,0000.

  • risultato con segno −32-32 ✓;
  • N = 1, Z = 0;
  • C = 0: nessun riporto in uscita, cioè c'è stato un prestito: senza segno 80<11280 < 112;
  • V = 0: una sottrazione tra due numeri dello stesso segno non può andare in overflow (in termini di somma: 80+(−112)80 + (-112), operandi di segno diverso).

È esattamente ciò che fa CMP in ARM prima di un salto condizionato (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 →).

Altre unità di calcolo

Errori tipici

  • Pensare che in ARM C = 1 dopo una sottrazione indichi un prestito: è il contrario, C = 1 significa nessun prestito (a≥ba \ge b senza segno).
  • Calcolare Z guardando solo il bit più significativo.

Versione ripasso

Produce nuova informazione: da due operandi e un codice di operazione dall'Unità di controlloCompiti dell'unità di controllo e micro-operazioni; segnali di controllo del datapath con tabella per le classi di istruzioni; controllo cablato (combinatorio o a stati finiti) e controllo microprogrammato (memoria di controllo, microistruzioni orizzontali e verticali); confronto.Unità di controllo → dà il risultato e i flag N, Z, C, V (Struttura interna della CPU e registriComponenti interni della CPU (ALU, unità di controllo, banco dei registri, bus interno); registri visibili all'utente e registri di controllo e stato; flag e parola di stato (PSW) con bit di supervisore; quanti registri conviene avere; segmentazione della memoria.Struttura interna della CPU e registri →).

Costruzione

Esempio

a=0101 0000a = 0101\,0000 (80), b=0111 0000b = 0111\,0000 (112): a+b‾+1=0101 0000+1000 1111+1=1110 0000=−32a + \overline{b} + 1 = 0101\,0000 + 1000\,1111 + 1 = 1110\,0000 = -32. N = 1, Z = 0; C = 0 (nessun riporto, cioè prestito: 80<11280 < 112 senza segno); V = 0 (operandi di segno diverso nella somma). È ciò che fa CMP prima di un salto (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 →).

Altre unità

Moltiplicatore (sequenziale con Booth, o combinatorio), divisore sequenziale, barrel shifter (scorrimento in un ciclo, davanti al secondo ingresso dell'ALU in ARM), FPU (Numeri in virgola mobile IEEE 754Virgola fissa e virgola mobile; formato IEEE 754 a 32 e 64 bit (segno, esponente in eccesso 127, mantissa con 1 implicito); conversioni svolte nei due versi; valori speciali, denormalizzati, intervallo, precisione e arrotondamento.Numeri in virgola mobile IEEE 754 →; in ARM coprocessore VFP/NEON).

Errori tipici: in ARM C = 1 dopo una sottrazione significa nessun prestito (a≥ba \ge b senza segno); Z non si ricava dal solo MSB.

Lezioni in cui compare

Teoria collegata