Hallo,
hier die Erkenntnisse von der Korrektur:
1a) Die meisten haben richtig 61 Befehle gezählt. Auch ein bedingter Sprung, der nicht ausgeführt wird, ist ein ausgeführter Befehl - es muss ja entschieden werden dass nicht gesprungen wird. (darüber wurde ja diesem Thread diskutiert).
1b) Die Verschiebung der Abbruchabfrage ans Ende haben die meisten richtig gemacht. Viele haben jedoch vergessen, am Anfang "blez $s3 end" einzubauen für den Fall dass bound <= 0.
1c) geschenkter Punkt
2a) Hier kamen einige Fehler vor. Ein häufiger war, dass nicht beachtet wude, dass die Adressen in Hexadezimaler Schreibweise vorliegen. Ein weiteres Problem war $ra. Er zeigt immer auf den Befehl, der als nächstes nach dem Rücksprung ausgeführt werden muss (und nicht auf die Adresse des jal-Befehls).
2b) Einige haben übersehen, dass auch im letzten Durchlauf nochmal $ra und $a0 in den Stack geschrieben werden (was zwar unnötig ist, aber so im Code stand). Somit werden 5 Paare $ra und $a gesichert. Ein weiterer böser Fehler: einige wollten an Adresse 0x80000000 schreiben (also über den ursprünglichen Stackpointer). Das ist verboten!
2c) Als Folgefehler aus der 2b wurden oft nur 8 Speicherplätze statt 10 belegt. Ein Speicherplatz entspricht einem Wort (und das entspricht 4 Byte). Somit werden 40 Byte belegt (Anmerkung: halbe Bytes oder irgendwelche ungeraden Bitanzahlen im Bereich von 10^10 sind irgendwie sehr unsinnig...)
So, das waren die Dinge die mir aufgefallen sind.
Gruss Thorti
Fazit Hausaufgaben 2. Übungsblatt
Fazit Hausaufgaben 2. Übungsblatt
Assistent zur Vorlesung TGDI im WS 11/12
-
- Windoof-User
- Beiträge: 28
- Registriert: 8. Okt 2004 12:57
- Wohnort: Mörfelden-Walldorf
- Kontaktdaten:
Nun also entweder wurde hier im Forum stark in die Irre geleitet, oder die Aufgabenstellung enthält einen groben Fehler.Thorti hat geschrieben: 1b) Die Verschiebung der Abbruchabfrage ans Ende haben die meisten richtig gemacht. Viele haben jedoch vergessen, am Anfang "blez $s3 end" einzubauen für den Fall dass bound <= 0.
Wie du schon sagtest wurde im Thread darüber diskutiert ob ein nicht ausgeführter Sprung als Befehl (und somit auch Verzweigung) zählt. Da ja viele zu dem Schluss kamen es sei so, waren also 2 Verzweigungen im Ursprungsprogramm.
Wie soll man das mit "blez $s3 end" Abfrage am Anfang und Abbruchbedingung am Ende denn auf eine Verzweigung reduzieren wie es gefordert war in der Aufgabenstellung?
Denn so sind schon wieder 2!!! drin.
Ich habe auch lange überlegt wie ich es machen soll und hab dann die "blez $s3 end" weggelassen (zwar mit Vemerkt auf dem Blatt aber das ist wohl irrelevant).
Es war die Frage ob man die Aufgabenstellung "erfüllen" will oder auf Richtigkeit setzt.
So wie du es nun erläutert hast wäre es laut Aufgabenstellung falsch (sofern wie im Thread geklärt ein nicht ausgeführter Sprung trotzdem als abgearbeitet zählt) und man hätte das Programm dementsprechend nichtmal modifizieren müssen (da auch so schon 2 Sprünge drin sind).
Aber mit NUR einer Verzweigung hätte man es ohne diese Vernachlässigung der Abfrage am Anfang nicht lösen können.
Frage:
Fehler in der Aufgabenstellung oder
Fehler in der Erläuterung im Thread (und man hätte somit das Prog nicht mal modifizieren müssen)?
Oder hab ich irgendwie was übersehen?
"Manchen gab Gott die Kraft Dinge zu verändern, mir gab er die Kraft zu ertragen was ich nicht ändern kann."
Frederik Hahn
Frederik Hahn