Forum: Mikrocontroller und Digitale Elektronik ASM Command ARM7


von Roland (Gast)


Lesenswert?

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

von ARM-Fan (Gast)


Lesenswert?

Lade den program counter mit dem aktuellen Wert + 0x0018.

von Roland (Gast)


Lesenswert?

Sorry, Schreibfehler von mir.

# fehlte

LDR  PC (PC,#0x0018)


mfg
Roland

von ARM-Fan (Gast)


Lesenswert?

Ich glaub, ich hab auch Quatsch erzählt... ;-)

von ARM-Fan (Gast)


Lesenswert?

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.

von Roland (Gast)


Lesenswert?

Vielen Dank!

Roland

von Dominic R. (dominic)


Lesenswert?

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

von ARM-Fan (Gast)


Lesenswert?

... was wohl aus der 3-stufigen Pipeline resultiert(?)

von Ralph (Gast)


Lesenswert?

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.

von Andreas K. (a-k)


Lesenswert?

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.

von Dominic R. (dominic)


Lesenswert?

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

von Ralph (Gast)


Lesenswert?

hast recht Dominic.

Sorry hatte das jetzt mit dem Linkregister verwechselt

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
Noch kein Account? Hier anmelden.