好记性不如铅笔头

ARM, 操作系统, 编程

《RealView编译工具汇编器指南》摘录:FRAME指令

备注:

1 本部分文档摘录自ARM网站【 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/index.html 】,版权归属于ARM。

2 作者只摘录了部分内容,全面详细的内容清参考ARM网址。

7.5.12. FUNCTION 或 PROC

FUNCTION 指令标记函数的开始。 PROC 是 FUNCTION 的同义词。

语法

label FUNCTION [{reglist1} [, {reglist2}]]
其中:
reglist1
    是由被调用方保存的 ARM 寄存器的可选列表。 如果 reglist1 不存在,并且调试器检查寄存器使用情况,则调试器假定正在使用 AAPCS。
reglist2
    是由被调用方保存的 VFP 寄存器的可选列表。

用法

可使用 FUNCTION 标记函数的开始。 在为 ELF 生成 DWARF 调用帧信息时,汇编器使用 FUNCTION 来标识一个函数的开始。
FUNCTION 将规范帧地址设置为 r13 (sp),并将帧状态堆栈清空。
每个 FUNCTION 指令必须有一个匹配的 ENDFUNC 指令。 切勿嵌套 FUNCTION 和 ENDFUNC 对,并且它们不要包含 PROC 或 ENDP 指令。
如果要使用自己的过程调用标准,可以使用可选的 reglist 参数通知调试器此标准。 并非所有调试器都支持此功能。 有关详细信息,请参阅所用调试器的说明文档。
另请参阅FRAME ADDRESS 到FRAME STATE RESTORE。
Note
FUNCTION 不会自动对齐字边界(或 Thumb 的半字边界)。 如有必要,可使用 ALIGN 确保对齐,否则调用帧将无法指向函数的开始处。 有关其他信息,请参阅ALIGN。

示例

        ALIGN      ; ensures alignment
dadd    FUNCTION   ; without the ALIGN directive, this might not be word-aligned
        EXPORT  dadd
        PUSH       {r4-r6,lr}    ; this line automatically word-aligned
        FRAME PUSH {r4-r6,lr}
        ; subroutine body
        POP        {r4-r6,pc}
        ENDFUNC
func6   PROC {r4-r8,r12},{D1-D3} ; non-AAPCS-conforming function
        ...
        ENDP

7.5.13. ENDFUNC 或 ENDP

ENDFUNC 指令标记符合 AAPCS 的函数的结尾(请参阅FUNCTION 或 PROC)。 ENDP 是 ENDFUNC 的同义词。

Leave a Reply

11 + 16 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据