Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: prof. Raúl Rojas

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

Przegląd architektury maszyn Z1 i Z3

SPIS TREŚCI
Podrozdziały

Rozdział ten podsumowuje najważniejsze cechy architektury maszyny Z3. Przechodzimy kolejno od rzeczy prostych do złożonych: najpierw zajmiemy się przeglądem architektury, a w dalszych rozdziałach szczegółami. Aby uniknąć dziwnych skojarzeń, będziemy odwoływali się do Z3 w czasie teraźniejszym.

Struktura blokowa

Z3 jest maszyną zmiennoprzecinkową. Podczas gdy inne wczesne automaty, takie jak Mark I, ABC  i ENIAC, pracowały z liczbami stałoprzecinkowymi, Zuse zdecydował bardzo wcześnie zastosować coś, co nazywał zapisem "semilogarytmicznym", który odpowiada nowoczesnemu zapisowi zmiennoprzecinkowemu.

obrazek
Rys.1. Bloki składowe Z3

Rys.1 obrazuje główne elementy składowe Z3. Pierwszą znaczącą cechą jest oddzielenie procesora od pamięci. Z3 składa się z modułu pamięci binarnej (zdolnego przechować 64 liczby zmiennoprzecinkowe), binarnego procesora zmiennoprzecinkowego, modułu sterującego oraz urządzeń wejścia/wyjścia. Pamięć i moduł arytmetyczny są połączone poprzez magistralę danych, która transmituje wykładnik i mantysę liczby zmiennoprzecinkowej. Moduł sterujący zawiera mikrosekwensery potrzebne dla każdej instrukcji. Linie sterujące, biegnące od modułu sterującego do procesora, pamięci i urządzeń wejścia/wyjścia, wymuszają prawidłową synchronizację wszystkich modułów. Czytnik taśmy perforowanej dostarcza kodu każdej instrukcji jak również adresu do dostępu do pamięci. Urządzenia wejścia/wyjścia są połączone poprzez magistralę danych z modułem liczącym (JAL - Jednostka Arytmetyczno Logiczna).

Na początek:  podrozdziału   strony 

Zapis zmiennoprzecinkowy

Rysunek 2 pokazuje zapis stosowany w pamięci Z3. Pierwszy bit służy do przechowywania znaku liczby, następne 7 bitów przeznaczonych jest na wykładnik, a ostatnie 14 bitów na mantysę (tylko 14 miejsc na prawo od przecinka). Bity wykładnika noszą nazwę części "A" liczby i oznacza się je jako:

a6, ... , a0

Bity mantysy są zwane częścią "B" liczby i oznacza się je jako:

b0, b-1, ... , b-14

Wykładnik zakodowany jest jako liczba w kodzie uzupełnieniowym do dwóch U2. Dlatego zakres możliwych wartości przebiega od -64 do 63. Mantysa przechowywana jest w postaci znormalizowanej3, co oznacza, iż pierwszą liczbą przed przecinkiem (b0) zawsze musi być 1. Cyfry tej nie musimy przechowywać w pamięci (dlatego też nie pojawia się ona na Rys.2), więc efektywny zakres liczb w module pamięci jest równoważny mantysie 15-bitowej. Jednakże występuje problem z liczbą zero, której nie można wyrazić przy użyciu znormalizowanej mantysy. Z3 stosuje konwencję, iż dowolna mantysa z wykładnikiem równym -64 ma być uważana za równą zero. Dowolna liczba z wykładnikiem równym 63 uważana jest za nieskończoność. Operacje zawierające zero i nieskończoność są traktowane jako wyjątki i specjalne układy sprzętowe sprawdzają liczby załadowane do procesora w celu ustawienia znaczników wyjątku.

obrazek
Rys.2. Zapis liczby zmiennoprzecinkowej w pamięci Z3.

Według tej konwencji najmniejszą liczbą zapisywalną w pamięci Z3 jest:

2-63 = 1,08 x 10-19

a największą jest liczba:

262 = 4,61 x 1018

Dane dla obliczeń mogą być wprowadzane jako liczby dziesiętne poprzez klawiaturę Z3 (cztery cyfry). Wykładnik dziesiętnego zapisu wprowadzany jest poprzez naciśnięcie jednego z klawiszy umieszczonych w rzędzie i podpisanych jako:

-8, -7, ..., 7, 8

Prawdziwy Z3 mógł akceptować tylko liczby z zakresu:

