Gruppenübung9 A1 eventuell falsch?

Kineese
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 14. Feb 2008 18:33

Gruppenübung9 A1 eventuell falsch?

Beitrag von Kineese » 8. Feb 2011 20:59

Hi!
Ich bin gerade dabei die Übungen nochmals durch zu gehen.
Dabei ist mir aufgefallen, dass in Aufgabe 1 der Assemblercode falsch ist, sofern ich richtig liege :oops:

Code: Alles auswählen

Hochsprache:
a = feld[5]

Assembler:
addi $t0, $zero, 20 # Offset ist 5 * 4
lw $s0, feld($t0) # Lade feld[5]
So wie es da steht ist das Muster von lw wie folgt:

Code: Alles auswählen

lw <Zielregister>, Adresse(Offset/Index)
Sollte es aber nicht so lauten (Steht auch so in der Mips-Referenz)?:

Code: Alles auswählen

lw <Zielregister>, Offset(Adresse)
Code zur Aufgabe:
lw $s0,$t0(feld)
wobei die Adresse von feld in einem vorherigen Register geladen werden müsste.
Also:

Code: Alles auswählen

la $t1, feld
li $t0,20
lw $s0,$t0($t1)
Noch eine Frage:
Wann macht man für eine Integerzuweisung den li- bzw addi-Befehl? Hab das jetzt oft schon gesehen und frage mich wieso in den meisten Fällen die addi-Variante gewählt wird.

Und noch eine:
Warum wird in der letzten Teilaufgabe von A1 4096 als Schleifenabbruchbedingung gewählt?

Danke für schnelle und hilfreiche Antworten!

Gruß

Benutzeravatar
AlexB
Kernelcompilierer
Kernelcompilierer
Beiträge: 487
Registriert: 8. Jul 2004 09:51
Kontaktdaten:

Re: Gruppenübung9 A1 eventuell falsch?

Beitrag von AlexB » 9. Feb 2011 09:23

Kineese hat geschrieben:Hi!
Ich bin gerade dabei die Übungen nochmals durch zu gehen.
Dabei ist mir aufgefallen, dass in Aufgabe 1 der Assemblercode falsch ist, sofern ich richtig liege :oops:

Code: Alles auswählen

Hochsprache:
a = feld[5]

Assembler:
addi $t0, $zero, 20 # Offset ist 5 * 4
lw $s0, feld($t0) # Lade feld[5]
So wie es da steht ist das Muster von lw wie folgt:

Code: Alles auswählen

lw <Zielregister>, Adresse(Offset/Index)
Sollte es aber nicht so lauten (Steht auch so in der Mips-Referenz)?:

Code: Alles auswählen

lw <Zielregister>, Offset(Adresse)
Code zur Aufgabe:
lw $s0,$t0(feld)
wobei die Adresse von feld in einem vorherigen Register geladen werden müsste.
Also:

Code: Alles auswählen

la $t1, feld
li $t0,20
lw $s0,$t0($t1)
Wirft die Mulö im Simulator einen Fehler? Deine präsentierte Lösung sieht valide aus. Ich meine aber, dass auch das aus dem Übungsblatt funktioniert.
Kineese hat geschrieben: Noch eine Frage:
Wann macht man für eine Integerzuweisung den li- bzw addi-Befehl? Hab das jetzt oft schon gesehen und frage mich wieso in den meisten Fällen die addi-Variante gewählt wird.
Das ist egal. Der einzige Unterschied ist, dass li nur eine Pseudoinstruktion ist, addi dagegen eine Hardwareinstruktion. Ein li wird für die Übersetzung in Maschinencode automatisch in ein addi mit $0 übersetzt.
Kineese hat geschrieben: Und noch eine:
Warum wird in der letzten Teilaufgabe von A1 4096 als Schleifenabbruchbedingung gewählt?
Der MIPS-Speicher ist byteadressiert. Man liest in dem Programm in der Aufgabe jedoch ganze Wörter aus dem Speicher. Wörter sind jeweils vier Byte, d.h. vier Adressen voneinander entfernt. Aus dem Grund erhöht man den Counter statt um eins um vier und lässt ihn auch entsprechend statt bis 1024 bis 4096 laufen.
Aktuelle Veranstaltungen
"Hardwaremodellierungssprachen" [SS 2012] - Webseite - Jetzt im TUCaN't anmelden!
TUCaN't - wenn's mal wieder länger dauert.
Bild

Kineese
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 14. Feb 2008 18:33

Re: Gruppenübung9 A1 eventuell falsch?

Beitrag von Kineese » 9. Feb 2011 09:49

AlexB hat geschrieben:
Kineese hat geschrieben:Hi!
Ich bin gerade dabei die Übungen nochmals durch zu gehen.
Dabei ist mir aufgefallen, dass in Aufgabe 1 der Assemblercode falsch ist, sofern ich richtig liege :oops:

Code: Alles auswählen

Hochsprache:
a = feld[5]

Assembler:
addi $t0, $zero, 20 # Offset ist 5 * 4
lw $s0, feld($t0) # Lade feld[5]
So wie es da steht ist das Muster von lw wie folgt:

Code: Alles auswählen

