26
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ów cyfrowych. Podzielić liczbę 8-bitową A = 0011 1000 = +56 przez liczbę 4-bitową B = 0110 = +6.

Wprowadzenie do inżynierii przetwarzania informacji. wiczenie 3.robert.wojcik.staff.iiar.pwr.wroc.pl/.../cop/ipi/ipi_cw3.pdf · 2002. 6. 15. · Wprowadzenie do inżynierii przetwarzania

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • 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.