ARM Register

aus RHWiki, der freien Romhacking-Enzyklopädie

Der ARM-Prozessor verfügt über 16 Register, wovon jedes 32 Bit breit ist.

Inhaltsverzeichnis

Überblick

Die Register werden mit r0 - r15 bezeichnet. Die letzten drei (r13-r15) haben spezielle Bedeutungen:

r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
                                          sp  lr  ip=pc

sp = Stack Pointer

Der Stack Pointer wird im THUMB-Modus von den Befehlen push und pop als Stack-Addresse verwendet. In diesem Fall ist der Stack immer Full Descending.

Im ARM-Modus besteht dagegen kein Zwang dieses Register zu benutzen, da dort jedes Register als Stack Pointer verwendet werden kann (ohne Performance-Nachteile).

Siehe auch Stack.

lr = Link Register

Wird auf dem ARM eine Unterprozedur (Subroutine, Call) aufgerufen, so wird die Rücksprungadresse nicht (wie auf anderen Prozessoren) sofort auf den Stack gelegt, sondern nur in das Register lr. Der Call erfolgt mit dem Befehl "bl" (=branch with link). Ein Rücksprung meist mit "bx lr".

Dies kann als Optimierung betrachtet werden, da kleine Prozeduren oft lr gar nicht ändern. Dabei wird dann die Zugriffszeit für den Speicher eingespart, die sonst erforderlich wäre um lr auf den Stack zu sichern.

In größeren Prozeduren kann der Inhalt von lr auch auf den Stack gesichert werden, sodass lr für andere Inhalte zur Verfügung steht. Dies geschieht dann direkt am Anfang der Prozedur mit push.

ip = Instruction Pointer

bzw. pc = Program Counter

Enthält die Addresse des aktuell ausgeführten Befehls. Je nach Modus und Verwendungszweck wird auf den Wert noch eine Zahl aufaddiert. z.B. +4 in THUMB beim Lesen des pc.

Der pc kann zum Springen an andere Adressen auch direkt geändert werden. Allerdings sind die branch-Befehle hierfür komfortabler.

Weitere Besonderheiten

Die Register r0 - r4 werden standardmäßig zur Übergabe der Parameter an Subroutinen verwendet. In r0 wird (falls vorhanden) der Rückgabewert gespeichert.

Im THUMB-Modus können nur r0 bis r7 voll zugegriffen werden. Da aus diesem Grund r8 bis r12 weniger frequentiert genutzt werden, sind dort meist globale Zeiger abgelegt.

Siehe auch

'Persönliche Werkzeuge