lw <Zielregister>, Adresse(Offset/Index)
Sollte es aber nicht so lauten (Steht auch so in der Mips-Referenz)?:

Code: Alles auswählen

lw <Zielregister>, Offset(Adresse)
Code zur Aufgabe:
lw $s0,$t0(feld)
wobei die Adresse von feld in einem vorherigen Register geladen werden müsste.
Also:

Code: Alles auswählen

la $t1, feld
li $t0,20
lw $s0,$t0($t1)
Wirft die Mulö im Simulator einen Fehler? Deine präsentierte Lösung sieht valide aus. Ich meine aber, dass auch das aus dem Übungsblatt funktioniert.
Kineese hat geschrieben: Noch eine Frage:
Wann macht man für eine Integerzuweisung den li- bzw addi-Befehl? Hab das jetzt oft schon gesehen und frage mich wieso in den meisten Fällen die addi-Variante gewählt wird.
Das ist egal. Der einzige Unterschied ist, dass li nur eine Pseudoinstruktion ist, addi dagegen eine Hardwareinstruktion. Ein li wird für die Übersetzung in Maschinencode automatisch in ein addi mit $0 übersetzt.
Kineese hat geschrieben: Und noch eine:
Warum wird in der letzten Teilaufgabe von A1 4096 als Schleifenabbruchbedingung gewählt?
Der MIPS-Speicher ist byteadressiert. Man liest in dem Programm in der Aufgabe jedoch ganze Wörter aus dem Speicher. Wörter sind jeweils vier Byte, d.h. vier Adressen voneinander entfernt. Aus dem Grund erhöht man den Counter statt um eins um vier und lässt ihn auch entsprechend statt bis 1024 bis 4096 laufen.
Danke für die Antwort!
Habe den Code aus der MuLö garnicht ausprobiert :lol:
Und dass die Grenze auf 4096 gesetz wurde leutet mir jetzt auch ein :oops:

Gruß

Kineese
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 14. Feb 2008 18:33

Re: Gruppenübung9 A1 eventuell falsch?

Beitrag von Kineese » 10. Feb 2011 10:20

AlexB hat geschrieben:
Kineese hat geschrieben: Noch eine Frage:
Wann macht man für eine Integerzuweisung den li- bzw addi-Befehl? Hab das jetzt oft schon gesehen und frage mich wieso in den meisten Fällen die addi-Variante gewählt wird.
Das ist egal. Der einzige Unterschied ist, dass li nur eine Pseudoinstruktion ist, addi dagegen eine Hardwareinstruktion. Ein li wird für die Übersetzung in Maschinencode automatisch in ein addi mit $0 übersetzt.
Bin da etwas stutzig, da auf dem MIPS-Referenz-Blatt steht dass der Befehl li keine Pseudoinstruktion ist. :?:

Benutzeravatar
AlexB
Kernelcompilierer
Kernelcompilierer
Beiträge: 487
Registriert: 8. Jul 2004 09:51
Kontaktdaten:

Re: Gruppenübung9 A1 eventuell falsch?

Beitrag von AlexB » 10. Feb 2011 13:28

Kineese hat geschrieben:
AlexB hat geschrieben:
Kineese hat geschrieben: Noch eine Frage:
Wann macht man für eine Integerzuweisung den li- bzw addi-Befehl? Hab das jetzt oft schon gesehen und frage mich wieso in den meisten Fällen die addi-Variante gewählt wird.
Das ist egal. Der einzige Unterschied ist, dass li nur eine Pseudoinstruktion ist, addi dagegen eine Hardwareinstruktion. Ein li wird für die Übersetzung in Maschinencode automatisch in ein addi mit $0 übersetzt.
Bin da etwas stutzig, da auf dem MIPS-Referenz-Blatt steht dass der Befehl li keine Pseudoinstruktion ist. :?:
Auf dem MIPS-Referenzblatt ist li nicht als Hardwareinstruktion gekennzeichnet. Damit ist es eine Pseudoinstruktion.
Aktuelle Veranstaltungen
"Hardwaremodellierungssprachen" [SS 2012] - Webseite - Jetzt im TUCaN't anmelden!
TUCaN't - wenn's mal wieder länger dauert.
Bild

steffen12
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 205
Registriert: 14. Okt 2009 16:28

Re: Gruppenübung9 A1 eventuell falsch?

Beitrag von steffen12 » 10. Feb 2011 14:22

Huhu,

ich bin schon mal erleichtert, das ich nicht der einzige bin der sich diese Frage mit "feld" gestellt hat :) ..
Dürfen wir in der Klausur auch Pseudobefehle benutzen?

grüße Steffen

Kineese
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 14. Feb 2008 18:33

Re: Gruppenübung9 A1 eventuell falsch?

Beitrag von Kineese » 10. Feb 2011 14:25

steffen12 hat geschrieben:Huhu,

ich bin schon mal erleichtert, das ich nicht der einzige bin der sich diese Frage mit "feld" gestellt hat :) ..
Dürfen wir in der Klausur auch Pseudobefehle benutzen?

grüße Steffen
Ich kenne es aus GdI 3, dass es gesagt wird ob wir dürfen oder nicht. Denke mal, dass es hier auch so sein wird

Antworten

Zurück zu „Archiv“