Purand

Liczenie na komputerze z drewna



Czy w dobie układów scalonych jest możliwe wykonanie z drewna komputera, który będzie wykonywał obliczenia na tej samej zasadzie co komputery współczesne?

Odpowiedź na to intrygujące pytanie można było znaleźć parę lat temu w miesięczniku matematyczno - fizyczno - astronomicznym "Delta". Był tam narysowany projekt komputera bardzo podobny do przedstawionego na rysunku.

Akumulator tego komputera-liczydła jest zaznaczony dwiema przerywanymi liniami. Składa się z zestawu obrotowych przerzutników (rysunek obok). Mogą one przyjmować dwa ustawienia wskazujące albo jedynkę, albo zero. Podczas działań arytmetycznych dodawania i odejmowania, zawsze jeden ze składników jest ustawiony w akumulatorze. Drugi jest symulowany przez kulki wpychane do odpowiednich przegródek. Każdy przerzutnik po uderzeniu przez kulkę zmienia swoje położenie przez obrót o 90° w lewo, albo w prawo. Wynik działań także jest odczytywany na podstawie ustawienia przerzutników w akumulatorze.

Drewniany komputer-liczydło wykonuje tylko proste działania arytmetyczne dodawanie i odejmowanie na liczbach całkowitych. Nie ma ani wewnętrznej pamięci ani dodatkowych rejestrów, ale może pokazywać jak te działania są wykonywane zgodnie z zasadami najprostszej algebry Boole'a wykorzystywanej w technice cyfrowej.

Pierwsza od góry przegródka ma najmniejsze znaczenie w przedstawianej liczbie i jest to reprezentacja bitu najmniej znaczącego, tzw. LSB (ang. least significant bit). Jeśli kulka znajdzie się w ostatniej dolnej przegródce, to oznacza przepełnienie C (ang. carry) zakresu dwójkowego liczb co jest sygnalizowane uderzeniem kulki w dzwonek umieszczony na wylocie z tej przegródki.

Do tej ostatniej przegródki nie można wprowadzić kulki z zewnątrz. Może się tam pojawić tylko w wyniku przekroczenia zakresu.

Przedstawione na rysunku ustawienie akumulatora obrazuje liczbę dwójkową 1001 do której ma być dodana liczba dwójkowa 0011. Po wepchnięciu kulki do najwyższej przegródki przestawi ona przerzutnik w położenie "zero", kulka spadnie do przegródki położonej niżej i tam także przestawi przerzutnik, ale tym razem w położenie "jeden". Następnie wypadnie z przegródki.

Druga kulka, na swoim poziomie, ustawi przerzutnik ponownie w położenie "zero", spadając niżej przestawi przerzutnik w położenie "jeden". W ten sposób w akumulatorze znajdzie się ustawienie dwójkowe (czytane od dołu) 1100, co jest wynikiem dodawania:

1001 + 0011 = 1100 (zapis dwójkowy)
   9 + 3    = 12   (zapis dziesiętny)

Jeśli pojawi się przeniesienie, to jest to sygnał przekroczenia zakresu przez wynik. W tym przypadku zakres górny wynosi 1111 (15 - dziesiętnie). Tak wykonywane są operacje arytmetyczne na liczbach dwójkowych traktowanych jako liczby całkowite bez znaku NBC (ang. natural binary code).

Zakres działań można łatwo rozszerzyć dodając kolejne przegródki.

A co z odejmowaniem?
Komputer odejmuje liczby dodając odjemnik zapisany jako liczba całkowita ze znakiem w kodzie uzupełnień do dwóch - U2 (ang. two's complement). Najbardziej znaczący bit liczby MSB (ang. more significant bit) określa znak liczby. Jeśli liczba jest dodatnia, zapis w kodzie U2 nie różni się od zapisu w zwykłym kodzie dwójkowym liczb całkowitych bez znaku NBC.
W czterobitowym akumulatorze można pomieścić liczbę zapisaną w kodzie U2 z zakresu od -8 do +7. Kod U2 zapisu liczb jest powszechnie stosowany w technice komputerowej, gdyż:

  1. Dodawanie i odejmowanie liczb jest wykonywane tak samo jak dodawanie liczb w zwykłym zapisie dwójkowym.
  2. Zmiana znaku liczby odbywa się przez zanegowanie jej wszystkich bitów i dodanie jedynki (np. 0111 → +7, 1000 + 1 = 1001 → -7).
  3. Liczby dodatnie mają identyczną postać jak w zwykłym zapisie dwójkowym.

Przy odejmowaniu liczb, gdy odjemna jest większa lub równa odjemnikowi, to przeniesienie zawsze równa się jeden. Natomiast, gdy odjemna jest mniejsza od odjemnika, to przeniesienie zawsze jest równe zeru. Tak więc sygnał przeniesienia C może być wykorzystywany przy porównywaniu dwóch liczb zapisanych w zwykłym kodzie dwójkowym.

W przypadku działań dodawania i odejmowania liczb w zapisie U2, wszystko przebiega jak zwykłe dodawanie liczb dwójkowych, z tym, że zmienia się tylko warunek przekroczenia zakresu. Przekroczenie zakresu przez liczby w zapisie U2 nazywa się nadmiarem V (ang. overflow), który jest sumą modulo 2 wartości przeniesienia C i wartości MSB.

        V = ¬C·MSB v C·¬MSB
        gdzie:
        ¬C   - zanegowana wartość przeniesienia;
        ¬MSB - zanegowana wartość najbardziej znaczącego bitu;
        v    - operator logiczny "lub" (ang. or);
        V    - nadmiar.

Przykład (patrz rysunek komputera):
        1001    (-7)
        0011    (+3)
        ----
        1100    (-4 w U2, w zwykłym kodzie 12>7 - przekroczenie zakresu V=1, bo C=0, MSB=1)

Jest jeszcze jeden popularny sposób kodowania liczb całkowitych bez znaku. Nazywany jest zapisem dwójkowo-dziesiętnym - BCD (ang. binary-coded decimal notation). Polega on na zapisywaniu cyfr dziesiętnych w zwykłym kodzie dwójkowym (np. 987 → 1001 1000 0111). Ten sposób kodowania jest szczególnie przydatny do liczenia pieniędzy.

Przedstawiony model komputera-liczydła w całości wykonanego z drewna, bardzo prosto pokazuje jak liczy komputer!