Hausuebung 1 Aufgabe 2

Benutzeravatar
Nacht-Schatten
Neuling
Neuling
Beiträge: 8
Registriert: 28. Okt 2007 18:03
Wohnort: Mühlheim
Kontaktdaten:

Hausuebung 1 Aufgabe 2

Beitrag von Nacht-Schatten »

Gude,

Hausuebung 1 Aufgabe 2 Zeile 10
->lb $t3 , 0( $t1)

Was bewirkt dieser Befehl?
Laut Beschreibung wird der Speicherinhalt geladen.
Dieser ist aber unbekannt.

Hat jemand eine gloreiche Idee?

Thorti
BSc Spammer
BSc Spammer
Beiträge: 1047
Registriert: 1. Dez 2003 11:52
Wohnort: Frankfurt
Kontaktdaten:

Re: Hausuebung 1 Aufgabe 2

Beitrag von Thorti »

Hallo,
Nacht-Schatten hat geschrieben:->lb $t3 , 0( $t1)

Was bewirkt dieser Befehl?
Laut Beschreibung wird der Speicherinhalt geladen.
Genau. Es wird der Inhalt der an der Adresse 0+$t1 steht in das Register $t3 geladen.
Dieser ist aber unbekannt.
Wieso? :shock:
Hat jemand eine gloreiche Idee?
Schau dir nochmal das ganze Programm an.

Gruss Thorti
Assistent zur Vorlesung TGDI im WS 11/12

Trusterrer
Mausschubser
Mausschubser
Beiträge: 78
Registriert: 4. Nov 2006 22:19

Beitrag von Trusterrer »

Ich hätte mal ne allgemeine Frage zu dieser Aufgabe. Funktioniert dieses Programm überhaupt bzw macht es überhaupt Sinn?
Schau ich mir alleine die Zeilen 5-7 an weis ich nicht was ich davon halten soll.

Code: Alles auswählen

5   la $t0, str
#die Addr. des Strings wird in $t0 geladen, ist klar

Code: Alles auswählen

6   or $t1, $t0, $zero
#wieso sollte man nun die Addr. bitweise mit 0 verodern zumal die Addr. nur aus Schmodder besteht mit dem nur der Assembler was anfangen kann

Code: Alles auswählen

7   xor $v0, $t0, $t1 
#jetzt kommts noch doller und der Quatsch den wir eben gerade berechnet haben wird noch mit xor verwurschtelt. Wie auch immer bei mir ist nach der Ausführung $v0 immer und zu jeder Zeit "0"

Ich glaube ich habe hier ein allgemeines Verständnissproblem. Kann mich mal jemand aufklären?

Benutzeravatar
m0ep
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 189
Registriert: 5. Okt 2006 22:52
Wohnort: Bensheim
Kontaktdaten:

Beitrag von m0ep »

joa diese Stelle ist echt ein bissel Sinnlos .... da ja immer wenn man die selben Werte 'xort' 0 bei rauskommt ... naja wir sollen das Prog ja nur verstehen und nicht nachschauen ob es Sinn macht =)
Lasst mich Arzt, ich bin durch!

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Beitrag von MisterD123 »

ich glaube die frage "was steht allgemein in v0" ist mehr auf syscall ids und funktionsrückgaben bezogen..

citta
Mausschubser
Mausschubser
Beiträge: 96
Registriert: 7. Nov 2006 21:52

Beitrag von citta »

Kann das ein Tutor bestätigen? Ich glaub ja nicht, dass so ne einfache Recherche 4 Punkte bringt. Ich hab das mit "Welche Werte nimmt $v0 an, abhängig von str?" interpretiert.

Benutzeravatar
m0ep
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 189
Registriert: 5. Okt 2006 22:52
Wohnort: Bensheim
Kontaktdaten:

Beitrag von m0ep »

Ich hab sicherheitshalber beides hingeschrieben ^^
Lasst mich Arzt, ich bin durch!

Trusterrer
Mausschubser
Mausschubser
Beiträge: 78
Registriert: 4. Nov 2006 22:19

Beitrag von Trusterrer »

