ARMv7 Byte Adressierung und alignment

Gast #2904348
Lesenswert?
• ▲
▼
Hallo zusammen

Schaue mir derzeit die etwas ältere ARMv7 Architektur genauer an. Nun 
ist mir aufgefallen, dass der Core Byte eigentlich auch Adressierung 
beherscht. Das heisst, er ist in der Lage auch ungerade Adressen im 
Speicher anzusprechen, ist dies korrekt? Oder bin ich da falsch 
gewickelt?

Die Frage geht dahin: Warum ist nun das alignment im Speicher bspw. 
einer Struktur trotzdem von Wichtigkeit?



Kann mir jemand Helfen beim Lösen des Knopfes...?

Vielen Dank!
Grüsse
Markus
Gast #2904640
Lesenswert?
• ▲
▼
>Schaue mir derzeit die etwas ältere ARMv7 Architektur

Was heisst "älter"? ARMv7 ist aktuell -> alle Cortexe.

>Das heisst, er ist in der Lage auch ungerade Adressen im
>Speicher anzusprechen, ist dies korrekt?

Wie sollte er sonst einzelne Bytes laden?
Oder denkst Du, dazwischen wären jeweils 3 Bytes heisse
Luft?

>alignment im Speicher bspw.
>einer Struktur trotzdem von Wichtigkeit?

Bei einzelnen Bytes gibt es kein "Alignment", nur relevant
bei Objekten grösser 1 Byte, wenn nicht-aligned müssen diese
evtl in mehreren Speicherzugriffen geladen werden, ist also langsamer.

--> ARMv7 Architecture Reference Manual.
Gast #2904741
Lesenswert?
• ▲
▼
This is a required field schrieb:
> Was heisst "älter"? ARMv7 ist aktuell -> alle Cortexe.

Ich muss mich präzisieren: Ich meine den ARM7TDMI, dies hat nichts mit 
den neuen Cortex zu tun. Dieser Core hat mittlerweile ausgedient, ist 
auf der offiziellen ARM Seite auch nicht mehr für neue Desgins 
empfohlen!


This is a required field schrieb:
> Wie sollte er sonst einzelne Bytes laden?
> Oder denkst Du, dazwischen wären jeweils 3 Bytes heisse
> Luft?

Nein, natürlich nicht! Man könnte ja auch bspw. Wortweise adressieren 
und einzelne Bytes rausmaskieren? Hat nichts mit heisser Luft zu tun!

This is a required field schrieb:
> Bei einzelnen Bytes gibt es kein "Alignment", nur relevant
> bei Objekten grösser 1 Byte, wenn nicht-aligned müssen diese
> evtl in mehreren Speicherzugriffen geladen werden, ist also langsamer.

Ja, das ist schon klar... und das Reference Manual hab ich selber auch 
gefunden!
#2904763
Lesenswert?
• ▲
▼
Markus schrieb:

> Schaue mir derzeit die etwas ältere ARMv7 Architektur genauer an. Nun
> ist mir aufgefallen, dass der Core Byte eigentlich auch Adressierung
> beherscht. Das heisst, er ist in der Lage auch ungerade Adressen im
> Speicher anzusprechen, ist dies korrekt? Oder bin ich da falsch
> gewickelt?

Die diversen ARM Cores verhalten sich dabei recht verschieden. Man muss 
da also jeweils in die Dokumentation vom Core reinsehen um zu erfahren, 
was genau dabei passiert.

Alte Cores wie ARM2 bis mindestens ARM7TDMI ignorieren die unteren 2 
Bits beim Schreiben. Beim Laden rotieren sie die Daten anhand der 
Adresse. Der Unterschied zwischen Byte- und Word-Loads besteht da 
folglich nur in der Maskierung. Wenn man also ein falsch aligntes Wort 
läd, dann bekommt man das adressierte Byte in Bits 0-7 des Registers, 
und die übrigen Bits des adressierten Wortes entsprechend rotiert. 
Freilich ist das nicht unbedingt das, was man haben will.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3772.html

Bei ARMv7 hängt es auch vom exakten Core ab. Cortex-M0/M1 können es 
nicht, M3/M4 können es.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.