Aufgabenblatt 6
Die Bewertungsgrundlage ist auch hier anders. Bitte beachten Sie dies.
Abgabetermin ist der 26.06.2018
Aufgabe 0
Als Puzzleeingabe finden Sie Assemblercode vor. Dieser spezielle Assmbler arbeitet auf Registern, welche beliebig große (oder kleine) ganze Zahlen beinhalten kann.
Sie dürfen davon ausgehen, dass jedes Register zum Start des Programms mit dem Wert Null vorinitialisiert ist. Es
existieren vier Register a
, b
, c
und d
.
Die Assemblersprache besteht aus den folgenden Befehlen:
sto <x> <y>
speichert den Wert von<x>
(<x>
kann entweder ein Register (a bis d) sein oder eine Ganzzahl)) im Register<y>
.inc <x>
erhöht den Wert vom Register<x>
um eins.dec <x>
verringert den Wert vom Register<x>
um eins.jnn <x> <y>
springt im Assemblercode um<y>
Befehle nach vorne (oder nach hinten, wenn<y>
negativ ist), aber nur, wenn der Wert von<x>
(<x>
kann entweder ein Register (a bis d) sein oder eine Ganzzahl)) nicht Null ist.
Das Programm ist zuende, sobald Sie in eine Zeile springen, in der kein Code mehr steht.
Welchen Wert hat das Register a
nach Ablauf Ihrer Puzzleeingabe?
Beispiel
sto 41 a
inc a
inc a
dec a
jnn a 2
dec a
Dieses Beispiel setzt zuerst den Wert 41
ins Register a
, erhöht diesen Wert dann einmal,
dann noch einmal, verringert ihn einmal, prüft dann, ob das Register a
Null ist (nein, ist es nicht)
und überspringt deswegen die letzte Instruktion.
Das Programm endet mit einem Wert von 42
in Register a
.
Aufgabe 1
Welchen Wert hat das Register a
nach Programmende, falls Register c
nicht mit 0
, sondern
mit 3
vorinitialisiert wird?
Bewertungsgrundlage
Diese Aufgabe stellt andere Anforderungen als die Vorangegangenen. Sie müssen ein geeignetes Modell finden, um den Assemblercode zu interpretieren und dann ggf. weitere Anstrengungen bemühen, um die Lösung zu finden.
Die Bewertung der Abgabe besteht aus den unten folgenden Punkten, die ihr Lösungsprojekt enthalten muss. Nehmen Sie als Vorlage die Musterlösung zu Aufgabe 0 zur Hand.
- Eine schriftliche Ausarbeitung als PDF-Dokument in Ihrem GitLab-Projekt:
- Analyse des Problems.
- Beschreiben Sie Ihren Lösungsansatz
- Lösung der Problems in einem Projektordner in Ihrem GitLab-Projekt
- Das ausschließlich von Ihnen allein geschriebene Programm soll die gestellte Aufgabe auf einem gewöhnlichen Laborrechner der Hochschule in unter einer Minute Laufzeit lösen.
- Das Lösungsprojekt darf nur als Quellcode abgegeben werden.
- Eine ausführliche Bau- und Ausführanleitung ist zwingender Bestandteil der Abgabe. Legen Sie gegebenenfalls Makefiles oder andere Bauskripte bei. Das Bauen und Ausführen des Lösungsprojekts muss in wenigen Schritten möglich sein und auf einem Laborrechner der Hochschule vorgeführt werden können.
- Ihr Programm muss die Puzzleeingabe von der Standardeingabe einlesen.
- Ihr Programm darf nur Ihre Lösung auf der Standardausgabe ausgeben. Die Lösung muss in der Form den mitgelieferten Beispielen entsprechen. Zusätzliche Ausgabe zu Debuggingzwecken sind aus der Abgabe vorher zu entfernen. Falls Ihr Programm hilfreiche Detailinformationen zur Lösungsfindung ausgeben kann, dokumentieren Sie, wie sie gesondert aktiviert werden kann.
Seien Sie außerdem darauf vorbereitet, Ihr Projekt während des Praktikumstermins vorzustellen und dazu Fragen zu beantworten.
Abgabemodalitäten
Zur Abnahme ist die persönliche Anwesenheit erforderlich. Ihr Lösungsprojekt muss zum Abgabetermin im vorher von Ihnen eingerichtetem persönlichen, privaten GitLab-Projekt abrufbar sein.