History of Computer Systems Winter 2016/2017 05.12.2016 Übungszettel 6 “EDSAC und Exzess-3 Code” Vorrechenpunkte gibt es für die Lösung von • Aufgaben 1.1 und 1.2 • Aufgabe 1.3 • Aufgabe 2.1 und 2.2 • Aufgabe 2.3 1 EDSAC Sie dürfen nochmal die Programmierung des EDSAC üben. Der Computerhistoriker Martin Campbell-Kelly hat zusammen mit seinen Studenten einen EDSACSimulator veröffentlicht: http://www.dcs.warwick.ac.uk/∼edsac/ Auf der Website finden Sie sowohl die Simulation zum runterladen, als auch ein Tutorial, das die Programmierung der EDSAC erklärt. Eine kompakte Übersicht mit Befehlen und Zeichen-Codes finden Sie unter https://people.cs.clemson.edu/∼mark/edsac.html Jedes Programm muss mit T n K beginnen, wobei n die Startadresse des Programms ist. Die “Initial Orders 2” lesen diese Information als erstes und passen alle relativen Adressen entsprechend an. Der Befehl GK muss am Anfang jeder Subroutine stehen, um den Θ-Parameter auf die aktuelle Ladeadresse zu setzen. Relative Adressen können mit dem Θ-Zeichen angegeben werden (in der Simulation durch ein “@”-Zeichen). Es bietet sich an, das Programm ab Adresse 64 starten zu lassen, da es somit am Anfang (unten rechts) des “Long Tank 2” steht. Um das Debugging zu vereinfachen können Sie am Anfang und am Ende eines Programmes den Befehl ZF angeben, um die Maschine anzuhalten. Mit dem “Reset”-Button lassen Sie die Simulation weiter laufen, mit “Single E.P.” können Sie die Befehle Schritt für Schritt ausführen. 1.1 Countdown Schreiben Sie ein Programm, dass die Zahl 16 in den Akkumulator lädt und anschließend schrittweise um 1 dekrementiert, bis die Null überschritten wird. Die Konstante 1 kann man durch PD angeben. Warum? 1.2 Ausgabe Erweitern Sie ihr Programm, sodass es die Zahlen nach jeder Subtraktion ausgibt. Nutzen Sie dafür die Subroutine P6. Diese ist vor dem eigentlichen Programm einzufügen. Die Subroutine erwartet die Seite 1 von 2 auszugebende Zahl an Adresse 0F. Als Hilfe können Sie die Beschreibungen zum “Cubes”-Programm in dem Tutorial (Seite 22 ff.) benutzen. 1.3 Fibonacci Zahlen Schreiben Sie ein Programm, dass die Reihe der Fibonacci-Zahlen berechnet und ausgibt. 2 Arithmetik des UNIVAC In der Vorlesung wurde die Exzess-3 BCD Codierung vorgestellt. BCD codiert jede dezimale Ziffer binär in einer Tetrade (also 4 Bits). Beim Exzess-3 Code findet zusätzlich eine Verschiebung um 3 Tetraden statt. In dieser Übung soll die Zahlendarstellung mit diesem Code und das Rechnen damit geübt werden. 2.1 Zahlendarstellung XS-3- BCD Geben Sie folgende Zahlen im Exzess-3-BCD-Format an: a) 724 = c) 407 = b) 23 = d) 5891 = 2.2 Addition Die Addition und Subtraktion erfolgt bei BCD von Rechts nach Links für jede Tetrade. Beim Rechnen mit Exzess-3 codierten Zahlen, muss nach der binären Addition noch eine Korrektur vorgenommen werden. Wenn zwei Zahlen addiert werden, sodass es zu keinem Übertrag kommt, muss das Ergebnis anschließend durch Addition von 1101 (Zweierkomplement von −3) korrigiert werden. Kommt es zu einem Übertrag in die nächste Tetrade (entspricht einem Zehner-Übertrag), muss anschließend 0011 addiert werden. Berechnen Sie folgende Additionen im Exzess-3-Code: a) 4 + 5 = c) 83 + 729 = b) 12 + 35 = d) 5891 + 407 = 2.3 subtraktion Die Subtraktion erfolgt durch Addition des binären 2-er Komplements. Findet dabei ein Übertrag auf die fünfte Stelle statt, so wird dieser vernachlässigt und zur Korrektur 0011 addiert. Wenn das Ergebnis negativ ist, wird der Korrekturwert 1101 addiert. Das Zweierkomplement der Tetraden ist der vorzeichenlose Dezimalwert im Exzess-3 Code. Berechnen Sie folgende Subtraktionen im Exzess-3 Code: a) 9 − 5 = c) 35 − 23 = b) 5 − 9 = d) 23 − 35 = Seite 2 von 2