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.

