资源预览内容
第1页 / 共2页
第2页 / 共2页
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
CCS 中C语言程序调用线性汇编 在对DSP进行优化的时候,难免会用到线性汇编,今天找了一上午关于在C中调用线性汇编的程序,发现网上资料很少,这里自己做一个记录。 线性汇编类似于标准的汇编代码,不同的是,线性汇编代码中不需要给出标准汇编代码必须指出的所有信息,线性汇编代码会对这些信息进行选择,或者由汇编优化器确定,从而使得代码的编写较为容易。线性汇编代码不需要给出如下的信息。 (1)使用的寄存器,由优化器分配。 (2)指令是否并行运行,由优化器决定。 (3)指令使用的功能单元,由优化器选择。 (4)流水执行,由优化器确定。 (5)如果代码中没有指定这些信息,汇编优化器会根据代码的情况确定这些信息。与其它的代码产生工具一样,有时需要对线性汇编代码进行修改直到性能满意为止。在修改的过程中,可能要对线性汇编添加更加详细的信息,如指出应该使用哪个功能单元。 线性汇编文件必须包含一些汇编优化器提供有关代码的其他信息。汇编优化器伪指令如下: (1)线性汇编文件的扩展名必须是.sa。 (2)线性汇编代码应该包括.cproc和“.endproc”命令。“.cproc” 和.endproc命令限定优化器优化代码段,“.cproc”放在这段代码的开始位置,“.endproc”放在这段代码的结尾。用这种方式可以设置需要优化的汇编代码段,如程序或函数等。 (3)线性汇编代码中可能包含“.reg”指令,该命令允许使用将要存入寄存器的数值的描述字。当使用“.reg”命令时,汇编优化器为数值选择一个寄存器,这个寄存器与对该值进行操作的指令所选择的功能单元一致。 (4)线性汇编代码中可能包含.trip命令,该命令指出循环的迭代次数。下面是一个简单的例子,用线性汇编实现两个数的相加。main.c的代码:#include int add(short a, short b);int main()short a = 2, b = 3;short result; result = add(a, b); printf(result=%dn, result); return 0;add.sa 的代码:.global _add_add: .cproc a, b.reg cADD a, b, c.return c.endproc 需要注意的是在.global 前面一定要有空格或tab,否则编译时会报错(这个折磨了我很久。)。 另记录CCS中C语言调用汇编代码的参数传递规则:第1,3,5,7,9个参数通过A4, A6, A8, A10, A12寄存器传递第2,4,6,8,10个参数通过B4, B6, B8, B10, B12寄存器传递第10个以后的参数保存在堆栈中返回值保存在A4寄存器返回地址保存在B3寄存器
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号