[资料分享] C语言设计TMS320C2X/C5X应用程序之函数调用规则

Aguilera   2018-10-24 20:16 楼主
函数调用规则
        定点C编译器也规定了一组严格的函数调用规则。除了特殊的运行支持函数外,任何调用C函数或被C函数所调用的函数都必须遵循这些规则,否则就会破坏C环境,造成不可预测的后果。
       (一)参数传递
        将参数传递给一个C函数时,必须遵循下列规则:
        (1)函数调用前,将多数压入运行堆栈。。
        (2)以逆序传递参数。也就是说。第一个参数(最左边)最后压栈,而最后一个参数(最右边)最先压栈。
        (3)若参数是浮点数或长整型数,则低位字先压栈,高位字后压栈。
        (4)传递结构时,采用多字方式。
        (二)局部帧的产生
        函数被调用时,编译器在运行栈中建立一个帧以存储信息。当前函数帧称为局部帧。C环境利用局部帧来保护调用者的有关信息、传递参数和生成局部变量。每调用一个函数,就建立一个新的帧。
        上面已经介绍,寄存器AR1为SP,AR0为FP,SP指向栈顶,FP指向局部帧。编译器在建立局部帧时完成如下工作:
        (1)从TMS320C2X/C5X的内部堆栈中弹出返回地址,并压人C运行堆栈。
        (2)将旧的FP的内容压人C运行堆栈,并将FP设置为当前的SP。
        (3)增加SP。增加的值等于需要保存的局部变量的字的个数加1,其中,额外的一个字位于帧的开始,用于存储临时变量。
        (4)若函数使用AR6和AN7作为寄存器变量,则将它们的内容压人堆栈,然后装人相应局部变量的地址。
        下面是完成上述工作的TMS320C2X的汇编程序,其中SIZE是局部帧的长度。
        例2.1  调用函数时的初始处理
       POPD * +    ;将返回地址压人C堆栈
        SAR AR0, * +    ;保护旧FP
        SAR AR1, *
        LARK AR0, SIZE
        LAR ARO, * 0 +    ;FP= 旧的SP,SP=SP+ SIZE
        SAR AR6,* +    ;保护AR6
        SAR AR7, * +    ;保护AR7



回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复