od 1 x 10-8 do 9999 x 108

Rekonstrukcja komputera Z3 wykonana przez Konrada Zuse dla Niemieckiego Muzeum w Monachium udostępnia wystarczająco dużo przycisków na większe wykładniki. Przy takich założeniach cała numeryczna pojemność maszyny może być odzwierciedlona przez akceptowalne dane wejściowe To samo można powiedzieć o wyjściu danych. Jednakże Z3 nie drukuje wyników liczbowych wyprodukowanych przez program. Wyświetlana jest tylko jedna liczba za pomocą rzędu lampek oznaczających cyfry od 0 do 9. Największą liczbą możliwą do wyświetlenia jest 19999. Najmniejsza to 00001. Największy, możliwy do wyświetlenia wykładnik to +8, a najmniejszy to -8.

Na początek:  podrozdziału   strony 

Zestaw instrukcji

Program dla Z3 zapisany jest na taśmie perforowanej. Jedną instrukcję koduje się za pomocą 8 bitów tworzących jeden rządek otworków na taśmie. Z3 posiada 9 instrukcji przedstawionych w Tabeli1. Dzielą się one na trzy typy: wejścia/wyjścia, dostępu do pamięci oraz operacji arytmetycznych. Kod operacji posiada zmienną długość 2 lub 5 bitów. Operacje na pamięci kodują adres słowa w dolnych sześciu bitach, tj. przestrzeń adresowa ma maksymalny rozmiar 64 słów, o czym wspominaliśmy już wcześniej.

Rodzaj Instrukcja Opis Kod operacji
we/wy Lu odczyt klawiatury 01 110000
Ld wyświetlenie wyniku 01 111000
pamięć Pr z odczyt z adresu z 11 z6 z5 z4 z3 z2 z1
Ps z zapis pod adres z 10 z6 z5 z4 z3 z2 z1
arytmetyka Lm mnożenie 01 001000
Li dzielenie 01 010000
Lw pierwiastek kwadratowy 01 011000
Ls1 dodawanie 01 100000
Ls2 odejmowanie 01 101000

Tab.1. Zestaw instrukcji i kody operacji w Z3

Instrukcje na taśmie perforowanej mogą występować w dowolnej kolejności. Instrukcje Lu i Ld (odczyt z klawiatury i wyświetlenie wyniku) wstrzymują pracę maszyny, aby operator miał dość czasu na wprowadzenie liczby lub zapisanie wyniku. Następnie maszyna jest uruchamiana ponownie i kontynuuje przetwarzanie programu.

Najbardziej rzucającym się w oczy mankamentem w zestawie instrukcji Z3 jest brak rozgałęzień warunkowych. Pętle można zaimplementować w prosty sposób przez doraźne sklejenie ze sobą dwóch końców taśmy perforowanej, lecz nie ma sposobu implementacji warunkowych ciągów instrukcji. Z tego powodu Z3 nie jest komputerem uniwersalnym w sensie Turinga.

Na początek:  podrozdziału   strony 

Liczba cykli

Z3 jest maszyną sterowaną przy pomocy zegara. Każdy cykl podzielony został na pięć taktów ponumerowanych kolejno I, II, III, IV i V. W takcie I zostaje zdekodowana instrukcja odczytana z taśmy perforowanej. Dwoma podstawowymi operacjami maszyny są dodawanie i odejmowanie wykładników i mantys. Operacje te mogą zostać wykonane w pierwszych trzech taktach każdego cyklu. Takty IV i V są używane do przygotowania argumentów dla następnej operacji lub do zapisu wyników.

Instrukcje zaimplementowane w Z3 wymagają następującej liczby cykli:

Mnożenie 16 cykli
Dzielenie 18 cykli
Pierwiastek kwadratowy 20 cykli
Dodawanie 3 cykle
Odejmowanie 4 lub 5 cykli w zależności od wyniku
Odczyt klawiatury 9 do 41 cykli w zależności od wykładnika
Wyświetlenie wyniku 9 do 41 cykli w zależności od wykładnika
Odczyt z pamięci 1 cykl
Zapis do pamięci 0 cykli lub 1 cykl

Zgodnie z twierdzeniem Konrada Zuse czas wymagany na mnożenie wynosi 3 sekundy. Zakładając, iż operacja mnożenia wymaga 16 cykli, możemy oszacować częstotliwość roboczą Z3 na 16/3 = 5.33 Hz4.

