Seite 3 von 3

Re: 3. Aufgabenblatt

Verfasst: 2. Feb 2013 15:55
von LordHoto
Toa hat geschrieben:In welchem Format sind denn diese *.tam files? Wenn ich mit notepad++ für Aufgabe 3.2 den Quellcode als *.tam speichere kann der Disassembler die Datei nicht einlesen. Grüße T0a
Die *.tam Dateien enhalten den Binärcode der TAM-Befehle eines Programmes. Du musst den Quellcode erstmal durch den Compiler laufen lassen und auf die erzeugte *.tam Datei dann den Disassembler laufen lassen.

Re: 3. Aufgabenblatt

Verfasst: 3. Feb 2013 16:34
von d_glenz
Hallo,

liegt denn der Sinn von Aufgabe 3.4 einzig darin, mehr als 360 Felder zu zeichnen, jeweils mit Basistyp, benutzerdefiniertem Typ und Record-/Array-Zugehörigkeit?
Wenn ja wären das ja geschätzte 5 Seiten mit jeweils gleichem Inhalt, nämlich den board-Einträgen.

Anders gefragt: Sollen wir jedes Feld zeichnen oder reichen Auslassungszeichen? Und ist die Aufgabe wirklich so einfach, wie es auf den ersten Blick scheint?

Re: 3. Aufgabenblatt

Verfasst: 3. Feb 2013 16:51
von Toa
Hey,

ich hab auch nur den ersten Eintrag und letzten mit Index angegeben und dazwischen mit "..." gearbeitet. Ich denke das ist vollkommen ok und zeigt das man es verstanden hat. Grüße T0a

Re: 3. Aufgabenblatt

Verfasst: 3. Feb 2013 16:53
von LordHoto
d_glenz hat geschrieben:Hallo,

liegt denn der Sinn von Aufgabe 3.4 einzig darin, mehr als 360 Felder zu zeichnen, jeweils mit Basistyp, benutzerdefiniertem Typ und Record-/Array-Zugehörigkeit?
Wenn ja wären das ja geschätzte 5 Seiten mit jeweils gleichem Inhalt, nämlich den board-Einträgen.

Anders gefragt: Sollen wir jedes Feld zeichnen oder reichen Auslassungszeichen? Und ist die Aufgabe wirklich so einfach, wie es auf den ersten Blick scheint?
Bei Arrays reicht es den ersten und letzten Eintrag zu zeichnen. Dazwischen können Auslassungszeichen verwendet werden.

Re: 3. Aufgabenblatt

Verfasst: 3. Feb 2013 17:43
von d_glenz
Ok, vielen Dank für eure Hilfe!

Re: 3. Aufgabenblatt

Verfasst: 19. Feb 2013 22:43
von himbaer
Hier habe ich nochmal zwei Fragen zur Musterlösung zur Aufgabe 3.5.
1 : Erstmal habe ich in meiner Lösung den Stack von oben nach unten wachsend gezeichnet. Wäre das falsch?
Soweit ich weiß, wächst der Stack normalerweiße eben auch genau von oben nach unten. Bei der TAM aber genau umgekehrt. Wie sollen wir das in der Klausur machen?

2: In dem Bild Listing 6: before mfib(3, var a) aus der Musterlösung ist mir nicht so ganz ersichtlich, wann ein Wert auf dem Stack liegt und wann eine Adresse auf dem Stack liegt.
In dem aktuellen Stack frame wurde dort erstmal Platz für die Variablen a,b gemacht und dann wurden die Parameter auf den Stack gelegt. Also zuerst der WERT 3 und dann die Adresse der Variable a. Hier frage ich mich dann erstens woran man in der Musterlösung unterscheiden kann, wann ein Wert auf dem Stack liegt und wann eine Adresse auf dem Stack liegt. Außerdem frage ich mich, wieso die Variable a relativ zum SB auf dem Stack gelegt worden ist? Wäre es dort nich auch ok gewesen, die Variable relativ zum LB auf dem Stack abzulegen??? Oder wird da einfach die Adresse von der Stackadresse |6| auf dem Stack platziert? Dann frage ich mich aber wieder wieso die |3| darunter steht. Wäre schon dazu nochmal eine erklärung zu bekommen, wie genau wir das in der Klausur handhaben sollen.

Re: 3. Aufgabenblatt

Verfasst: 19. Feb 2013 23:17
von LordHoto
himbaer hat geschrieben:Hier habe ich nochmal zwei Fragen zur Musterlösung zur Aufgabe 3.5.
1 : Erstmal habe ich in meiner Lösung den Stack von oben nach unten wachsend gezeichnet. Wäre das falsch?
Soweit ich weiß, wächst der Stack normalerweiße eben auch genau von oben nach unten. Bei der TAM aber genau umgekehrt. Wie sollen wir das in der Klausur machen?
Solang erkennbar ist, wohin die Adressen größer werden, ist es eigentlich egal. Trotzdem würde ich empfehlen von unten anch oben zu zeichnen, da es der TAM entspricht.
himbaer hat geschrieben:2: In dem Bild Listing 6: before mfib(3, var a) aus der Musterlösung ist mir nicht so ganz ersichtlich, wann ein Wert auf dem Stack liegt und wann eine Adresse auf dem Stack liegt.
In dem aktuellen Stack frame wurde dort erstmal Platz für die Variablen a,b gemacht und dann wurden die Parameter auf den Stack gelegt. Also zuerst der WERT 3 und dann die Adresse der Variable a. Hier frage ich mich dann erstens woran man in der Musterlösung unterscheiden kann, wann ein Wert auf dem Stack liegt und wann eine Adresse auf dem Stack liegt.
Das ist wie in der Realität: Es ist i.A. nicht möglich zu unterscheiden ob es ein Wert oder eine Adresse ist, wenn man sich nur den Speicher anschaut. Hier musst du auf den Code zurückgreifen um zu schaun was es ist.
himbaer hat geschrieben:Außerdem frage ich mich, wieso die Variable a relativ zum SB auf dem Stack gelegt worden ist? Wäre es dort nich auch ok gewesen, die Variable relativ zum LB auf dem Stack abzulegen??? Oder wird da einfach die Adresse von der Stackadresse |6| auf dem Stack platziert?
Es wird die Adresse der Daten auf den Stack gelegt, was hier 6 ist.
himbaer hat geschrieben:Dann frage ich mich aber wieder wieso die |3| darunter steht.
Da das der Inhalt des Stacks vor dem Callkommando zu mfib(3, var a) ist, ist hier die 3 der Wert von n.
himbaer hat geschrieben:Wäre schon dazu nochmal eine erklärung zu bekommen, wie genau wir das in der Klausur handhaben sollen.
Im Zweifel sollte man sich an die Musterlösung halten. Jedoch ist es in der Klausur hoffentlich beschrieben, wie es zu handhaben ist bei Unklarheiten. Zur Not kann man auch in der Klausur eine Frage stellen.

Re: 3. Aufgabenblatt

Verfasst: 20. Feb 2013 10:39
von himbaer
Super vielen dank. Nur eine kleine Sache noch :D
Wie wurde dort die retourn Adresse berechnet?

Re: 3. Aufgabenblatt

Verfasst: 20. Feb 2013 10:59
von Jens Huthmann
himbaer hat geschrieben:Wie wurde dort die retourn Adresse berechnet?
Mit Magie... oder einer umgebauten Version des Interpreters :wink:

Da diese aber nicht ohne konkrete Erzeugung des TAM Codes berechnet werden kann, fließt diese nicht in die Bewertung mit ein, außer das der Platz vorhanden sein muss.