wenn in $v0 immer "0" drin steht bringt einem string ausgabe mit syscall etc auch nix, denn eine 0 Adresse ist und bleibt leer

Sascha
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 245
Registriert: 13. Apr 2004 19:23
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Sascha »

Trusterrer hat geschrieben:Ich hätte mal ne allgemeine Frage zu dieser Aufgabe. Funktioniert dieses Programm überhaupt bzw macht es überhaupt Sinn?
Ja, es funktioniert, und ja, es ist sinnvoll.

Code: Alles auswählen

6   or $t1, $t0, $zero
#wieso sollte man nun die Addr. bitweise mit 0 verodern zumal die Addr. nur aus Schmodder besteht mit dem nur der Assembler was anfangen kann
Was kommt denn dabei raus, wenn man das so macht? Man möchte den Inhalt von $t0 nach $t1 bringen. Eine direkte Zuweisung gibt es aber nicht als Hardware-Opcode, also muss man sich anders behelfen. Zwar ist "move" ein Pseudobefehl, der das macht, aber auch er wird als eine Verknüpfung mit $zero umgesetzt. (Beim Mars scheinbar als "addu $t1, $zero, $t0".)

Code: Alles auswählen

7   xor $v0, $t0, $t1 
#jetzt kommts noch doller und der Quatsch den wir eben gerade berechnet haben wird noch mit xor verwurschtelt.
Das ist zugegebenermaßen etwas unorthodox, aber auch hier zählt, was am Ende rauskommt. Auf Assemblerebene muss man etwas tricksen und Befehle zweckentfremden, um kleinen und schnellen Code zu bekommen. Hier ging es darum, ein "li" zu vermeiden, das nämlich in zwei Opcodes umgesetzt wird. Klar geht das auch anders, aber ist es so "schlechter"?
Wie auch immer bei mir ist nach der Ausführung $v0 immer und zu jeder Zeit "0"
Wenn man das Programm tatsächlich bis zum Schluss durchgerechnet hat, sollte klar geworden sein, was der Sinn davon ist. Dann weiß man auch, was für andere Eingabedaten herauskäme. (Das ist mit der Frage d gemeint.)

banshee
Nerd
Nerd
Beiträge: 684
Registriert: 22. Okt 2006 18:46

Beitrag von banshee »

Ich hatte da schon was raus. Kann es sein, dass $v0 eine Flag-Funktion hatte? :)

und im 1. Teil ist $v0 natürlich immer 0

/edit: ja sorry, mir is dann auch eingefallen, dass Abgabe erst am Montag ist :)
Zuletzt geändert von banshee am 3. Nov 2007 11:37, insgesamt 1-mal geändert.

Sascha
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 245
Registriert: 13. Apr 2004 19:23
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Sascha »

Bitte keine vollständigen Lösungsversuche zu Hausübungen posten.

jno
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 18. Mai 2007 09:41

Beitrag von jno »

Noch mal zur ursprünglichen Frage, was der Load-byte-Befehl bewirkt, ich glaube, mir ist es noch nicht ganz klar. Mal angenommen, der Wert des Registers sei bekannt, zB $t0 = 111_2. Was würde dann lb $t3, 0($t1) bewirken? Oder hat das gar nichts mit dem Wert, der da drin steht zu tun? :-/ Also, die 2b) könnt ich wahrscheinlich hinschreiben, kann ja nur ein Wert drin stehen, wenns keine Endlosschleife werden soll, aber ich möcht halt gerne verstehen, warum...

Sascha
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 245
Registriert: 13. Apr 2004 19:23
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Sascha »

jno hat geschrieben:Mal angenommen, der Wert des Registers sei bekannt, zB $t0 = 111_2. Was würde dann lb $t3, 0($t1) bewirken?
Wenn in $t1 der Wert 111_2 stünde, dann würde durch lb $t3, 0($t1) ein Byte von der Speicheradresse 0 + 111_2 = 7 geladen und in $t3 abgespeichert werden. Mit $t0 hat das nichts zu tun.

jno
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 18. Mai 2007 09:41

Beitrag von jno »

oh, ja natürlich, sollte auch beides mal $t0 sein, hab mich vertippt. Danke.

Antworten

Zurück zu „Archiv“