www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ASM Command ARM7


Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ARM-Fan (Gast)
Datum:

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

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, Schreibfehler von mir.

# fehlte

LDR  PC (PC,#0x0018)


mfg
Roland

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaub, ich hab auch Quatsch erzählt... ;-)

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

Roland

Autor: Dominic R. (dominic)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... was wohl aus der 3-stufigen Pipeline resultiert(?)

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dominic R. (dominic)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast recht Dominic.

Sorry hatte das jetzt mit dem Linkregister verwechselt

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.