KSP Aufgabe 5
1. Die Aufgabenstellung hier ist ganz einfach, bedingt
aber einige Aenderungen in der VM: Verlagern Sie die
Rechenobjekte (bis jetzt sind das ja nur ganze Zahlen)
auf den Heap und halten Sie in der Static Data Area, auf
dem Stack und im Rueckgabewertregister nur noch Zeiger in
den Heap. Der Speicherplatz fuer die Objekte wird mit
malloc() beschafft und innerhalb Ihres Programms nicht
wieder freigegeben (das ist naemlich ohne Garbage Collector
praktisch nicht moeglich, und wie ein solches Teil funktioniert,
werden wir in der Vorlesung erst spaeter behandeln). Was genau
sind unsere "Rechenobjekte"? Nun, das ist einfach: alle Objekte
in der Static Data Area, alle Objekte auf dem Stack (mit Ausnahme
von Ruecksprungadressen und Framepointerwerten) sowie der Inhalt
des Rueckgabewertregisters. Alle anderen in der VM benutzten
Dinge, wie z.B. Codespeicher, Programmzaehler, Stackpointer
und Framepointer sind keine Rechenobjekte: man kann sie
von einem Ninja-Programm aus nicht unmittelbar beeinflussen.
2. Der Instruktionssatz ist gegenueber
Aufgabe 4 unveraendert; auch der Compiler
und der Assembler bleiben exakt gleich
(bis auf die Versionsnummern).
3. Ihr Debugger muss beim Anzeigen des Stacks kenntlich
machen, welche Eintraege Objektreferenzen und welche
Eintraege einfache Zahlen (Ruecksprungadressen und
gespeicherte Framepointer) sind.
4. Bauen Sie in Ihren Debugger eine Moeglichkeit ein,
Objekte zu inspizieren. Warum? Wenn Sie z.B. wissen
wollen, welche Zahl ganz oben auf dem Stack liegt, dann
lassen Sie sich den Stack anzeigen. Dort finden Sie aber
nur die Adresse des Objektes auf dem Heap. Also wuenschen
Sie sich eine Moeglichkeit, den Inhalt eines Objektes bei
gegebener Objektadresse anzuschauen. Das wird im Uebrigen
auch in der uebernaechsten Aufgabe gebraucht, wenn in
Objekten Referenzen auf andere Objekte gespeichert werden.
5. Hier wie immer die Referenzimplementierung:
njvm