2012-06-07 13 views
5

Auf Intel-Plattformen wird BP verwendet, um auf den Anfang des Stapelrahmens zu zeigen und auf die Argumente [bp+0x??] und lokale Variablen [bp-0x??] zuzugreifen.Was entspricht dem BP-Register (Frame Pointer) auf ARM-Prozessoren?

Welches Register wird in ARM verwendet? Oder basiert die Adressierung nur auf SP?

[Ich habe keine Infrastruktur zu kompilieren und zu disassemblieren, um es selbst zu sehen. Mit Bezug auf AAPCS half mir auch nicht]

+0

Es gibt kein Äquivalent für ** AAPCS ** (2003); das ältere ** APCS ** hat R11 als 'FP' im ARM-Modus. Da ARM mehr Register hat, ist es normalerweise nicht notwendig, Locals über den Stack/Frame zu indizieren. –

Antwort

7

Was Sie suchen, ist der Frame Pointer. Im Allgemeinen fungiert R7 als Rahmenzeiger im THUMB-Modus und R11 fungiert als Rahmenzeiger im ARM-Modus. Es liegt jedoch im Ermessen des OS, diese Konvention zu ändern, wenn es dies wünscht.

lesen here

+3

Beachten Sie, dass dies ein ABI-Problem und kein Prozessorproblem ist. (Dem Prozessor ist es egal, welches Register Sie verwenden.) Unterschiedliche Betriebssysteme können die Dinge anders machen. –

+0

Danke @RaymondChen. Ich habe meine Antwort aktualisiert, um Ihre (korrekten) Ansichten wiederzugeben –

+2

... und wenn Sie einen Stack-Pointer-Register haben, brauchen moderne Compiler keine Frame Pointer (FP); Sie kennen das Layout des Stapels und können daher vom SP aus indizieren, um alles zu bekommen, was sie für den Zugriff vom FP benötigen. Ein FP ist also wirklich optional, abhängig von Ihrem Compiler. –

Verwandte Themen