CCS+中C语言程序调用线性汇编.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CCS中C语言程序调用线性汇编

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 stdio.h int add(short a, short b); int main() { short a = 2, b = 3; short result; result = add(a, b); printf(result=%d\n, result); return 0; } add.sa 的代码: .global _add _add: .cproc a, b .reg c ADD 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寄存器

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档