|
|
Lab 1: HAL InterpreterAbgabeverfahrenIhre Lösung für die erste Praktikumsaufgabe (Lab 1) sollte eine GZip-Datei bestehend aus der Lösung für die Aufgabe 1 (HTML-Datei) und Aufgabe 2 (HTML-Datei, C/C++ Quellcode, ein GNU-Makefile, sowie zusätzliche Ressourcen (lex, yacc)) sein. Die Abgabe erfolgt über das GOYA-System. Aufgabe 1Schreiben Sie ein HAL-Programm, das abwechselnd von zwei Kanälen liest und folgende Daten auf einem dritten Kanal ausgibt:
Wie kann eine sinnvolle Lösung für den Abbruch der Eingabe aussehen? Aufgabe 2Implementieren Sie in C oder C++ einen HAL-Interpreter[1], der die Arbeitsweise des HAL-Prozessors nachbildet. Beim Aufruf des HAL-Interpreters soll das HAL-Programm in Form einer Datei als Argument angegeben werden. Der HAL-Prozessor führt jede Instruktion als Abfolge folgender Schritte aus:
Hinweise Zum Einlesen des HAL-Quellcodes ist eine Parser-Komponente notwendig. Diese kann mit den Ihnen bekannten Compilerbau-Werkzeugen (lex/yacc) erzeugt werden. Beachten Sie hierbei, dass lex und yacc in der Lage sind C++-Code zu erzeugen. Der HAL-Interpreter sollte nach außen hin für seine Verwendung folgende Schnittstelle zur Verfügung stellen: <<interface>> Interpreter { HALProcessState execute(HALProcess, int stepCnt); void saveRegisters(HALProcess); void restoreRegisters(HALProcess) } Finden Sie eine geeignete Definitionen für die Typen HALProcess und HALProcessState und begründen Sie Ihre Entscheidung. Hinweis 1: execute() führt stepCnt Schritte des im ersten Argument angegebenen HAL-Programms aus. Der Rückgabewert zeigt an, ob execute() zurückkehrte weil das Programm eine STOP-Anweisung ausführte, eine I/O-Operation ansteht, oder ob alle stepCnt Schritte abgearbeitet wurden. Hinweis 2: saveRegisters() und restoreRegisters() sichern bzw. rekonstruieren den aktuellen Zustand der CPU des HAL-Computers (also, z.B. der Register). Dies wird benötigt, wenn wir später mehrere HAL-Programme nebeneinander ausführen wollen. Aufgabe 3Testen Sie den HAL-Interpreter (Unittest, z.B. mit dem Programm aus Aufgabe 1). Ihr Lösung sollte auf dem Institutsrechner mitte.informatik.hu-berlin.de lauffähig sein.[1] Unter einem Interpreter versteht man ein Programm, das die Instruktionen eines anderen Programms liest, prüft und ausführt. |
|