MIPS Unterschied lw und sw

_Headsh0t_

Ensign
Registriert
Juni 2011
Beiträge
227
Hey,
ich hab ein kleines Verständnisproblem bezüglich des Unterschiedes von load_word und store_word in einem MIPS-Register.

Zu meinen Verständnis:
Um beispielsweise etwas in das Register $t1 zu laden macht man lw $t1, 0($s0)
Im Register $t1 steht also die Adresse 0($s0), hinter welcher z.B. das Wort "ABCD" steht, d.h. in $t1 steht die Adresse die auf "ABCD" verweist, richtig?

Würde aber sw $s0, 0($t1) nicht das gleiche machen wie lw $t1, 0($s0)?
sw $s0, 0($t1) speichert doch das was in $s0 steht an die Speicherstelle 0($t1) also 0($t1) = $s0
lw $t1 0($s0) lädt 0($s0) in $t1 also $t1 = 0($s0)

Wahrscheinlich ist das nicht das gleiche, aber wo ist der Unterschied?
 
Eigentlich sollten die Namen der Befehle schon selbsterklärend sein: load word und store word. lw lädt also einen Wert aus dem Speicher in ein Register und sw schreibt einen Wert aus einem Register in den Speicher.

Im Register $t1 steht also die Adresse 0($s0), [...] richtig?
Nicht richtig. Die Addresse ist 0($s0), also effektiv nur $s0. Wenn an der Addresse $s0 also ABCD steht, steht in $t1 nachher auch ABCD.
 
Nagut, ob in $t1 nun das Wort ABCD oder die Adresse zum Wort steht, ist ja nicht das eigentliche Problem.

Also kann man sagen, wenn ich etwas in ein Register schreiben will (z.B. die Summe einer Addition) muss ich load verwenden. Um das Ergebnis zu speichern, muss ich das Ergebnis mit store in den Speicher schreiben(Damit mein Programm damit arbeiten kann)?
 
Nagut, ob in $t1 nun das Wort ABCD oder die Adresse zum Wort steht, ist ja nicht das eigentliche Problem.
Das ist aber ein gewaltiger Unterschied, weil du ja nicht mit den Werten im Speicher rechnest, sondern mit den Werten im Register.

Also kann man sagen, wenn ich etwas in ein Register schreiben will (z.B. die Summe einer Addition) muss ich load verwenden.
Ich glaube, du musst dir mal eine Befehlsreferenz anschauen. Dann sollte klar werden, dass z.B. die Summe einer Addition sowieso in ein Register geschrieben wird und du es schon explizit in den Speicher schreiben müsstest, damit es da jemals auftaucht. Du schreibst ja
Code:
add $t0, $t1, $t2

Ich weiß nicht, ob/welche Vorerfahrung du mit anderen Architekturen hast, aber Speicherzugriffe sind bei MIPS (zumindest bei dem 'einfachen' MIPS) im Grunde nur explizit mit sw/lw möglich.
 
Zurück
Oben