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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren