7.5.1. FRAME ADDRESS

FRAME ADDRESS 指令说明如何为后面的指令计算规范帧地址。 只能在含有 FUNCTIONENDFUNC 指令,或含有 PROCENDP 指令的函数内使用它。

语法

FRAME ADDRESSreg[,offset]

其中:

reg

是规范帧地址所基于的寄存器。 这一般是 sp,除非函数使用了其他帧指针。

offset

是规范帧地址相对 reg 的偏移量。 如果 offset 为 0,则可以省略它。

用法

如果代码改变了规范帧地址所基于的寄存器,或者如果代码改变了规范帧地址相对该寄存器的偏移量,则可使用 FRAME ADDRESS。 必须在改变规范帧地址计算方式的指令后面,立即使用 FRAME ADDRESS

Note

如果代码使用单个指令来保存寄存器及改变堆栈指针,则可以使用 FRAME PUSH 来代替 FRAME ADDRESSFRAME SAVE(请参阅FRAME PUSH)。

如果代码使用单个指令来加载寄存器及改变堆栈指针,则可以使用 FRAME POP 来代替 FRAME ADDRESSFRAME RESTORE(请参阅FRAME POP)。

示例


_fn     FUNCTION        ; CFA (Canonical Frame Address) is value

                        ; of sp on entry to function

        PUSH    {r4,fp,ip,lr,pc}

        FRAME PUSH {r4,fp,ip,lr,pc}

        SUB     sp,sp,#4            ; CFA offset now changed

        FRAME ADDRESS sp,24         ; - so we correct it

        ADD     fp,sp,#20

        FRAME ADDRESS fp,4          ; New base register

        ; code using fp to base call-frame on, instead of sp

Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0204HC
Non-Confidential