logo

Algorytm mnożenia Bootha

Algorytm budkowy to algorytm mnożenia, który pozwala nam pomnożyć dwie liczby całkowite binarne ze znakiem w uzupełnieniu do 2. Służy także do przyspieszenia wykonania procesu mnożenia. Jest również bardzo wydajny. Działa na bitach ciągu zerowych w mnożniku, który nie wymaga dodatkowego bitu, jedynie przesuwa najbardziej na prawo bity ciągu i ciąg jedynek w bitach mnożnika o wadze 2kdo wagi 2Mktóre można uznać za 2k+ 1- 2M .

Poniżej znajduje się obrazowe przedstawienie algorytmu Bootha:

Budka

Na powyższym schemacie początkowo AC I Qn + 1 bity są ustawione na 0, a SC jest licznikiem sekwencji reprezentującym całkowity zestaw bitów N, która jest równa liczbie bitów w mnożniku. Tam są BR które reprezentują mnożniki bitów, i QR oznacza bity mnożnika . Następnie napotkaliśmy dwa bity mnożnika jako QNi Qn + 1, gdzie Qn reprezentuje ostatni bit QR, a Qn + 1reprezentuje bit Qn zwiększony o 1. Załóżmy, że dwa bity mnożnika są równe 10; oznacza to, że musimy odjąć mnożnik od iloczynu częściowego w akumulatorze AC, a następnie wykonać operację przesunięcia arytmetycznego (ashr). Jeśli oba mnożniki są równe 01, oznacza to, że musimy dodać mnożną do iloczynu częściowego w akumulatorze AC, a następnie wykonać operację przesunięcia arytmetycznego ( Aszr ), w tym Qn + 1 . Operacja przesunięcia arytmetycznego jest używana w algorytmie Bootha do przesuwania bitów AC i QR w prawo o jeden, pozostawiając bit znaku w AC niezmieniony. Licznik sekwencji jest stale zmniejszany, aż do powtórzenia pętli obliczeniowej równej liczbie bitów (n).

Praca nad algorytmem Booth

  1. Ustaw bity binarne mnożnika i mnożnika odpowiednio na M i Q.
  2. Początkowo ustawiamy AC i Qn + 1rejestruje wartość 0.
  3. SC reprezentuje liczbę bitów mnożnika (Q) i jest licznikiem sekwencji, który jest stale zmniejszany, aż będzie równy liczbie bitów (n) lub osiągnięty do 0.
  4. Qn reprezentuje ostatni bit Q, a Qn+1pokazuje bit Qn zwiększony o 1.
  5. W każdym cyklu algorytmu budkowego QNi Qn + 1bity zostaną sprawdzone dla następujących parametrów w następujący sposób:
    1. Kiedy dwa bity QNi Qn + 1mają wartość 00 lub 11, po prostu wykonujemy arytmetyczną operację przesunięcia w prawo (ashr) do iloczynu częściowego AC. Oraz bity Qn i Qn + 1zwiększa się o 1 bit.
    2. Jeśli bity QNi Qn + 1jest pokazany na 01, bity mnożne (M) zostaną dodane do AC (rejestru akumulatora). Następnie wykonujemy operację przesunięcia w prawo bitów AC i QR o 1.
    3. Jeśli bity QNi Qn + 1wynosi 10, bity mnożnika (M) zostaną odjęte od AC (rejestru akumulatora). Następnie wykonujemy operację przesunięcia w prawo bitów AC i QR o 1.
  6. Operacja działa w sposób ciągły, aż do osiągnięcia n - 1 bitu w algorytmie kabiny.
  7. Wyniki mnożenia bitów binarnych będą przechowywane w rejestrach AC i QR.

W algorytmie Bootha stosowane są dwie metody:

Linux edytuj plik

1. RSC (kołowy z prawym przesunięciem)

Przesuwa najbardziej na prawo bit liczby binarnej, a następnie jest dodawany na początku bitów binarnych.

Budka

2. RSA (arytmetyka z przesunięciem w prawo)

Dodaje dwa bity binarne, a następnie przesuwa wynik w prawo o 1-bitową pozycję.

ciąg porównaj Java

Przykład : 0100 + 0110 => 1010, po dodaniu liczby binarnej przesuwamy każdy bit o 1 w prawo i umieszczamy pierwszy bit wynikowej na początku nowego bitu.

Przykład: Pomnóż dwie liczby 7 i 3, korzystając z algorytmu mnożenia Bootha.

Lata . Mamy tutaj dwie liczby, 7 i 3. Przede wszystkim musimy przekonwertować 7 i 3 na liczby binarne, takie jak 7 = (0111) i 3 = (0011). Teraz ustaw 7 (w formacie binarnym 0111) jako mnożnik (M) i 3 (w formacie binarnym 0011) jako mnożnik (Q). SC (liczba sekwencji) reprezentuje liczbę bitów, a tutaj mamy 4 bity, więc ustaw SC = 4. Pokazuje także liczbę cykli iteracji algorytmów kabiny, a następnie cykle są uruchamiane SC = SC - 1 raz.

QN Qn + 1 M = (0111)
M' + 1 = (1001) i operacja
AC Q Qn + 1 SC
1 0 Wstępny 0000 0011 0 4
Odejmować (M' + 1) 1001
1001
Wykonywanie operacji arytmetycznych z przesunięciem w prawo (ashr) 1100 1001 1 3
1 1 Wykonywanie operacji arytmetycznych z przesunięciem w prawo (ashr) 1110 0100 1 2
0 1 Dodatek (A + M) 0111
0101 0100
Wykonaj arytmetyczną operację przesunięcia w prawo 0010 1010 0 1
0 0 Wykonaj arytmetyczną operację przesunięcia w prawo 0001 0101 0 0

Liczbowy przykład algorytmu mnożenia Bootha to 7 x 3 = 21, a binarna reprezentacja liczby 21 to 10101. Tutaj otrzymujemy wynik w postaci binarnej 00010101. Teraz konwertujemy go na dziesiętny, jako (000010101)10= 2*4 + 2*3 + 2*2 + 2*1 + 2*0 => 21.

węzeł listy

Przykład: Pomnóż dwie liczby 23 i -9, korzystając z algorytmu mnożenia Bootha.

Tutaj M = 23 = (010111) i Q = -9 = (110111)

QNQn + 1 M = 0 1 0 1 1 1
M' + 1 = 1 0 1 0 0 1
ACQQn + 1SC
Początkowo 000000 110111 0 6
1 0 Odejmij M 101001
101001
Wykonaj arytmetyczną operację przesunięcia w prawo 110100 111011 piętnaście
jedenaście Wykonaj arytmetyczną operację przesunięcia w prawo 111010 011101 1 4
jedenaście Wykonaj arytmetyczną operację przesunięcia w prawo 111101 001110 1 3
0 1 Dodatek (A + M) 010111
010100
Wykonaj arytmetyczną operację przesunięcia w prawo 001010 000111 0 2
1 0 Odejmij M 101001
110011
Wykonaj arytmetyczną operację przesunięcia w prawo 111001 100011 jedenaście
jedenaście Wykonaj arytmetyczną operację przesunięcia w prawo 111100 110001 1 0

Qn + 1 = 1, oznacza to, że wynik jest ujemny.

Zatem 23 * -9 = uzupełnienie 2 liczby 111100110001 => (00001100111)