Salta al contenuto
Note per Studenti Esercizio 5 · algoritmo di Booth (temi d'esame gennaio 2021, gennaio 2022, gennaio 2023 e gennaio 2026)

Esercizio 5algoritmo di Booth (temi d'esame gennaio 2021, gennaio 2022, gennaio 2023 e gennaio 2026)

Esame
In questa pagina 6

Testo (temi d'esame gennaio 2021 problema P1.3, gennaio 2022 P1.3, gennaio 2023 P3, gennaio 2026 P4). Applicando l'algoritmo di Booth si calcolino i prodotti seguenti di numeri interi con segno su 5 bit, riportando i prodotti parziali ottenuti al termine di ogni iterazione, cioè dopo lo scorrimento (con il moltiplicatore nella parte bassa):

(a) (0x1C)⋅(0x12)(\texttt{0x1C})\cdot(\texttt{0x12}) (gennaio 2021); (b) (0x1A)⋅(0x1B)(\texttt{0x1A})\cdot(\texttt{0x1B}) (gennaio 2022); (c) (0x05)⋅(0x1A)(\texttt{0x05})\cdot(\texttt{0x1A}) (gennaio 2023); (d) 10001⋅1011010001\cdot10110 (gennaio 2026).


Teoria usata: 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 →, 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 →.

Schema di lavoro

Registri AA (5 bit, parte alta del prodotto, all'inizio 0), QQ (5 bit, moltiplicatore), bit q−1=0q_{-1}=0 e moltiplicando MM. A ogni passo si guarda la coppia Q0q−1Q_0q_{-1}: 10 → A←A−MA\leftarrow A-M; 01 → A←A+MA\leftarrow A+M; 00 o 11 → nulla; poi shift aritmetico a destra di A Q q−1A\,Q\,q_{-1}. Dopo 5 passi A QA\,Q (10 bit) è il prodotto in complemento a 2. Per ogni prodotto si assume il primo fattore come moltiplicando e il secondo come moltiplicatore (la scelta inversa dà prodotti parziali diversi ma lo stesso risultato).

I valori: 0x1C=11100=−4\texttt{0x1C}=11100=-4, 0x12=10010=−14\texttt{0x12}=10010=-14, 0x1A=11010=−6\texttt{0x1A}=11010=-6, 0x1B=11011=−5\texttt{0x1B}=11011=-5, 0x05=00101=5\texttt{0x05}=00101=5, 10001=−1510001=-15, 10110=−1010110=-10.

(a) (−4)⋅(−14)(-4)\cdot(-14): M=11100M=11100, Q=10010Q=10010

Passo Q0q−1Q_0q_{-1} Azione A QA\,Q dopo lo shift
1 00 nulla 00000 0100100000\,01001
2 10 A=00000−11100=00100A=00000-11100=00100 00010 0010000010\,00100
3 01 A=00010+11100=11110A=00010+11100=11110 11111 0001011111\,00010
4 00 nulla 11111 1000111111\,10001
5 10 A=11111−11100=00011A=11111-11100=00011 00001 1100000001\,11000

Risultato 00001110002=560000111000_2=\mathbf{56} ✓ ((−4)(−14)=56(-4)(-14)=56).

(b) (−6)⋅(−5)(-6)\cdot(-5): M=11010M=11010, Q=11011Q=11011

Passo Q0q−1Q_0q_{-1} Azione A QA\,Q dopo lo shift
1 10 A=00000−11010=00110A=00000-11010=00110 00011 0110100011\,01101
2 11 nulla 00001 1011000001\,10110
3 01 A=00001+11010=11011A=00001+11010=11011 11101 1101111101\,11011
4 10 A=11101−11010=00011A=11101-11010=00011 00001 1110100001\,11101
5 11 nulla 00000 1111000000\,11110

Risultato 00000111102=300000011110_2=\mathbf{30} ✓.

(c) 5⋅(−6)5\cdot(-6), con M=0x1A=11010M=\texttt{0x1A}=11010 e Q=0x05=00101Q=\texttt{0x05}=00101

Passo Q0q−1Q_0q_{-1} Azione A QA\,Q dopo lo shift
1 10 A=00000−11010=00110A=00000-11010=00110 00011 0001000011\,00010
2 01 A=00011+11010=11101A=00011+11010=11101 11110 1000111110\,10001
3 10 A=11110−11010=00100A=11110-11010=00100 00010 0100000010\,01000
4 01 A=00010+11010=11100A=00010+11010=11100 11110 0010011110\,00100
5 00 nulla 11111 0001011111\,00010

Risultato 11111000102=−301111100010_2=-30 ✓ (in complemento a 2 su 10 bit: 1024−30=994=11111000101024-30=994=1111100010). Qui il moltiplicatore 0010100101 ha 4 transizioni, quindi sono necessarie 4 somme/sottrazioni: la sequenza alternata non è favorevole a Booth.

(d) (−15)⋅(−10)(-15)\cdot(-10): M=10001M=10001, Q=10110Q=10110

Passo Q0q−1Q_0q_{-1} Azione A QA\,Q dopo lo shift
1 00 nulla 00000 0101100000\,01011
2 10 A=00000−10001=01111A=00000-10001=01111 00111 1010100111\,10101
3 11 nulla 00011 1101000011\,11010
4 01 A=00011+10001=10100A=00011+10001=10100 11010 0110111010\,01101
5 10 A=11010−10001=01001A=11010-10001=01001 00100 1011000100\,10110

Risultato 00100101102=1500010010110_2=\mathbf{150} ✓ (=128+16+4+2=128+16+4+2). Il prodotto 150150 non entrerebbe in 8 bit con segno (>127>127) ma entra nei 2n=102n=10 bit.

Errori comuni

  • Non scorrere a destra quando l'azione è "nulla".
  • Shift logico invece di aritmetico: a A=11110A=11110 lo shift logico darebbe 0111101111 invece di 1111111111.
  • Sottrarre quando la coppia è 01: 10 sottrae, 01 somma.
  • Dimenticare i bit scartati dalla somma oltre il bit più alto (il riporto uscente da AA non va conservato).
  • Leggere il risultato su 5 bit invece che su 10.

Versione ripasso

Testo. Booth su 5 bit: 1C⋅12\texttt{1C}\cdot\texttt{12}, 1A⋅1B\texttt{1A}\cdot\texttt{1B}, 05⋅1A\texttt{05}\cdot\texttt{1A}, 10001⋅1011010001\cdot10110, con i prodotti parziali dopo lo shift (gennaio 2021, 2022, 2023, 2026).

Teoria collegata