- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(5)调用C函数时,注意C函数只保护了几个特定的寄存器,而其他是可以自由使用的。 (6)长整型和浮点数在存储器中存放的顺序是低位字在高地址,高位字在低地址。 (7)如果函数有返回值,返回值存放在累加器A中。 (8)汇编语言模块不能改变由C模块产生的.cinit段,如果改变其内容将会引起不可预测的后果。 (9)编译器在所有标识符(函数名、变量名等)前加下划线“_”。 (10)任何在汇编程序中定义的对象或函数,如果需要在C程序中访问或调用,则必须用汇编指令.global定义。 (11)编辑模式CPL指示采用何种指针寻址,如果CPL=1,则采用堆栈指针SP寻址;如果CPL=0,则选择页指针DP进行寻址。 [例1]在C语言中调用汇编语言函数 C程序:????????????Extern?int?asmfunc?(?);?/*声明外部的汇编子程序*/????????????/*注意函数名前不要加下划线*/????????????int?gvar;?/*定义全局变量*/????????????main(?)????????????{????????????int?i=3;????????????gvar=asmfunc(i);?/*进行函数调用*/????????????} 汇编程序:????????????_asmfunc:? ;函数名前一定要有下划线????????????ADD? *(_ gvar),A? ;加法结果存在A中????????????STL? A,*( _ gvar)? ;将A中的结果存到gvar????????????RETD? ;子程序返回 返回本节 [例2] 用C/C++编写的主程序调用汇编语言编写的32位乘法运算子程序。 虽然用C/C++语言表达32 b乘法运算较为方便和明了,但由于C/C++语言无法很好利用DSP汇编语言为实现各种乘法运算而提供的指令,而使得C/C++程序效率低下。所以这里用汇编语言完成32 b乘法运算,再用C/C++程序调用它。 算法简介 由于16 b定点DSP中没有32 b乘法指令,所以一定要用几种16 b乘法指令结合一定算法来进行32 b乘法运算。一个32 b数在存储器中是分开存储的。高16位存放在低地址,它在进行乘法运算是可以看作一个16 b有符号数;低16位存放在相邻的低地址,他进行乘法运算时可以看作一个16 b无符号数。于是算式如下: x1 x0 y1 y0 × x0×y0 x1×y0 y1×x0 y1×x1 w0 w1 w2 w3 U×U S×U S×U S×S U U U S 其中:S代表符号数;U代表无符号数。 由上算式可见,在32 b乘法运算中,实际上包含了3种乘法运算:U*U,S*U和S*S 。一般的乘法运算指令都是两个带符号数相乘,即S*S。所以在编程时,还要用到以下两条乘法指令: #include stdio.h #includestdlib.h int main( ) {extern int *MPY32(long X32, long Y32) ;声明外部的32b乘法运算汇编子程序,该函数返回指针值 int w[4] int *p int i p=MPY32(00 ;进行函数调用 ;该指针指向数据存储器中,存放相乘结果单元的首地址 for(i=0;i4;i++) { w[i]=*p++ ;将乘法结果存到数组中 printf(“%x\n”,W[i]) ;以十六进制方式输出该数组值 } } 举例:C语言主程序 在主程序中进行MPY32函数调用时,函数传递情形如图2所示。函数MPY32的第一参数存放在A累加器中,第二个参数在堆栈中,高16位在堆栈中的低地址,低16位在堆栈中的高地址。由于MPY32是汇编语言函数,所以编译器不为其分配局部帧,局部帧的分配在汇编程序中进行。 汇编语言函数: .mmregs .bss x1,1 ;为局部帧分配内存空间 .bss x0,1 .bss y1,1 .bss y0,1 .bss w3,1 .bss w2,1 .bss w1,1 .bss w0,1 .text .global _MPY32 ;声明函数名为全局变量 STM #X1,AR2 ;令AR2指向第一个参数存放单元 STM #Y1,AR3 ;令AR3指向第二个参数存放单元 S
您可能关注的文档
- 第一讲化学实验基础要点分析.ppt
- 第6课《罗马法的起源和发展》(人教历史必修1)导论.ppt
- 第一讲环境工程绪言-更新要点分析.ppt
- 第6课《游园惊梦》融合传统与现代的艺术导论.ppt
- 第一讲计算水动力学基本理论及其进展要点分析.ppt
- 第6课《遇难者的第三个电话》导论.ppt
- 第一讲就业形势政策与权益保护要点分析.ppt
- 第6课鸿门宴导论.ppt
- 第一讲快速设计要点分析.ppt
- 第一讲林业经济学简介及价值评估要点分析.ppt
- 2025年中国锻铁围栏市场调查研究报告.docx
- 2025年中国椭圆型市场调查研究报告.docx
- 2025年中国无蔗糖原味豆浆市场调查研究报告.docx
- 2025-2031年中国泛在电力物联网行业发展运行现状及投资潜力预测报告.docx
- 2025年中国制袋机零件市场调查研究报告.docx
- 2025年中国智能除垢型电子水处理仪市场调查研究报告.docx
- 2025-2031年中国甘肃省乡村旅游行业市场深度研究及投资策略研究报告.docx
- 2025-2031年中国干海产品行业市场发展监测及投资战略规划报告.docx
- 2025年中国全铝图解易拉盖市场调查研究报告.docx
- 2025年中国人造毛皮服装市场调查研究报告.docx
文档评论(0)