HUMBOLDT-UNIVERSITÄT ZU BERLIN
COMPUTER SCIENCE DEPARTMENT
Systems Architecture Group

Head: Prof. Dr. Jens-Peter Redlich
Secretary:  Silvia Schoch
Phone: +49(30)2093-41150

 

     

Lab 1: HAL Interpreter

Abgabeverfahren

Ihre 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 1

Schreiben Sie ein HAL-Programm, das abwechselnd von zwei Kanälen liest und folgende Daten auf einem dritten Kanal ausgibt:

  • kleinste Zahl,

  • größte Zahl,

  • arithemtisches Mittel

Wie kann eine sinnvolle Lösung für den Abbruch der Eingabe aussehen?

Aufgabe 2

Implementieren 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:

  1. Hole die nächste Instruktion aus dem Programmspeicher
  2. Ändere den Befehlszähler (Register 1), damit er auf die nächste Instruktion zeigt.
  3. Bestimme den Typ der aktuellen Instruktion.
  4. Bestimme ggf. die Operanden.
  5. Führe die Instruktion aus.
  6. Gehe zu Schritt 1.

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 3

Testen 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.


Legal disclaimer. .  © 2024 Humboldt-Universität zu Berlin, Computer Science Department, Systems Architecture Group. Contact: sar@informatik.hu-berlin.de .