Ich habe noch eine Frage zur Aufgabe 6.2 aus Übung Nr 6.
Dort ist folgendes Programm, dass ich nicht verstehe:
Start:
lhi r1, 0x10 // hier wird A nach r1 geladen, aber woher weiß ich, dass A in 0x10 liegt?
ori r1,r1,0x2000 // Ist eine oder-Verknüpfung, in wiefern ist diese für das Programm von Bedeutung? Und woher weiß ich was an 0x2000 im Speicher liegt?
lw r2, 4(r1) // hier wird B nach r2 geladen. Woher weiß ich, dass B in 4(r1) liegt? bedeutet das \"r1+4bytes\"? r1 enthält doch aber den Wert A und nicht seine Adresse?!?
A liegt auf 0x102000. Da aber immer nur 16 Bit geladen werden, kommt erst das LoadHI (oberen 16 bit) und dann mit der ORI wir der Rest (die untern 16 Bit) geladen. Ist nen einfacher \"Trick\".
Das A auf dieser Adresse liegt steht da: .data 0x102000
Das mit der 4 erklärt sich durch das .word .
1 Wordlänge sind 32 bit (siehe Aufgabenstellung)= 4 byte. Das nächste Objekt im Speicher ist also 4 byte \"später\".
Und nein, r1 enthält die Adresse von A, wir haben ja nur Konstanten in r1 geladen, die wir (als Programmierer) vorher abgelesen haben. (Wir verwenden ja kein LW!!!)
- Editiert von Krüsty am 21.02.2005, 15:26 -
Wer sich zu wichtig für kleine Arbeiten hält, ist oft zu klein für
wichtige Arbeiten. (Jaques Tati)
Noch eine kleine Frage:
In der Vorlesung hatten wir zu dem Trick ja das \"CAFEBABE\"-Beispiel, wobei mit lhi erst cafe und mit ori babe geladen wird. Nun sind diese Immediates ja auch jeweils 16 bit lang, aber im o.g. Beispiel wird erst 10 und dann 2000 geladen, also 8 und 32 bit, so wie ich es verstehe. Wie kommt das?