2012-08-26 15 views
7

Czy ktoś zna kroki dotyczące dzielenia liczb całkowitych niepodpisanych przy użyciu podziału nieodzyskiwania?Algorytm nieprzywiązywania funkcji przywracania

Trudno znaleźć dobre źródła w Internecie.

tj jeśli A = 101110 i B = 010111

jak znaleźć A divided by B w niewyspecjalizowanych przywracając podział? Jak wyglądają rejestry w każdym kroku?

Dzięki!

+0

Sprawdź kod źródłowy [tej strony] (http://www.ecs.umass.edu/ece/koren/arith/simulator/NRDiv/). –

Odpowiedz

20

(Moja odpowiedź jest trochę późno odpowiedzi, ale mam nadzieję, że będzie to przydatne dla przyszłych użytkowników).

algorytm dla przywrócenia podziału podano w poniższej obrazu:

enter image description here

w tym zadaniu dywidenda (a) = 101110, to jest 46 i dzielnik (B) = 010111, tj 23.

Inicjalizacja:

Set Register A = Dividend = 000000 
Set Register Q = Dividend = 101110 
(So AQ = 000000 101110 , Q0 = LSB of Q = 0) 
Set M = Divisor = 010111, M' = 2's complement of M = 101001 
Set Count = 6, since 6 digits operation is being done here. 

Potem zaczniemy algorytmu, co wykazałem w poniższej tabeli:

w tabeli, SHL(AQ) denotes shift left AQ by one position leaving Q0 blank.

Podobnie symbol kwadratu w Q0 pozycji oznaczać it is to be calculated later

enter image description here

nadzieję, że wszystkie kroki są wynika z tabeli !!!

-1

1) ustawiona wartość rejestr A jako 0 (N bitów)
2) ustawiona wartość rejestru M bitami dzielnik (n)
3) ustawiona wartość rejestru Q jak Dividend (N bitów)
4) Połącz A z Q {A, Q}
5) Powtórz następującą liczbę "n" razy (tutaj n jest liczbą bitów w dzielniku): Jeśli bit znaku A jest równy 0, przesuń A i Q połączone, pozostawione przez 1 bit i odejmij M od A. Else przesunięcie A i Q połączone, pozostawione przez 1-bit i dodaj M do A Teraz, jeśli bit znaku A jest równy 0, ustaw Q [0] jako 1 , w przeciwnym razie ustaw Q [0] jako 0
6) Na koniec, jeśli bit znaku A jest równy 1, dodaj M do A.
7) Przypisz A jako resztę, a Q jako iloraz.