![DSP系统中C语言和汇编语言的混合编程_第1页](http://file3.renrendoc.com/fileroot3/2021-12/2/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d6/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d61.gif)
![DSP系统中C语言和汇编语言的混合编程_第2页](http://file3.renrendoc.com/fileroot3/2021-12/2/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d6/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d62.gif)
![DSP系统中C语言和汇编语言的混合编程_第3页](http://file3.renrendoc.com/fileroot3/2021-12/2/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d6/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d63.gif)
![DSP系统中C语言和汇编语言的混合编程_第4页](http://file3.renrendoc.com/fileroot3/2021-12/2/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d6/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d64.gif)
![DSP系统中C语言和汇编语言的混合编程_第5页](http://file3.renrendoc.com/fileroot3/2021-12/2/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d6/dc9a70eb-ea1b-4b17-b9fb-a2346ca8e9d65.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c语言和汇编语言的混合编程汇编语言编程优点:可以充分地控制处理器的功能,为人匸映射算法 构成最有效的程序缺点:编码效率低、可维护性和移植能力差 c/c+语言编程优点:编码效率高、可维护性和移植性好缺点:速度慢、存储器利用效率低混合编程以tms320c2x/c2xx/c5x的c编译器为例!c讲雷的心储器:to言的審菇规则 3ci?f冷的函数调用规则4c9a编诰占的接lc卅舌匚匕“今 1 c语言的存储器模型c编译器产生的段段名称段内容储器类型已初始化 段.text可执行代砒和浮点常数rom或ram0cinit已初始化的全局变st和祁态变就 的列衣rom或ram0switch用多开关说的的跳转列衣r
2、om或ram0.const已初始化的7符申、全和rom戒ram1聽段.bss谢和矗态变量ram1.stack软件堆栈ram1.system动态存储空何ram1 c系统堆栈(软件堆栈)堆栈的作用:分配対部变駁向除数传通參数保隋数的更何地川保处艸;b的状态保总保仔啊时储处堆栈的大小戲认人小为1x76h&时呵用-etack see a 4大小器.ttics没fhwmut港出的用4册出会矶h厅环境甘致程序失败因此箋鋼保存足够大的空间用ffflk的m堆栈的管理廉段从低地址向岛地址堆长ari:mnmttsp).sp指针指向堆幔的卜 个可访轲单元-aro:结构(frame)指计(fp)指向十館结构的
3、开始处.附数 调用时函数的会it梅顶创it个新的frame动态存储空间(.system段)用f运行时为变吊动态分配 嶄器malloc、calloc. realloc free总址采用间接寻址來访何即用指针来访问默认大小为你字链接时可用-heap size改变人小2c语言的寄存器规则寄存器使用、保存规定编译器如何使用寄荷器函数调用时如何保护寄存器值用处被调除数保护ar0结构折什yesar1堆栈指针yesar2対部变斌指针noar2*ar5农达式分析noar6-ar7寄器变ftyesacc累加器表达式分析鹿回值nop表达式分析not表达式分析no:旳jt状态位域保留值是在进入一个曲数或从一个曲数返
4、回时译器期望的该位域的值短横线表示编译器不期型一个待定的值被修改栏农明编详器代码产住器是否曾修改该位域域名称保割值被修改arp辅助寄“器指针1yesc进位位yesdp数据页yes0v溢出位一yesovm溢出模式0nopm乘枳移位模式0nosxm符号扩展模式yestc测试位yes号亡畚汇今wt绘“jm;? 堆栈指针.结构指针和局部变量指针 堆栈指针sp ar1堆战折针sp指向堆栈的f-个可访问单尤堆栈从低地址向岛地址増长结构(frame)指针fp为 个幣敌耍求财部“储时(如隔解费岳 暂存单尤)它将 加i栈中的様作空何(局郁结恂).该hlvi构在函b进入时在h栈中建工分配任腐数返何时样放分配aro
5、结构1hifp折向绍构的”处处fp指向的前部结构的第一个单尤被用作和时“储m兀.以允许 寄存器z何的8uk传输h对jc函数的匝入足必须的局冊变鼠指针lvp ar2局部变量折针lvp所冇存储在耐部纠构中的对象.包括参数都通过lvp进行间 接访网寄存ib变量寄存器变试是局部变比位寄存器中(不足存詁器中) 的编译器的临时变最编译器使用这些寄存器变駅的方式取决于是否使用了优 化器表达式分析寄存器表达式分析寄存器用f计算表达式的值并保存临时的结 果&达式分析寄存器的内样在被调旳数小不被保护 任何用f临时”储的衣达式分析寄“器任换数调用询被 保存在局部结构中返回值函数返冋值放在累加器中如何产生函数
6、调用个用数(父曲数)在调用英它曲数(犷函数)执行以 下任务注意,arp必须设为11)父沽数将参数以倾倒的顺序压入堆栈 g 右边声期的 参数第-个压入堆检 最左边的參数最后个爪入堆 栈即垠左边的参数庄栈顶2)父函数调用f负数3)父因数假定从/曲数返冋时.arp将被况为1 4)完成调用后.父叭数以sbrk n (n是压入堆栈的参数个数)将参数弹出堆栈c诒善如汇墙诒龙的混合场士 -浴才的禺釵调用出址; 被调函数如何相应响应被调函数(f函数)需要完成以下任务 3c语言的函数调用规则在函数的入口,arp假定已经设置为41)将返冋地址从硬件堆栈中弹出,并压入软件堆栈中2)将原fp压入软件堆栈3)分配局部结
7、构4)如果/函数中修改了ar6和/或ar7,则将它们压入堆栈,其 它的任何寄存器可能被无保存地修改5)执行该函数的代码6)将返回值放入累加器7)设花arp为ar18)如果ar6和/或ar7被保存,则恢复它们9)释放局部结构分配10)恢奴原fp11)从软件堆栈中复制返回地址并压入硬件堆栈12)返回父函数c语言和汇编语言的混合编程c语言的函数调用规则例沁和兀縞诒玄的瀝合嫡今渚古的圉戟调.附規贬 被调函数的特殊情况y没有将返回地址移到软件堆栈屮 如果被调函数(子函数)没有调用其它函数.或只调用了一 个运行支持函数,乩編讦器知道该函数不会超过8级深度的调 用,即不会发生硬件堆栈的溢出,则就不必将返回地
8、址从硬 件堆栈中弹出,乂压入软件堆栈中没有分配局部结构如果没有局部变虽 也没有使用ltlaro (fp)指向的暂时存 储单尤,则不必分配丿部结构参数和局部变量的访问参数和局部变城通过lvp (ar2)來访问参数总是相对于fp的负偏移萤 局部变量总是相对于fp的正偏移最 4c语言与汇编语言的接口丁独立的c和汇编模块接口在编写汇编语言时必须遵循有关的寄存器观则和调用规 则.否则可能会破坏c的运行环境在编耳独立的汇编程序时.必须注总以卜儿点:无论是c函数述是ii编函数,都必须遵循寄存器使川视则必须保护函数箜用到的儿个专用寄存器,专用寄存器包括:aro (fp) . ar1 (sp)、ar6和ar7:
9、其中.如栗sp正 常使用的话,则不必明确加以保护,即只耍汇编函数在返冋 时并岀压入的对象,实际上就己经保护rsp其它寄存器可以自由使用 如果改变了状态位域的假定值.则函数返回时必须被恢复.arp.必须为1中断程序必须保护所有用到的寄存耦 汇编谄/调用c隨数时.将参数以逆序压入软件堆栈.换数1训用拆弹出堆栈调用c丙数时,c函数只保护儿个&用寄荷器,c函数可能改变兀它 任何寄存器的内容长樓型和浮点数在存储器中心放的顺序是低位字在低地址,高位字 在高地址如果浙数冇返冋值则返回值存放在累加器acc中汇编程序不能改变由c产生的.cinit段的内容,否则可能会引越不可 预测的后果编译器在所有的c标
10、识符(函数名、变最名等)前加下划线v:im此,在编耳汇编程序时,必须住c聊序要访问的对象询加卜呦线 二例如,任c程序中运义了变最x在汇编语吉冲便用时为_x:如果仅在儿编语言中便用的标识符,则不必加卜划线任何在沢编用序中定义的对象或函数,如果需嗖在c程序中访问或 调用则必须jh.global汇编伪指令世明:同样.用序中定义的 对彖或函数,如果術要在汇編程序中访问或调用,在汇编程序中也 必须用.global;】编伪指令川明c语言和汇编语言的混合编程c语言与汇编语言的接口例:c程序main函 数调用一个汇编函数asmfunc,asmfunc函数只有一个参数,该参数与c中的全局变量gvar相加,返冋该
11、结果例中可以不必将返冋地址从硬件堆栈移到软件堆栈中,因为asmfunc函数没有进行别的调用在c程序中使用asm语句嵌入单行的汇编语句优点:简单,在c程序中可以实现c语言无法实现的吃映 件控制功能,如修改中断控制寄存器、中断的是能或无效. 读取状态寄存器和中断标志寄”器等缺点:容易破坏c坏境因为c编译器不对嵌入的汇编语句 进行检测和分析注意在c代码屮嵌入跳转语勺或标识符可能会产生无法预知的结 果不要改变c变扯的值.但可以安全地读仟何变秋的当前值不要嵌入汇编伪指令,这会破坏汇编谄占环境c诒喜和忙编诒才的泯合嫡住今i诲与汇塢语書的撻口c在汇编语言中定义变量.变量名前加下划线二*使用.global声明为全局变量在c程序中声明该变量为外部的,并正常地对它访问在c程序中直接嵌入汇编语句asmasm “;关中斯w/( eint )八在c代码中访问汇编语言变量在c程序中定义全局变虽在汇编语言中使用.global声明为外部变;乙 变届名前加 下划线匚在汇编程序中正常地对变屋访问int讥main()ldi1x i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度礼品包装设计创意授权合同
- 软件公司装修监理合同要求
- 企业级云计算服务解决方案设计与实施
- 粉煤灰销售合同
- 架子工安全施工的协议书
- 农产品质量安全追溯系统建设与合作协议
- 农业综合开发工作指南与规范
- 化学品运输合同
- 三农村社区信息化建设与管理规范
- 公共卫生与防疫服务作业指导书
- 《轨道交通工程盾构施工技术》 课件 项目3 盾构选型
- 造价咨询进度控制措施全
- 物业管理服务房屋及公用设施维修养护方案
- 医疗器械法规培训
- 2023中华护理学会团体标准-注射相关感染预防与控制
- 《数字电子技术》课程说课课件
- 2024河南省郑州市公安局辅警招聘2024人历年高频难、易错点500题模拟试题附带答案详解
- 2024年高素质农民职业技能大赛(农业经理人)赛项考试题库-下(多选、判断题)
- 开发商物业维修合同
- 德育教育教案8篇-范本两篇
- JBT 14685-2023 无油涡旋空气压缩机 (正式版)
评论
0/150
提交评论