TAM-Register

Dennis Albrecht
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 222
Registriert: 4. Okt 2010 18:15

TAM-Register

Beitrag von Dennis Albrecht » 9. Feb 2012 21:50

Ich hab mal ne Frage zu den TAM-Registern:
Auf den Folien zur tamruntime steht auf Seite 11. dass die TAM-Instruktionen 4 bit für den Registernamen besitzen. Daraus ergibt sich eine (maximale) Zahl von 16 Registern.
Wenn man jetzt anfängt die vorhandenen Register aufzuzählen passiert folgendes (Aufzählung entspricht der Reihenfolge des Auftauchens in den Folien):
0000 CB: Code Base
0001 CT: Code Top
0010 CP: Code Pointer
0011 PB: Primitive Base
0100 PT: Primitive Top
0101 SB: Stack Base
0110 LB: Local Base (wurde auf Seite 9 vergessen!)
0111 ST: Stack Top
1000 HB: Heap Base
1001 HT: Heap Top
1010 HF: Heap Free
es bleiben nun noch fünf freie Adressen für Register. Allerdings soll es ja jetzt noch sieben Displayregistern geben. Und alle nun in Summe 18 Register werden als "r" in den TAM-Befehlen verwendet oder könnten zumindest verwendet werden.
Jetzt wäre die Frage, ob hier ein mittelschwerer Fehler passiert ist (es gibt wirklich 18 Registern und es würden fünf bits benötigt) oder ob zwei der aufgezählten Register nur implizit existieren (z.B. sind CB und SB immer 0 und müssten nicht explizit mitgeführt werden; schlechtes Beispiel, da CB und SB auf das Feld im Java-Speicher zeigen könnten, wo das Instruktions- und Stack-Array liegen oder irgendwas in der Richtung (würde in Java so eher weniger funktionieren, in C aber so denkbar)).

Gruß

Dennis Albrecht
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 222
Registriert: 4. Okt 2010 18:15

Re: TAM-Register

Beitrag von Dennis Albrecht » 9. Feb 2012 22:01

OK, wenn man das Buch neben sich liegen hat und hier im Forum fragt, dann ist das schon ein sehr schwerwiegender Fehler :D

erster Denkfehler von mir: es gibt sechs explizite Displayregister und den SB als implizites Display (quasi das siebte Display, da die globalen Deklarationen ja auch die erste Routine umschließen).
zweiter Fehler (diesmal auf den Folien): Watt & Brown sehen an dieser Stelle keinen HF vor. Somit wird die Entwicklung einer Heapverwaltung nochmal erschwert :D Entweder durchbricht man also die magische 4bit Schranke oder muss mit einer Konvention arbeiten, dass HF irgendwo fest im Speicher liegt (bspw 0[LB] oder besser 0[HB])

Gruß

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: TAM-Register

Beitrag von LordHoto » 9. Feb 2012 23:19

Da die TAM eine Havard-Architektur ist und bestimmte Instruktionen entweder nur auf den Instruktionsspeicher oder auf den Datenspeicher zugreifen können, ist es durchaus möglich, dass die Nummern der Register, die auf den Instruktionsspeicher "zeigen", getrennt von denen, die auf den Datenspeicher "zeigen", nummeriert werden. D.h. es würden zwei getrennte Nummernbereiche von 0...15 existieren und durch die Instruktion lässt sich feststellen, welcher Bereich gemeint ist.
Compiler 1 Tutor WS 12/13

Antworten

Zurück zu „Archiv“