Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Übungsblatt 3, Aufgabe 7
Reicht es aus, den Code logisch korrekt zu übersetzten oder müssen wir die (eigentlich unnötigen) Speichersprünge mit übernehmen?
Ich hab die Speichersprünge beibehalten ansonsten ist glaub ich die Aufgabe witzlos.
Ich verstehe Zeile 7 und 8 nicht ganz, denn in Zeile 8 wird ja eigentlich der Wert, der in Zeile 7 berechnet wurde, wieder überschrieben. Oder hab ich da was übersehen?
Du hast da was übersehen.
load R0, #0 bedeutet: #0 —> R0
ABER:
store R2, 8(R1) bedeutet: R2 —> 8(R1)
Da wird nix überschrieben, sondern das Ergebnis wird in ein anderes Register kopiert.
Vielen Dank! Dann macht das Sinn :).
Ohne zu wissen, was ihr mit Speicherspruenge meint: Nicht optimieren, sondern zeigen, wie es unter den genannten Bedingungen realisierbar ist.
Ist der Befehl: Add R2, R2, R1 gültig?
Und:
hat der cmp-Befehl nun auch 3 Operatoren und somit der jne-Befehl 2 Operatoren?
ja, hab ich auch so
nein wozu willst bei nem cmp einen dritten operanden
Mal ne Frage: Es wird ja hier ne Folge mit 10 Elementen hintereinander in den Speicher geschrieben. Wie will ich dass denn ohne Offset/Displacement realisieren? Also vor allem in Schleifenform.
Grüße.
speicheradresse in ein register packen. addition auf speicheradresse ausführen
Aber ich dachte genau das ist doch Displacement.
Ja. Du sollst lediglich die ‘fertige’ Adressierungsart vermeiden und sie selbst nachbauen, eben durch Laden der Basis und explizite Addition des Offsets.
Ah cool cool, danke
Frage
Mal kurz eine Frage zu den gegebenen Code:
Was bedeutet 4(R1) oder 8(R1) ?
Siehe Vorlesung 2.1.3
-.- okay, gesehen und wieder vergessen xD
Danke für die Antwort
Stimmt das?
Immediate meint die unmittelbare Adressierung eines Operanden wie beispielsweise im Befehl [m]add R1 R2 #5[/m] der Wert 5 und ist in dieser Aufgabe erlaubt.
Dass es vom Typ einer Register-Register-Architektur sein muss hat damit nichts zutun und dieser Umstand schreibt nicht explizit vor, dass alle Operanden Register mit Werten sein müssen.
Ich muss also den Wert 5 nicht vorher in ein Register schreiben, bevor ich ihn in einer arithmetischen Operation verwende?
so hab ich es zumindest auch
Den loop kann ich aber drin lassen oder?
Es ging ja nur um den add und store Befehl und das aufspalten der 4(R1) 8(R1)…