ZHCADC4A September 2011 – March 2014
至少有两种情况需要标准化布局局部帧并且对由被调用方保存的寄存器进行排序,它们是异常处理和调试。
本节介绍用于以下情形的约定:管理栈、帧的一般布局、由被调用方保存区域的布局。
栈向零增长。SP 指向最上面分配字上方的字;也就是说,分配了 *(SP+4) 处的字,但未分配 *SP 处的字。
使用具有正偏移量的 SP 相对寻址来访问帧中的对象。
编译器可自由分配一个或多个“帧指针”寄存器来访问帧。TI 编译器使用 A15 作为帧指针 (FP)。如已分配 FP,则其值是创建函数帧之前的 SP 值。也就是说,FP 指向当前帧的底部和调用方帧的顶部。帧中的对象是通过具有负偏移量的 FP 来访问的。通过具有正偏移量的 FP 来访问传入实参。
如果帧指针不是函数之间链接的一部分,则由工具链自行决定选择是否使用帧指针、使用哪个寄存器,以及指向何处。然而,一些用于栈展开的虚拟指令假设 A15 指向帧,如上一段所述。如果函数没有帧指针,或者对于使用哪个寄存器或其指向的位置采用不同的约定,则无法使用这些展开指令,并且可能需要效率较低的序列。
函数的栈帧包含以下区域: