欢迎来到天天文库
浏览记录
ID:57057278
大小:181.00 KB
页数:21页
时间:2020-07-30
《DSP系统实验07-C语言和汇编语言的混合编程课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言和汇编语言的混合编程汇编语言编程优点:可以充分地控制处理器的功能,为人工映射算法构成最有效的程序缺点:编码效率低、可维护性和移植能力差C/C++语言编程优点:编码效率高、可维护性和移植性好缺点:速度慢、存储器利用效率低混合编程C语言和汇编语言的混合编程以TMS320C2x/C2xx/C5x的C编译器为例1C语言的存储器模型2C语言的寄存器规则3C语言的函数调用规则4C与汇编语言的接口C语言和汇编语言的混合编程C语言的存储器模型1C语言的存储器模型C编译器产生的段段名称段内容存储器类型页已初始化段.text可执行
2、代码和浮点常数ROM或RAM0.cinit已初始化的全局变量和静态变量的列表ROM或RAM0.switch用于多开关语句的跳转列表ROM或RAM0.const已初始化的字符串、全局常量和静态常量ROM或RAM1未初始化段.bss全局和静态变量RAM1.stack软件堆栈RAM1.system动态存储空间RAM1C语言和汇编语言的混合编程C语言的存储器模型C系统堆栈(软件堆栈)堆栈的作用分配局部变量向函数传递参数保存函数的返回地址保存处理器的状态保存寄存器保存暂时结果堆栈的大小默认大小为1k字,链接时可用-stacks
3、ize改变大小编译器、链接器没有提供检查堆栈溢出的方法,堆栈溢出会破环运行环境,导致程序失败,因此,要确保有足够大的空间用于堆栈的扩展堆栈的管理堆栈从低地址向高地址增长AR1:堆栈指针(SP),SP指针指向堆栈的下一个可访问单元AR0:结构(frame)指针(FP),指向当前结构的开始处,函数调用时,函数的局部变量会在栈顶创建一个新的frameC语言和汇编语言的混合编程C语言的存储器模型动态存储空间(.system段)用于运行时为变量动态分配存储器,malloc、calloc、realloc、free总是采用间接寻址
4、来访问,即用指针来访问默认大小为1k字链接时可用-heapsize改变大小C语言和汇编语言的混合编程C语言的寄存器规则2C语言的寄存器规则寄存器使用、保存规定编译器如何使用寄存器函数调用时如何保护寄存器值寄存器用处被调函数保护AR0结构指针YesAR1堆栈指针YesAR2局部变量指针NoAR2~AR5表达式分析NoAR6~AR7寄存器变量YesACC累加器表达式分析/返回值NoP表达式分析NoT表达式分析NoC语言和汇编语言的混合编程C语言的寄存器规则状态位域保留值是在进入一个函数或从一个函数返回时,编译器期望的该
5、位域的值短横线表示编译器不期望一个特定的值被修改栏表明编译器代码产生器是否曾修改该位域域名称保留值被修改ARP辅助寄存器指针1YesC进位位—YesDP数据页—YesOV溢出位—YesOVM溢出模式0NoPM乘积移位模式0NoSXM符号扩展模式—YesTC测试位—YesC语言和汇编语言的混合编程C语言的寄存器规则堆栈指针、结构指针和局部变量指针堆栈指针SPAR1——堆栈指针SP,指向堆栈的下一个可访问单元堆栈从低地址向高地址增长结构(frame)指针FP当一个函数要求局部存储时(如局部变量、暂存单元),它将在堆栈中建
6、立自己的操作空间(局部结构),该局部结构在函数进入时在堆栈中建立分配,在函数返回时释放分配AR0——结构指针FP,指向当前结构的开始处FP指向的局部结构的第一个单元被用作暂时存储单元,以允许寄存器之间的数据传输,且对于C函数的重入是必须的局部变量指针LVPAR2——局部变量指针LVP所有存储在局部结构中的对象,包括参数,都通过LVP进行间接访问C语言和汇编语言的混合编程C语言的寄存器规则寄存器变量寄存器变量是局部变量,位于寄存器中(不是存储器中)的编译器的临时变量编译器使用这些寄存器变量的方式取决于是否使用了优化器表
7、达式分析寄存器表达式分析寄存器用于计算表达式的值并保存临时的结果表达式分析寄存器的内容在被调函数中不被保护任何用于临时存储的表达式分析寄存器在函数调用前被保存在局部结构中返回值函数返回值放在累加器中C语言和汇编语言的混合编程C语言的函数调用规则3C语言的函数调用规则如何产生函数调用一个函数(父函数)在调用其它函数(子函数)执行以下任务注意:ARP必须设为11)父函数将参数以颠倒的顺序压入堆栈,最右边声明的参数第一个压入堆栈,最左边的参数最后一个压入堆栈,即最左边的参数在栈顶2)父函数调用子函数3)父函数假定从子函数返
8、回时,ARP将被置为14)完成调用后,父函数以SBRKn(n是压入堆栈的参数个数)将参数弹出堆栈C语言和汇编语言的混合编程C语言的函数调用规则被调函数如何相应响应被调函数(子函数)需要完成以下任务在函数的入口,ARP假定已经设置为11)将返回地址从硬件堆栈中弹出,并压入软件堆栈中2)将原FP压入软件堆栈3)分配局部结构4)如果子
此文档下载收益归作者所有