Hallo, kann mir jemand den ersten Assembler Command in einer Startup für ARM7 kurz erläutern: (PC: 0x0000 0000) LDR PC (PC,0x0018) Danke Roland
Das müßte sowas wie "Lade PC mit dem Wert der an der Speicherstelle PC + 0x0018 steht" heißen. Und dort steht in der Regel die Adresse der Reset-Handlers.
Wichtig ist wohl noch der Hinweis, dass der PC, wenn er gelesen wird, die Adresse der aktuellen Instruktion + 0x8 enthält. Im obigen Beispiel wird also der PC mit dem Wert geladen, der an Speicherstelle 0x20 steht. Gruß, Dominic
zu Dominic.R Im Prinzip JA, aber nur dann wenn die Pipeline normal gefüllt ist, bei Sprüngen, Verzweigungen,... wird die Pipeline verworfen und muss neu gefüllt werden. Der PC kann in dem Fall also etwas anderes, viellceiht auch noch altes anzeigen, je nach Status der Pipelinefüllung zum Zeitpunkt des anhaltens.
Der Inhalt von PC wie er als R15 sichtbar ist, ist bei ARMs abhängig vom jeweiligen Befehl und Quelloperanden (links/rechts/dyn.shift) sauber definiert, meist als +8, in Einzelfällen auch als +12. Und ist auch unabhängig von der konkreten Auslegung der Pipeline. Das geht auch nicht anders, da man permanent damit arbeitet. Ursprünglich war das tatsächlich eine direkte Konsequenz der Pipeline und die hat sich von ARM1 von ARM7 auch nicht substantiell verändert. Danach allerdings musste ARM je nach Länge und Abstufung der Pipeline eigens Korrektureinheiten einbauen, um diese ursprünglich sinnvolle weil vereinfachende Arbeitsweise von R15 nachzubilden. Woraus sich mal wieder zeigt, dass es auf lange Sicht meist unvorteilhaft ist, zuviel einer konkreten Implementierung für den Anwender sichtbar zu machen. Denn wenn die Architektur länger lebt als diese Implementierung, dann schiesst man sich damit ins eigene Knie. Auch MIPS hatte mit den delay slots etwas eingebaut, was anfangs nützlich war, sich aber später als nachteilig erwies, da eine superskalare Implementierung damit nur Ärger hat.
Ralph wrote: > zu Dominic.R > Im Prinzip JA, aber nur dann wenn die Pipeline normal gefüllt ist, bei > Sprüngen, Verzweigungen,... wird die Pipeline verworfen und muss neu > gefüllt werden. Der PC kann in dem Fall also etwas anderes, viellceiht > auch noch altes anzeigen, je nach Status der Pipelinefüllung zum > Zeitpunkt des anhaltens. Noe. Andreas hat ja schon drauf hingewiesen, dass es natürlich auch hier wieder Ausnahmen gibt (STR und STM mit PC als Source), aber generell ist der PC in ARMv4/5 als Adresse + 0x8 definiert: When an instruction reads R15 without breaking any of the restrictions on its use, the value read is the address of the instruction plus 8 bytes. Selbst für die Ausnahmen ist der Wert, der bei einem direkten Store von R15 geschrieben wird, Implementation defined, d.h. für eine bestimmte Implementierung (ARM7TDMI, ARM9TDMI, ...) ist der Wert festgelegt, und dann auch immer identisch: Value stored by direct STR, STRT, STM of PC Address of Inst + 12 Gruß, Dominic
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.