Liczba cykli potrzebnych dla instrukcji wprowadzania i wyświetlania jest zmienna, ponieważ zależy od wartości wykładnika argumentów. Skoro dane wejściowe muszą być przeliczone z systemu dziesiętnego na system binarny, liczba wymaganych mnożeń przez współczynnik 10 lub 0,1 zależy od wartości dziesiętnego wykładnika.

Dodawanie i odejmowanie wymagają więcej niż jednego cyklu, ponieważ w przypadku liczb zmiennoprzecinkowych należy się zatroszczyć o to, aby wykładniki obu argumentów były równe. Wymaga to nieco dodatkowych porównań i przesunięć.

Liczba może być zapisana w pamięci w zerowej ilości cykli, jeśli wynik ostatniej operacji arytmetycznej można bezpośrednio umieścić w pamięci pod żądanym adresem. W takim przypadku cykl konieczny dla instrukcji zapisu nakłada się na ostatni cykl operacji arytmetycznej.

Na początek:  podrozdziału   strony 

Model programowy

Opis modelu programowego Z3 jest bardzo ważny, ponieważ stanowi widoczną dla programisty część maszyny. Z punktu widzenia oprogramowania Z3 składa się z 64 słów pamięci, które można załadować do dwóch rejestrów zmiennoprzecinkowych, zwanych po prostu R1 oraz R2. Te dwa rejestry zawierają dwa argumenty operacji arytmetycznych, które ich potrzebują. Programista może napisać dowolny ciąg instrukcji, ale musi pamiętać o stanie rejestrów maszyny.

Ważne do zapamiętania jest szczególnie to, iż pierwsza operacja ładowania w programie (Pr z) przenosi zawartość komórki pamięci o adresie z do R1. Dowolna następna operacja ładowania przenosi słowo z pamięci do R2.

Instrukcja odczytu z klawiatury ładuje daną wejściową do rejestru R1 i niszczy zawartość rejestru R2.

Operacje arytmetyczne nie określają argumentów w swoim kodzie operacji. Ich implikowana składnia jest następująca:

Mnożenie R1 := R1 x R2
Dzielenie R1 := R1 / R2
Dodawanie R1 := R1 + R2
Odejmowanie R1 := R1 - R2
Pierwiastek kwadratowy R1 := sqrt(R1)

Rejestr R2 jest zerowany po instrukcji arytmetycznej, podczas gdy wynik trafia do R1. Następna operacja ładowania będzie się odnosić do R2. Instrukcje zapisu do pamięci i wyświetlania zawsze odnoszą się do rejestru R1, który zawiera również wynik poprzedniej operacji arytmetycznej. Po instrukcji zapisu lub wyświetlania R1 jest zerowany.

Aby wyjaśnić model programowy Z3, podamy przykład, który jest lepszy od wielu dodatkowych uwag. Załóżmy, iż chcemy obliczyć wielomian przy pomocy schematu Hornera:

x(a2+x(a3+xa4)))+a1.

Załóżmy dalej, iż umieściliśmy już stałe a4, a3, a2 i a1 w komórkach modułu pamięci o adresach 4, 3, 2 i 1. Wartość x jest umieszczona pod adresem 5. Program wykonujący pożądane obliczenia wygląda następująco:

Pr 4   ładujemy a4 do R1
Pr 5   ładujemy x do R2
Lm   mnożymy R1 i R2, wynik w R1
Pr 3   ładujemy a3 do R2
Ls1   dodajemy R1 i R2, wynik w R1
Pr 5   ładujemy x do R2
Lm   mnożymy R1 i R2, wynik w R1
Pr 2   ładujemy a2 do R2
Ls1   dodajemy R1 i R2, wynik w R1
Pr 5   ładujemy x do R2
Lm   mnożymy R1 i R2, wynik w R1
Pr 1   ładujemy a1 do R2
Ls1   dodajemy R1 i R2, wynik w R1
Ld   wyświetlamy wynik

Po wykonaniu ostatniej instrukcji procesor jest zerowany do swojego stanu początkowego. Może teraz być uruchomiona nowa sekwencja programowa.

Na początek:  podrozdziału   strony 

Architektura Pierwszych Maszyn Liczących Konrada Zuse  została umieszczona w serwisie edukacyjnym nauczycieli I-LO w Tarnowie za pisemną zgodą autora:
prof. dr Raula Rojasa
Z języka angielskiego tłumaczenie wykonał:
mgr Jerzy Wałaszek

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2023 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.