-
Wprowadzenie do inżynierii przetwarzania informacji. Ćwiczenie
3.
Arytmetyka stałopozycyjna
Cel dydaktyczny: Nabycie umiejętności wykonywania podstawowych
operacji arytmetycz-nych na liczbach stałopozycyjnych. Algorytmy
dodawania, odejmowania, mnożenia i dziele-nia pisemnego w kodzie
NKB. Wykonywanie operacji arytmetycznych w systemach cyfro-wych.
Operacje arytmetyczne w kodzie BCD i kodach uzupełnieniowych.
Algorytmy mnoże-nia i dzielenia w systemach cyfrowych.
1. Odjąć pisemnie liczby binarne w kodzie NKB o wartościach A =
14.5 i B = 7.625.2. Pomnożyć pisemnie liczby binarne w kodzie NKB o
wartościach A = 13.25 i B = 5.3. Podzielić pisemnie liczby binarne
w kodzie NKB o wartościach A = 19.75 i B = 4.125.
Wyznaczyć iloraz i resztę.4. Dodać w kodzie NKB oraz kodzie BCD
następujące liczby binarne 8-bitowe o warto-ściach A = 94 i B =
28.
5. Odjąć w kodzie ZM liczby binarne 8-bitowe o wartościach A =
+12 i B = -25.6. Dodać w kodzie U1 liczby binarne 8-bitowe o
wartościach A = -13 i B = 46.7. Dodać w kodzie U1 liczby binarne
8-bitowe o wartościach A = -25 i B = -99.8. Dodać w kodzie U2
liczby binarne 9-bitowe o wartościach A = -35 i B = -135.9. Wykonać
mnożenie w kodzie NKB za pomocą algorytmu przeznaczonego dla
układów
cyfrowych. Pomnożyć 5-bitowe liczby binarne A = 01101 = +13 i B
= 01001 = +9. Przy-jąć wynik 10-bitowy.
10. Wykonać dzielenie w kodzie NKB za pomocą algorytmu
przeznaczonego dla układówcyfrowych. Podzielić liczbę 8-bitową A =
0011 1000 = +56 przez liczbę 4-bitowąB = 0110 = +6.
-
Wprowadzenie do inżynierii przetwarzania informacji. Ćwiczenie
3.
Arytmetyka stałopozycyjna
Cel dydaktyczny: Nabycie umiejętności wykonywania podstawowych
operacji arytmetycz-nych na liczbach stałopozycyjnych. Algorytmy
dodawania, odejmowania, mnożenia i dziele-nia pisemnego w kodzie
NKB. Wykonywanie operacji arytmetycznych w systemach cyfro-wych.
Operacje arytmetyczne w kodzie BCD i kodach uzupełnieniowych.
Algorytmy mnoże-nia i dzielenia w systemach cyfrowych.
Wprowadzenie teoretyczne
3. Operacje na liczbach stałopozycyjnych
Na liczbach rzeczywistych zapisanych w układzie binarnym można
wykonywać pod-stawowe operacje arytmetyki stałopozycyjnej podobnie
jak w układzie dziesiętnym.
3.1. Reguły działań arytmetycznych w układzie dziesiętnym
DodawanieOperacja dodawania dwóch liczb S = A+B w układzie
dziesiętnym rozpoczyna się od
cyfr najmniej znaczących ai oraz bi obu liczb. Jeśli suma cyfr
przekroczy 9 pojawia się prze-niesienie ci+1=1 na następną pozycję,
a jeśli nie to otrzymana suma stanowi najmniej znaczącącyfrę
wyniku. Wynika stąd, że w przypadku dodawania cyfr ai oraz bi
należy uwzględnićprzeniesienie wchodzące ci z pozycji mniej
znaczącej oraz przeniesienie wychodzące ci+1 napozycję bardziej
znaczącą. W przypadku dodawania wartość przeniesienia nie może
przekro-czyć jedynki. Reguły dodawania cyfr w układzie dziesiętnym
mogą być zapisane w postaci:
si = (ai + bi + ci) mod 10,ci+1 = (ai + bi + ci) div 10,
gdzie mod – operator reszta z dzielenia, div – operator część
całkowita z dzielenia.
W wyniku dodawania liczb n-cyfrowych może pojawić się wynik co
najwyżej (n+1) cyfrowy.
Przykład. 3.1. Dodać pisemnie liczby dziesiętne A = 244 i B =
58.
11244+58----302
Suma S = A + B = 244 + 58 = 302.
-
OdejmowanieWyznaczanie różnicy cyfr ai - bi może wymagać
pobrania pożyczki z pozycji bardziej
znaczącej (i+1). Jeśli między dwoma odejmowanymi cyframi
zachodzi relacja ai < bi, to po-bierana jest pożyczka z pozycji
(i+1). Jej wartość na pozycji i wynosi 10. Stąd, di = (10 + ai)
-bi, natomiast cyfra ai+1 > 0 przyjmuje wartość równą (ai+1-1).
W przypadku odejmowaniamożna przyjąć, że A ≥ B. Wówczas różnica
jest dodatnia i wynosi D = A-B. W przeciwnymprzypadku należy
obliczyć D = B-A i wynik wziąć ze znakiem przeciwnym.
Przykład. 3.2. Odjąć pisemnie liczby dziesiętne A = 143 i B =
97.
3 101 4 3-9 7
-------4 6
Różnica D = A - B = 143 - 97 = 46.
MnożenieW przypadku mnożenia dwóch cyfr ai oraz bi może pojawić
się przeniesienie wycho-
dzące ci+1 na pozycję bardziej znaczącą o wartości większej niż
jeden. Uwzględniając prze-niesienie z pozycji mniej znaczącej
reguły obliczania iloczynu M = A*B w układzie dziesięt-nym można
zapisać w postaci:
mi = (ai * bi + ci) mod 10,ci+1 = (ai * bi + ci) div 10.
W wyniku mnożenia liczby k-cyfrowej przez liczbę n-cyfrową może
pojawić się iloczyn zło-żony z co najwyżej (k+n) cyfr.
Przykład. 3.3. Pomnożyć pisemnie liczby dziesiętne A = 453 i B =
37.
132453*37----3171
+1359-------
16761
Iloczyn M = A * B = 453 * 37 = 16761. W wyniku mnożenia liczby
3-cyfrowej przez liczbę2-cyfrową otrzymano 5-cyfrowy iloczyn.
-
DzielenieOperacja dzielenia dwóch liczb E = A : B jest
równoważna odejmowaniu A – B. Jeśli
A ≥ B, to można wyznaczyć część całkowitą z dzielenia oraz
resztę lub część całkowitą iczęść ułamkową z zadaną dokładnością
(ustalona liczba cyfr po przecinku ilorazu). Wynikastąd, że iloraz
można obliczyć jedynie z zadaną dokładnością lub podać wynik w
postaciułamka.
Przykład. 3.4. Podzielić pisemnie liczby dziesiętne A = 1121 i B
= 37.
30----1121 : 37-111----
11
Iloraz E = A : B = 1121 : 37 = 30 i 11/37, tj. iloraz wynosi
trzydzieści i jedenaście trzydzie-stych siódmych. Dzielenie można
wykonywać z uwzględnieniem zadanej liczby miejsc poprzecinku.
30.297 2...----1121 : 37-111----
110-74----
360-333-----
270-259-----
110-74----...
W wyniku dzielenia E = 30.297 (297) ... .
3.2. Operacje arytmetyczne w naturalnym kodzie binarnym
(NKB)
Reguły działań arytmetycznych w układzie binarnym są podobne do
reguł stosowa-nych w układzie dziesiętnym. Różnica polega na tym,
że operacje dodawania cyfr wykonujesię modulo dwa, a w przypadku
odejmowania pożyczka z pozycji bardziej znaczącej mawartość dwa na
pozycji mniej znaczącej. Poniżej są przedstawione reguły pisemnego
doda-wania, odejmowania, mnożenia i dzielenia dla liczb
jednobitowych w kodzie NKB.
-
3.2.1. Dodawanie binarne
W przypadku dodawania składników jednobitowych ai + bi są
możliwe cztery przy-padki. Cyfra ai może być równa 0 lub 1 i
podobnie cyfra bi. Prowadzi to do następującychreguł dodawania
składników jednobitowych.
Przeniesienie ci+1 0 1 0
0----------------------------------------Składnik ai 1 1 0
0Składnik bi 0 1 0 1----------------------------------------Suma si
1 0 0 1
Przykład. 3.5. Dodać pisemnie liczby binarne A = 1101.11 = 13.75
i B = 110.1 = 6.5.
11111101.11+110.1---------10100.01
S = A + B = 1101.11 + 110.1 = 10100.01 = 20.25. Sprawdzenie:
13.75 + 6.5 = 20.25.
3.2.2. Odejmowanie binarne
Operacja odejmowania binarnego liczb jednobitowych ai - bi może
wymagać zacią-gnięcia pożyczki z pozycji bardziej znaczącej.
Uwzględniając dopuszczalne wartości bitóworaz to, że pożyczka ma
wartość dwa, reguły odejmowania binarnego liczb jednobitowychmają
następującą postać:
Pożyczka pi+1 0 0 0
1----------------------------------------Odjemna ai 1 1 0 0Odjemnik
bi 0 1 0 1----------------------------------------Różnica di 1 0 0
1
W przypadku odejmowania 0 – 1 pobierana jest pożyczka o wartości
jeden z pozycji (i+1).Wartość pożyczki na pozycji o numerze (i)
wynosi 2. Stąd, różnica ai - bi = 0 + 2 – 1 = 1.
Podczas odejmowania liczb binarnych A – B wystarczy zakładać, że
A ≥ B, gdyż wprzeciwnym przypadku można wykonać odejmowanie B – A i
następnie wynik końcowywziąć ze znakiem przeciwnym.
Przykład. 3.6. Odjąć pisemnie liczby binarne A = 1001.01 = 9.25
i B = 110.1 = 6.5.
0120 21001.01-110.10---------
010.11
-
D = A - B = 1001.01 - 110.1 = 10.11 = 2.75. Sprawdzenie: 9.25 -
6.5 = 2.75.
3.2.3. Mnożenie binarne
Mnożenie cyfr binarnych ai * bi nie prowadzi do powstania
przeniesienia na pozycjębardziej znaczącą. Stąd, reguły mnożenia
mają następującą postać:
Mnożna ai 1 1 0 0Mnożnik bi 0 1 0
1----------------------------------------Iloczyn mi 0 1 0 0
W przypadku mnożenia liczb w układzie binarnym zachodzi
konieczność sumowania iloczy-nów cząstkowych. W wyniku mnożenia
może pojawić się iloczyn zajmujący tyle bitów ilewynosi suma bitów
zajmowanych przez mnożną i mnożnik. Jeśli mnożone liczby są
ułamka-mi, to podczas mnożenia można pominąć przecinki w mnożnej i
mnożniku, a następnie wsta-wić przecinek w otrzymanym iloczynie.
Liczba bitów po przecinku w iloczynie jest równałącznej liczbie
bitów po przecinku w mnożnej i mnożniku.
Przykład. 3.7. Pomnożyć pisemnie liczby binarne A = 111.01 =
7.25 i B = 110.1 = 6.5.
11101*1101-------111010000011101
+11101-----------101111001
Uwzględniając trzy miejsca po przecinku uzyskuje się M = A * B =
111.01 * 110.1 =101111.001 = 47.125. Sprawdzenie: 7.25 * 6.5 =
47.125.
Przykład. 3.8. Pomnożyć pisemnie liczby binarne A = 111.1 = 7.5
i B = 111.1 = 7.5.
1111*1111-------23321 przeniesienie
----------111111111111
+1111----------11100001
-
Uwzględniając dwa miejsca po przecinku uzyskuje się M = A * B =
111.1 * 111.1 =111000.01 = 56.25. Sprawdzenie: 7.5 * 7.5 =
56.25.
3.2.4. Dzielenie binarne
Operacja dzielenia binarnego jest związana z odejmowaniem
dzielnika od dzielnej. Wprzypadku dzielenia cyfr binarnych ai : bi
wystarczy rozważyć tylko dzielenie przez jeden.Stąd, reguły
dzielenia mają następującą postać:
Dzielna ai 1 0Dzielnik bi 1
1---------------------------------Iloraz ei 1 0
Dzielenie można zakończyć w momencie, gdy pojawi się reszta lub
kontynuować dzielenie,aż do uzyskania zadanej liczby miejsc po
przecinku. Najlepiej przed dzieleniem przesunąćprzecinek w dzielnej
i dzielniku o taką samą ilość pozycji tak, aby w dzielniku nie
występo-wały bity po przecinku.
Przykład. 3.9. Podzielić pisemnie liczby binarne A = 11101.01 =
29.25 i B = 10.1 = 2.5.Przesunięcie przecinka A = 111010.1 oraz B =
101.
1011.----------------111010.1 : 101-101----------
1001-101
----------1000-101
-------------11.1 reszta
Można kontynuować dzielenie i w rezultacie otrzymać część
ułamkową.
-
1011.1011001100 ...----------------111010.1 :
101-101----------
1001-101
----------1000-101
----------11 1-10 1
-----------1 000- 101
-----------0110-101
-----------1000-101
--------------...
W wyniku dzielenia otrzymano iloraz E = A : B = 11101.01 : 10.1
= 1011 reszta 11.1/101 =11 reszta 3.5/5. Sprawdzenie: 29.25 : 2.5 =
11.7 = 1011.10 (1100) ... .
3.3. Realizacja operacji arytmetycznych w systemach
cyfrowych
W systemach cyfrowych operacje arytmetyczne są wykonywane na
liczbach o okre-ślonej liczbie bitów. W wyniku realizacji działań
arytmetycznych pojawia się wynik, któryjest zapamiętywany na
określonej liczbie bitów. Na przykład w przypadku dodawania
liczbn-bitowych często przyjmuje się, że wynik również zajmuje n
bitów. Można zauważyć, żewykonanie określonej operacji
arytmetycznej na liczbach o określonej liczbie bitów może daćwynik,
który wykracza poza zakres wartości liczbowych reprezentowanych w
danym kodziena danej liczbie bitów. Wówczas powstaje nadmiar (ang.
overflow), który musi być zasygna-lizowany użytkownikowi układu
cyfrowego. Powstawanie nadmiaru podczas dodawania liczbdodatnich w
kodzie NKB ilustruje następujący przykład.
Przykład. 3.10. Dodać dwie liczby 4-bitowe w kodzie NKB. Wynik
sumowania zapamiętaćna 4 bitach. Liczba A = 1100 = 12. Liczba B =
1010 = 10.
1100+1010------
C=1 0110 C - przeniesienie
S = A + B = 1100 + 1010 = 10110 = 22. Sprawdzenie 12 + 10 =
22.
-
W wyniku operacji sumowania pojawia się przeniesienie c=1 na
pozycję numer cztery.Oznacza to, że zakres wyniku został
przekroczony. Rozwiązaniem tego problemu jest wypo-sażenie układu
cyfrowego w sygnalizację przeniesienia lub zwiększenie zakresu
wyniku ojeden bit.
W praktyce cyfrowe układy arytmetyczne wykonujące podstawowe
działania są wy-posażone w sygnał wyjściowy sygnalizujący nadmiar
(np. jednostka arytmetyczno-logicznaprocesora). Układy te
sygnalizują także inne cechy wyniku jak: znak, wynik jest równy
zero,wynik zawiera parzystą liczbę jedynek, itp. Bity te są
nazywane w układach cyfrowychznacznikami (flagami, ang. flags).
3.3.1. Dodawanie liczb stałopozycyjnych
Liczby dodatnie w kodach ZM, U1 i U2 są reprezentowane tak jak w
kodzie NKB.Dodawanie takich liczb wykonuje się w sposób identyczny
dla wszystkich kodów. W przy-padku liczb A i B dodając bity z
pozycji i-tej uwzględnia się również przeniesienie z pozycjimniej
znaczącej. Dlatego w czasie sumowania na i-tej pozycji dodawane są
trzy bity: dwa bityai oraz bi należące do obu składników oraz
przeniesienie ci z pozycji mniej znaczącej (i-1).Suma ai + bi + ci
daje wynik si oraz przeniesienie wychodzące ci+1. Zasadę obliczania
sumy sioraz przeniesienia ci+1 w przypadku sumatora jednobitowego
pokazano poniżej.
Łącząc szeregowo n sumatorów jednobitowych powstanie sumator
n-bitowy.
ai bi ci si ci+1----------------------------------------0 0 0 0
00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1
1
Sumowanie dwóch liczb o określonej liczbie bitów może dać wynik,
który wykracza pozazakres wartości liczbowych reprezentowanych w
danym kodzie na określonej liczbie bitów.Powstaje wówczas nadmiar,
który musi być zasygnalizowany przez odpowiedni bit znaczni-kowy
układu cyfrowego.
�
ai bi
cici+1
si
-
Przykład. 3.11. Dodać dwie, dodatnie liczby 8-bitowe A=48 i B=58
w kodach NKB, ZM, U1,U2 oraz kodzie BCD. Wynik sumowania zapamiętać
na 8 bitach.
48 00110000 NKB,ZM,U1,U2+58 +00111010----- ----------106
01101010
W przypadku kodu BCD otrzymuje się:
1 przeniesienie0100 1000+0101 1000------------
1010 0000 = (10)(0)| nie jest cyfrą dziesiętną
Otrzymany wynik nie jest prawidłowy. Na młodszej tetradzie
pojawiło się 0 oraz przeniesie-nie na starszą tetradę. Natomiast na
starszej tetradzie pojawiło się słowo nie należące do koduBCD
(liczba 10). W takich przypadkach proces sumowania rozszerza się o
krok korekcyjny.Jeśli na i-tej tetradzie powstało przeniesienie lub
wynik sumowania nie jest cyfrą dziesiętną,to do wyniku dodaje się 6
oraz ewentualne przeniesienie powstające na (i-1)-ej tetradzie.
Dlarozpatrywanego przykładu 3.11 korekcja wyniku dla kodu BCD
przebiega w sposób nastę-pujący:
1010 0000 = (10)(0)+ 0110 0110 = (6)(6)-----------
C=1 0000 0110 = (0)(6)
W wyniku korekcji wyniku pojawiło się przeniesienie na trzecią
tetradę. Otrzymana liczba mawięc w kodzie BCD następującą
postać:
0001 0000 0110 = 106
Jest to poprawny wynik dodawania liczb A=48 i B=58.
Przykład. 3.12. Dodać dwie, dodatnie liczby 8-bitowe A=78 i B=57
w kodach NKB, ZM, U1,U2 oraz kodzie BCD. Wynik sumowania zapamiętać
na 8 bitach.
111178 01001110 NKB,ZM,U1,U2+57 +00111001----- ----------135
10000111
W kodzie NKB otrzymana suma jest równa 135, a więc wynik jest
poprawny. Natomiast wkodach ZM, U1 i U2, ze względu na ustawiony
bit znaku na najstarszej pozycji, otrzymanywynik jest ujemny.
Rzeczywiście liczby 135 nie da się przedstawić na 7 bitach.
Prawidłowedodawanie takich liczb można wykonać jedynie na większej
liczbie bitów. W rozpatrywanymprzypadku wystarczy wykonać dodawanie
na słowach 9-bitowych.
-
111178 001001110 NKB,ZM,U1,U2+57 +000111001----- -----------135
010000111 = 135
W przypadku kodu BCD otrzymuje się:
1110111 1000+0101 0111------------
1100 1111 = (12)(15)
W wyniku dodawania na obu tetradach pojawiły się słowa nie
należące do kodu BCD (liczby15 i 12). W celu otrzymania
prawidłowego wyniku należy dokonać korekcji dodając do każ-dej
tetrady 6.
1 111100 1111 = (12)(15)+0110 0110 = (6) (6)------------0011
0101 = (3)(5)
C=(1) (1)C=(1)– nadmiar (przeniesienie na trzecią tetradę)
W wyniku dodawania otrzymano przeniesienie na trzecią tetradę.
Otrzymana suma ma w ko-dzie BCD następującą postać:
0001 0011 0101 = 135
Jest to poprawny wynik dodawania liczb A=78 i B=57.
3.3.2. Odejmowanie liczb stałopozycyjnych
Odejmowanie liczb w kodach uzupełnieniowych U1, U2 można
sprowadzić do doda-wania dwóch argumentów o przeciwnych
znakach.
W kodzie ZM odejmowanie dwóch liczb o przeciwnych znakach
sprowadza się do po-równania modułów liczb w celu ustalenia znaku
wyniku jako znaku liczby o większym mo-dule. Następnie wyznacza się
różnicę modułów przez odjęcie mniejszego modułu od więk-szego
modułu w sposób identyczny jak dla liczb w kodzie NKB.
W przypadku odejmowania od ai = 0 wartości bi = 1 należy pobrać
pożyczkę pi+1 = 1wychodzącą z pozycji (i+1). Wartość tej pożyczki
na pozycji (i) wynosi 2. Podczas odejmo-wania bitów na i-tej
pozycji należy odjąć również pożyczkę pi wchodzącą z pozycji
mniejznaczącej (i-1). Wzór na odejmowanie bitów z pozycji i-tej ma
następującą postać:
di = ai - bi - pi + 2∗ pi+1 .
-
Np. Odejmowanie A=2 i B=1. Różnica D=A-B=1. W tym przypadku
p0=0, p1=1 i p2=0.W wyniku odejmowania d0 = a0 - b0 - p0 + 2∗ p1 =
0 – 1 – 0 + 2∗ 1 = 1 oraz d1 = a1 – b1 – p1 +2∗ p2 = 1 – 0 – 1 + 2∗
0 = 0.
210 (2)
- 01 (1)-----
01 (1)
Poniżej przedstawiono sposób obliczania różnicy dwóch liczb di =
ai - bi - pi + 2∗ pi+1 zuwzględnieniem pożyczki.
ai bi pi di pi+1----------------------------------------0 0 0 0
00 0 1 1 10 1 0 1 10 1 1 0 11 0 0 1 01 0 1 0 01 1 0 0 01 1 1 1
1
Przykład. 3.13. Odjąć w kodzie ZM dwie liczby 8-bitowe A=-28 i
B=10.
W kodzie ZM odejmowanie realizowane jest na modułach liczb a
następnie uzupełniany jestznak wyniku. Porównanie modułów liczb
prowadzi do przyjęcia ujemnego znaku wyniku.Odejmując od 28 liczbę
10 otrzymuje się:
00011100 = 28- 00001010 = 10--------------00010010 = 18
Uwzględniając znak wyniku otrzymana różnica w kodzie ZM ma
wartość –18 = 10010010.
Odejmowanie w kodzie ZM wymaga ustalenia znaku wyniku na
podstawie porówna-nia modułów argumentów. Wynika stąd, że w kodzie
ZM odejmowanie realizuje się inaczejniż dodawanie w tym kodzie,
które nie wymaga takiego porównywania. Jest to wada koduZM, która
powoduje, że jest on rzadko stosowany.
W przypadku kodów uzupełnieniowych U1 i U2 przedstawiona wada
kodu ZM niewystępuje. Odejmowanie wykonuje się w tych kodach w taki
sam sposób jak dodawanie zuwzględnieniem zakresu liczb dodatnich i
ujemnych w obu typach kodów.
-
Odejmowanie w kodzie U1
W kodzie U1 wartość dziesiętną liczby całkowitej R =
an-1an-2...a1a0 można obliczyć zewzoru:
�−
=
−− +−−=
2
0
11 2)12(
n
k
kk
nn aaR .
Dla liczb dodatnich (an-1=0). Dla liczb ujemnych (an-1=1),
natomiast na pozostałych (n-1) bi-tach znajduje się liczba dodatnia
X będąca dopełnieniem modułu liczby R do 2(n-1) –1 (suma|R| + X
wynosi 2(n-1) -1). Dla R ujemnego wartość (n-1)-bitowej liczby X
można obliczyć zewzoru:
RaX nn
k
kk +−==
−−
=� )12(2
12
0
.
Sposób odejmowania zależy od wartości liczby X oraz znaków
odejmowanych liczb.
Przykład. 3.14. Przedstawić w 8-bitowym kodzie U1 liczbę R=-20.
Podać wartość liczby Xzdefiniowanej na pierwszych siedmiu bitach
słowa kodowego. Obliczyć wartość W = |R| + X.
-R = 20 = 0001 0100 R = -20 = 1 1101011 X = 1101011 = 127 + (–
20) = 107 W = |R| + X = 127.
Odejmowanie liczb o różnych znakach
Dodając do ujemnej liczby A (X = 2n-1-1 + A) dodatnią liczbę B
(Y = B) obliczana jestsuma bitów obu liczb z pozycji od 0 do n-2 (X
+ Y), która wynosi
BAn ++−− )12( 1 .Jeśli moduł liczby ujemnej jest większy (równy)
niż moduł liczby dodatniej, tj.
|A| ≥ B, to suma A+B jest ujemna (równa zero) i wynik jest
mniejszy (równy) od 2(n-1)-1.W tym przypadku nie następuje
przeniesienie na pozycję (n-1) o wadze 2(n-1). Na
najstarszejpozycji pozostaje bit znaku (an-1=1), a otrzymana liczba
jest ujemna. Przedstawiony przypa-dek ilustruje następujący
przykład.
Przykład. 3.15. Dodać w 8-bitowym kodzie U1 liczby A=-20 i
B=7.
111111101011 (-20)+00000111 (+7)----------11110010 (-13)
00001101 (+13)
W tym przypadku |A| > B. Nie powstało przeniesienie na
pozycję najbardziej znaczącą (n-1)i wynik jest poprawny.
W przypadku dodawania w kodzie U1 liczb n-bitowych A i B o
przeciwnych znakachnieprawidłowy wynik pojawi się, gdy moduł liczby
dodatniej jest większy od modułu liczbyujemnej, tj. gdy B > |A|.
W tym przypadku na (n-1) bitach liczby ujemnej A, zapisanej w
ko-dzie U1, zakodowana jest liczba dodatnia X będąca dopełnieniem
modułu liczby do 2(n-1) -1,natomiast na odpowiednich (n-1)
pozycjach liczby dodatniej B jest zakodowany jej moduł.Jeśli
wartość modułu liczby B jest większa niż modułu A, to po dodaniu
pierwszych (n-1)
-
bitów pojawi się liczba większa od 2(n-1)–1. Spowoduje to
pojawienie się przeniesienia napozycję bitu znaku co prowadzi do
zmiany bitu wyniku na 0 (wynik ma być dodatni).Wartość liczbowa
wyniku jest równa sumie bitów obu liczb z pozycji od 0 do n-2,
pomniej-szonej o wartość przeniesienia na pozycję (n-1). Stąd, suma
liczb ma wartość
12)12( 11 −+=−++− −− BABA nn . Jest to wartość nieprawidłowa. W
takim przypadkunależy wykonać krok korekcyjny i dodać do wyniku 1.
Przedstawione rozważania ilustrujenastępujący przykład.
Przykład. 3.16. Dodać w 8-bitowym kodzie U1 liczby A=-20 i
B=45.
11 111111101011 (-20)+00101101 (+45)----------
C=1 00011000 (+24)
W tym przypadku B >|A|. Powstało przeniesienie na pozycję
bitu znaku. W wyniku dodawa-nia otrzymano liczbę +24 oraz
przeniesienie. Krok korekcyjny polega na dodaniu jedynki
dowyniku:
00011000 (+24)+ 00000001 (+1) korekcja-----------
00011001 (+25)
Konieczność dokonywania korekcji wyniku w przypadkach
powstawania przeniesie-nia na najbardziej znaczącą pozycję jest
wadą kodu U1, gdyż wydłuża czas dodawania. Wskrajnym przypadku
dodanie jedynki w ramach korekcji wyniku może spowodować, że
prze-niesienie będzie propagować przez wszystkie pozycje wyniku.
Może to prowadzić do dwu-krotnego zwiększenia czasu dodawania. Wady
tej nie ma kod U2, w którym nie jest wymaga-na korekcja podczas
dodawania liczb z przeciwnym znakiem.
Odejmowanie liczb ujemnych
Dodawanie liczb ujemnych A i B w kodzie U1 zawsze da
przeniesienie wychodzącez pozycji (n-1), gdyż oba bity znaku są
jedynkami. Jeśli suma bitów pochodzących z pozycjiod 0 do (n-2) (X
+ Y)obu liczb jest większa lub równa 2(n-1)-1, to aby otrzymać
prawidłowywynik należy wykonać krok korekcyjny dodając do wyniku
1.
Przykład. 3.17. Dodać w 8-bitowym kodzie U1 liczby A=-20 i
B=-30.
1 1 111 1101011 (-20)(107)+1 1100001 (-30) (97)----------
C=1 1 1001100 (-51)0 0000001 (+1) korekcja----------1 1001101
(-50)
0 0110010 (50)
-
Suma liczb (n-1)-bitowych jest większa niż 127 (107 + 97 = 204).
W celu otrzymania prawi-dłowej wartości do wyniku dodano jeden.
Przykład. 3.18. Dodać w 8-bitowym kodzie U1 liczby A=-85 i
B=-42.
1 0101010 (-85) (42)+1 1010101 (-42) (85)----------
C=1 0 1111111 (+127)0 0000001 (+1) korekcja----------1 0000000
(-127)
Suma liczb (n-1)-bitowych jest równa 127 (42 + 85). W celu
otrzymania prawidłowej warto-ści do wyniku dodano jeden.
Jeśli suma bitów pochodzących z pozycji od 0 do (n-2) (X+Y) obu
liczb jest mniejszaniż 2(n-1)-1, to dodawanie liczb, nawet po
uwzględnieniu korekcji, prowadzi do nieprawidło-wego wyniku.
Przykład. 3.19. Dodać w 8-bitowym kodzie U1 liczby A=-30 i
B=-98.
11 1100001 (-30) (97)+1 0011101 (-98) (29)----------
C=1 0 1111110 (+126)0 0000001 (+1) korekcja----------0 1111111
(+127)
Suma liczb (n-1)-bitowych jest mniejsza niż 127 (97 + 29 = 126).
Nawet po dodaniu jedynkinie otrzymano prawidłowego wyniku (A+B
=–128). Jeśli jednak wykona się to samo dodawa-nie dla liczb
9-bitowych (n=9), to otrzyma się przypadek, w którym suma liczba
(n-1) bito-wych przekroczy 2(n-1)-1 = 255. Wówczas wynik będzie
prawidłowy po dodaniu jedynki.
1 11100001 (-30) (225)+1 10011101 (-98) (157)-----------
C=1 1 01111110 (-129)0 00000001 (+1) korekcja-----------1
01111111 (-128)
Konieczność wykonywania kroku korekcyjnego w przypadku, gdy na
pozycji najbar-dziej znaczącej (n-1) pojawia się przeniesienie,
jest wadą kodu U1. Realizacja operacji odej-mowania w kodzie U2 nie
ma tej wady.
-
Odejmowanie w kodzie U2
W kodzie U2 wartość dziesiętną liczby całkowitej R =
an-1an-2...a1a0 można obliczyć zewzoru:
�−
=
−− +−=
2
0
11 2)2(
n
k
kk
nn aaR .
Dodając do ujemnej liczby A dodatnią liczbę B obliczana jest
suma bitów obu liczb zpozycji od 0 do n-2, która wynosi
BAn ++− )2( 1 .
Jeśli suma ta przekroczy wartość 2(n-1) –1, to pojawi się
przeniesienie na pozycję bitu znaku(pozycja o numerze n-1). Znak
wyniku będzie wówczas równy 0 a wartość sumy wyniesie
BABA nn +=−++ −− 11 2)2( .
Wynika stąd, że dodawanie liczb z przeciwnym znakiem w kodzie U2
daje poprawny wynikbez kroku korekcyjnego.
Przykład. 3.20. Dodać w 8-bitowym kodzie U2 liczby A=-20 i
B=45.
11 1111101100 (-20)+00101101 (+45)----------
C=1 00011001 (+25)
Wynik dodawania jest poprawny i wynosi -20 + 45 = 25.
Przykład. 3.21. Dodać w 8-bitowym kodzie U2 liczby A=20 i
B=-45.
100010100 (+20)+11010011 (-45)----------11100111 (-25)
00011001 (+25)
Wynik dodawania jest poprawny i wynosi 20 - 45 = -25.
Dodając dwie liczby ujemne można przekroczyć dopuszczalny zakres
dla kodu U2 iwówczas na najbardziej znaczącej pozycji powstanie
zero, co oznacza, że wynik jest dodatni.Nie jest to zgodne z
prawdą, gdyż obie liczby są ujemne. W takim przypadku należy
wykonaćoperacje na liczbach o większej liczbie bitów.
-
Przykład. 3.22. Dodać w 8-bitowym kodzie U2 liczby A=-20 i
B=-45.111101100 (-20)+11010011 (-45)----------
C=1 10111111 (-65)
Wynik dodawania jest poprawny i wynosi -20 -45 = -65.
Przykład. 3.23. Dodać w 8-bitowym kodzie U2 liczby A=-40 i
B=-120.11
11011000 (-40)+10001000 (-120)---------
C=1 01100000 (+96)
W przypadku uwzględniania 8 bitów wynik nie jest prawidłowy.
Jeśli uwzględni się liczby9-bitowe, to otrzymany wynik będzie
poprawny.
1 11111011000 (-40)+110001000 (-120)----------
C=1 101100000 (-160)
010100000 (+160)
3.3.3. Mnożenie liczb stałopozycyjnych
W systemie dwójkowym liczby A i B mnoży się w tylu krokach z ilu
bitów składająsię czynniki. Jeśli mnoży się pisemnie dwie liczby
n-bitowe w kodzie NKB, to wykonuje sięto w n krokach. W każdym
kroku mnoży się jedną cyfrę mnożnika B przez mnożną A. W wy-niku
otrzymuje się iloczyn cząstkowy, który jest wpisywany z odpowiednim
przesunięciem.Na końcu algorytmu sumowanych jest n iloczynów
cząstkowych. Wynik mnożenia może byćco najwyżej (n+n) – bitowy.
Przykład. 3.24. Pomnożyć pisemnie w kodzie NKB 4-bitowe liczby
binarne A = 0101 = 5i B = 0111 = 7. Iloczyn A * B = 35.
0101 mnożna (+5)*0111 mnożnik (+7)-------2111 przeniesienie
----------010101010101
+0000----------
0100011 iloczyn (+35)
-
W urządzeniach cyfrowych stosuje się zwykle sumatory
dwuargumentowe. Należywięc tak zmodyfikować algorytm mnożenia, aby
już w każdym kroku wykonywać sumowa-nie iloczynów cząstkowych, a
nie sumowanie wielu składników na końcu algorytmu. Dlategow każdym
kroku algorytmu mnożenia liczb w kodzie NKB wykonuje się dodawanie
iloczy-nów cząstkowych i przesunięcie wyniku o jedną pozycję w
prawo. Jednym ze składnikówdodawania jest zawsze iloczyn cząstkowy,
a drugi składnik zależy od aktualnej wartości naj-mniej znaczącego
bitu mnożnika (najbardziej skrajny prawy bit mnożnika). Jeśli jest
on rów-ny 1, to składnik jest mnożną, a jeśli jest on równy 0, to
składnik jest zerem (słowem dwój-kowym reprezentującym liczbę
0).
W celu ilustracji działania algorytmu zostanie rozpatrzone
mnożenie liczb +7 i +5.Oba czynniki można zapisać w kodzie NKB na
czterech bitach. Iloczyny cząstkowe i wynikmnożenia mogą być co
najwyżej 8-bitowe. Algorytm rozpoczyna się od zapisania mnożnika+5
na młodszych bitach 8-bitowego słowa (druk wytłuszczony), w którym
będą składowaneiloczyny cząstkowe. Na starszych bitach słowa jest
wpisywane 0. Następnie wykonywane sącztery kroki złożone z
dodawania i przesunięcia w prawo. Jeśli wartość bitu na najmniej
zna-czącej pozycji 8-bitowego słowa wynosi 0, to do czterech
najbardziej znaczących bitów słowajest dodawane 0, a jeśli wartość
tego bitu wynosi 1, to do czterech najbardziej znaczącychbitów
słowa jest dodawana mnożna.
Przykład. 3.25. Wykonać mnożenie czynników w kodzie NKB za
pomocą algorytmu prze-znaczonego dla układów cyfrowych. Pomnożyć
4-bitowe liczby binarne A = 0111 = +7i B = 0101 = +5. Przyjąć wynik
8-bitowy. Iloczyn A * B = +35. Bity mnożnika
zostaływytłuszczone.
mnożna (+7) 0111mnożnik (+5)
0101-----------------------------------zapisanie argumentów 0000
0101
Krok 1. Dodanie mnożnej do starszej części 8-bitowego słowa i
przesunięcie wyniku w prawo o jeden bit.
0000 0101+0111-----------0111 0101
Przesunięcie wyniku: 0011 1010
Krok 2. Dodanie zera do starszej części 8-bitowego słowa i
przesunięcie wyniku w prawo o jeden bit.
0011 1010+0000-----------0011 1010
Przesunięcie wyniku: 0001 1101
-
Krok 3. Dodanie mnożnej do starszej części 8-bitowego słowa i
przesunięcie wyniku w prawo o jeden bit.
0001 1101+0111-----------1000 1101
Przesunięcie wyniku: 0100 0110
Krok 4. Dodanie zera do starszej części 8-bitowego słowa i
przesunięcie wyniku w prawo o jeden bit.
0100 0110+0000-----------0100 0110
Przesunięcie wyniku: 0010 0011 = (+35)
Drukiem wytłuszczonym zaznaczono kolejne bity mnożnika. Są one
zastępowane bitami wy-ników cząstkowych, aż po czwartym kroku
8-bitowe słowo zawiera wynik. W przykładziejest to słowo
reprezentujące wartość +35.
Algorytm mnożenia liczb w kodzie NKB
Schemat blokowy algorytmu mnożenia
START
RH = 0RL = mnożnikM = mnożnaN = licznik
R0 = 1
RH = RH + 0 RH = RH + M
PrzesunięcieR w prawo
N = N - 1
N = 0 STOP
N T
N T
-
Opis słowny algorytmu mnożenia
1. Na podstawie sumy liczby bitów mnożnej (A) i mnożnika (B)
ustalić długość słowawyniku R.
2. Na mniej znaczącej części słowa wyniku wpisać mnożnik, tj. RL
= B.3. Jeśli wartość najmniej znaczącego bitu wyniku wynosi 0, to
do bardziej znaczącej części
słowa wyniku dodać zero, tj. RH = RH + 0, w przeciwnym przypadku
do bardziej znaczą-cej części słowa wyniku dodać mnożną, tj. RH =
RH + A.
4. Przesunąć wynik cząstkowy o jedną pozycję w prawo (na
najstarszą pozycję wchodzi 0lub przeniesienie, jeśli powstało).
5. Jeśli wykonano liczbę kroków równą liczbie bitów mnożnika, to
należy algorytm zakoń-czyć, w przeciwnym wypadku należy przejść do
wykonania kroku 3.
W systemach cyfrowych czynniki oraz wyniki cząstkowe są
przechowywane w rejestrach(np. w rejestrach procesora).
Przedstawiony algorytm można zrealizować w układzie składa-jącym
się z dwóch rejestrów M i R oraz układu sumatora ALU (ang.
arithmetic-logical unit).Na rysunku poniżej pokazano schemat
układu.
Rejestr R jest tzw. rejestrem przesuwającym, który umożliwia
składowanie wynikówcząstkowych oraz ich przesuwanie w prawo. Jest
to rejestr o podwójnej długości słowa zawie-rającego czynnik.
Składa się on z rejestru RH, zawierającego bardziej znaczącą
połówkę reje-stru R, oraz rejestru RL, zawierającego mniej znaczącą
połówkę tego rejestru. Mnożna jestzapisywana do rejestru M.
Układ sterowania jest odpowiedzialny za określenie liczby kroków
algorytmu orazkontrolę wartości najmniej znaczącego bitu rejestru
RL. W każdym kroku dodawania wyni-ków cząstkowych może pojawić się
nadmiar. Jest on sygnalizowany za pomocą znacznikaOV, którego stan
jest analizowany przez układ sterowania. Jeśli w czasie mnożenia
powstanienadmiar, to system sterowania powinien podjąć odpowiednie
kroki. Mogą one polegać napowiadomieniu operatora lub zwiększeniu
długości słowa argumentów.
Przedstawiony algorytm mnożenia liczb w kodzie NKB, po dokonaniu
pewnychmodyfikacji, może być również wykorzystywany do mnożenia
liczb w kodzie ZM, U1 i U2.
Sterowanie
RL
RH
M
ALU
OV
-
W przypadku mnożenia liczb ujemnych można określić znak wyniku,
a następnie pomnożyćliczby dodatnie albo można stosować algorytmy
specyficzne dla danych kodów.
Przykład. 3.26. Wykonać mnożenie czynników w kodzie NKB za
pomocą algorytmu prze-znaczonego dla układów cyfrowych. Pomnożyć
4-bitowe liczby binarne A = 0111 = +7i B = 0110 = +6. Przyjąć wynik
8-bitowy. Iloczyn A * B = +42.
mnożna (+7) 0111mnożnik (+6)
0110-----------------------------------zapisanie argumentów 0000
0110
Krok 1. Dodanie zera do starszej części 8-bitowego słowa i
przesunięcie wyniku w prawo o jeden bit.
0000 0110+0000----------0000 0110
Przesunięcie wyniku: 0000 0011
Krok 2. Dodanie mnożnej do starszej części 8-bitowego słowa i
przesunięcie wyniku w prawo o jeden bit.
0000 0011+0111----------0111 0011
Przesunięcie wyniku: 0011 1001
Krok 3. Dodanie mnożnej do starszej części 8-bitowego słowa i
przesunięcie wyniku w prawo o jeden bit.
0011 1001+0111----------1010 1001
Przesunięcie wyniku: 0101 0100
Krok 4. Dodanie zera do starszej części 8-bitowego słowa i
przesunięcie wyniku w prawo o jeden bit.
0101 0100+0000----------0101 0100
Przesunięcie wyniku: 0010 1010 (+42).
-
W przypadku, gdy dodawanie wyników cząstkowych daje
przeniesienie należy zwięk-szyć długość słowa argumentów lub
wprowadzić wartość przeniesienia na najstarszy bit.
3.3.4. Dzielenie liczb stałopozycyjnych
W systemie dwójkowym dzielenie liczby A przez B można sprowadzić
do odejmowa-nia dzielnika B od dzielnej A. Operacja dzielenia
pisemnego składa się z kilku kroków odej-mowania. W wyniku
dzielenia liczb dwójkowych w kodzie NKB otrzymuje się część
całko-witą i resztę, którą można rozwinąć w ułamek z określoną
dokładnością.
Przykład. 3.27. Podzielić pisemnie w kodzie NKB liczbę binarną A
= 01000010 = 66i B = 1100 = 12.
101 (+5)---------01000010 : 1100- 1100-------------
010010- 1100
-------------00110 (+6) reszta
Wynik działania A : B = 66 : 12 = 5 reszta 6, gdyż 66 = 5∗ 12 +
6.
W układach cyfrowych dzielenie jest działaniem bardziej
skomplikowanym niżmnożenie. Wynika to z faktu, że wynik może być
ułamkiem, który musi być zapisany naskończonej liczbie bitów.
Oznacza to, że może on być zapamiętany tylko z pewną dokładno-ścią.
W praktyce większość algorytmów dzielenia daje w wyniku część
całkowitąz dzielenia (iloraz) i resztę.
W algorytmie dzielenia liczb w kodzie NKB przyjmuje się, że
dzielna A jest wpisywa-na do rejestru o podwójnej długości słowa,
natomiast dzielnik B, wynik dzielenia i reszta sąwpisywane do
rejestrów o pojedynczej długości słowa. Algorytm zostanie
przedstawiony naprzykładzie dzielenia liczby 8-bitowej A = +42
przez liczbę 4-bitową B = +6. Na początkudzielna jest wpisywana do
rejestru R o podwójnej długości słowa, a dzielnik do rejestru M
opojedynczej długości. Każdy krok algorytmu składa się z
przesunięcia w lewo zawartościrejestru R oraz odjęcia od bardziej
znaczącej części tego rejestru (RH) wartości dzielnika.Jeśli wynik
odejmowania jest dodatni (brak bitu znaku w RH), to na najmniej
znaczącą pozy-cję rejestru R wpisuje się jedynkę, a w rejestrze R
pozostaje otrzymana różnica. Jeśli nato-miast wynik odejmowania
jest ujemny, to na najmniej znaczącą pozycję rejestru R wpisuje
sięzero, a bardziej znaczącą część tego rejestru przywraca się do
postaci sprzed odejmowania.Liczba kroków algorytmu jest równa
liczbie bitów słowa. Po wykonaniu ostatniego kroku wmniej znaczącej
części rejestru R jest część całkowita z dzielenia (iloraz), a w
bardziej zna-czącej części jest reszta.
-
Przykład. 3.28. Wykonać dzielenie w kodzie NKB za pomocą
algorytmu przeznaczonego dlaukładów cyfrowych. Podzielić liczbę
8-bitową A = 0010 1010 = +42 przez liczbę 4-bitowąB = 0110 = +6.
Wynik obliczeń A : B = 42 : 6 = 7 reszta 0. Bity wyniku (ilorazu)
zostaływytłuszczone.
dzielna (+42) 0010 1010dzielnik (+6)
0110---------------------------------------
Krok 1. Przesunięcie 8-bitowej dzielnej w lewo i odjęcie od jej
starszej części 4-bitowego dzielnika.
Przesunięcie: 0101 010_Odejmowanie: -0110
-----------1111 wynik ujemny
Przywrócenie: 0101 0100 dopisanie 0
Krok 2. Przesunięcie dzielnej w lewo i odjęcie od jej starszej
części dzielnika.
Przesunięcie: 1010 100_Odejmowanie: -0110
-----------0100 wynik dodatni
Dzielna: 0100 1001 dopisanie 1
Krok 3. Przesunięcie dzielnej w lewo i odjęcie od jej starszej
części dzielnika.
Przesunięcie: 1001 001_Odejmowanie: -0110
-----------0011 wynik dodatni
Dzielna: 0011 0011 dopisanie 1
Krok 4. Przesunięcie dzielnej w lewo i odjęcie od jej starszej
części dzielnika.
Przesunięcie: 0110 011_Odejmowanie: -0110
-----------0000 wynik dodatni
Dzielna: 0000 0111 dopisanie 1
Drukiem wytłuszczonym zaznaczono kolejne bity wyniku. W starszej
części rejestru zawie-rającego dzielną jest słowo reprezentujące
resztę (wartość +0), a w młodszej części wartośćreprezentująca
wynik (wartość +7).
-
Algorytm dzielenia liczb w kodzie NKB
Schemat blokowy algorytmu dzielenia
Opis słowny algorytmu dzielenia
1. Wpisać dzielną (A) do rejestru R o podwójnej długości słowa
oraz dzielnik (B) do rejestruM o pojedynczej długości słowa. Wpisać
do licznika kroków długość słowa.
2. Przesunąć zawartość rejestru R o jedną pozycję w lewo. W
rejestrze R wartość najmniejznaczącego bitu R0 pozostawić
nieokreśloną.
3. Obliczyć różnicę RH = RH - M.4. Jeśli wartość rejestru RH
jest ujemna (najstarszy bit równy 1), to podstawić R0 = 0 i
przy-
wrócić wartość RH sprzed odejmowania, tj. RH = RH + M.5. Jeśli
wartość rejestru RH jest dodatnia (najstarszy bit równy 0), to
podstawić R0 = 1
i pozostawić zawartość rejestru R bez zmian.6. Jeśli wykonano
zadaną liczbę kroków, to zakończyć algorytm, w przeciwnym
wypadku
należy przejść do wykonania kroku 2.
START
R = (RH, RL) = dzielnaM = dzielnikN = licznik
Czy RHujemne?
R0 = 0RH = RH + M
PrzesunięcieR w lewo
N = N - 1
N = 0 STOP
N T
N T
RH = RH - M
R0 = 1
-
Przykład. 3.29. Wykonać dzielenie w kodzie NKB za pomocą
algorytmu przeznaczonego dlaukładów cyfrowych. Podzielić liczbę
10-bitową A = 00010 00010 = +70 przez liczbę 5-bitowąB = 01100 =
+12. Wynik obliczeń A : B = 70 : 12 = 5 reszta 10. Bity wyniku
(ilorazu) zostaływytłuszczone.
dzielna (+70) 00010 00110dzielnik (+12)
01100-----------------------------------------
Krok 1. Przesunięcie 10-bitowej dzielnej w lewo i odjęcie od jej
starszej części 5-bitowego dzielnika.
Przesunięcie: 00100 0110_Odejmowanie: -01100
-----------11000 wynik ujemny
Przywrócenie: 00100 01100 dopisanie 0
Krok 2. Przesunięcie dzielnej w lewo i odjęcie od jej starszej
części dzielnika.
Przesunięcie: 01000 1100_Odejmowanie: -01100
-----------11100 wynik ujemny
Przywrócenie: 01000 11000 dopisanie 0
Krok 3. Przesunięcie dzielnej w lewo i odjęcie od jej starszej
części dzielnika.
Przesunięcie: 10001 1000_Odejmowanie: -01100
-----------00101 wynik dodatni
Dzielna: 00101 10001 dopisanie 1
Krok 4. Przesunięcie dzielnej w lewo i odjęcie od jej starszej
części dzielnika.
Przesunięcie: 01011 0001_Odejmowanie: -01100
-----------11111 wynik ujemny
Przywrócenie: 01011 00010 dopisanie 0
-
Krok 5. Przesunięcie dzielnej w lewo i odjęcie od jej starszej
części dzielnika.
Przesunięcie: 10110 0010_Odejmowanie: -01100
-----------01010 wynik dodatni
Dzielna: 01010 00101 dopisanie 1
W starszej części rejestru zawierającego dzielną jest słowo
reprezentujące resztę (wartość+10), a w młodszej części wartość
reprezentująca wynik (wartość +5). Wynik jest poprawny.
Przedstawiony algorytm dzielenia liczb w kodzie NKB, po
dokonaniu pewnychmodyfikacji, może być również wykorzystywany do
dzielenia liczb w kodzie ZM, U1 i U2.W przypadku dzielenia liczb
ujemnych można określić znak wyniku, a następnie podzielićliczby
dodatnie albo można stosować algorytmy specyficzne dla danych
kodów.