网站大量收购独家精品文档,联系QQ:2885784924

DSP系统实验07-C语言和汇编语言的混合编程[精品].ppt

DSP系统实验07-C语言和汇编语言的混合编程[精品].ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DSP系统实验07-C语言和汇编语言的混合编程[精品]

C语言和汇编语言的 混合编程 汇编语言编程 优点:可以充分地控制处理器的功能,为人工映射算法构成最有效的程序 缺点:编码效率低、可维护性和移植能力差 C/C++语言编程 优点:编码效率高、可维护性和移植性好 缺点:速度慢、存储器利用效率低 混合编程 C语言和汇编语言的混合编程 以TMS320C2x/C2xx/C5x的C编译器为例 1 C语言的存储器模型 2 C语言的寄存器规则 3 C语言的函数调用规则 4 C与汇编语言的接口 * C语言和汇编语言的混合编程?C语言的存储器模型 1 C语言的存储器模型 C编译器产生的段 段名称 段内容 存储器类型 页 已初始化段 .text 可执行代码和浮点常数 ROM或RAM 0 .cinit 已初始化的全局变量和静态变量的列表 ROM或RAM 0 .switch 用于多开关语句的跳转列表 ROM或RAM 0 .const 已初始化的字符串、全局常量和静态常量 ROM或RAM 1 未初始化段 .bss 全局和静态变量 RAM 1 .stack 软件堆栈 RAM 1 .system 动态存储空间 RAM 1 * C语言和汇编语言的混合编程?C语言的存储器模型 C系统堆栈(软件堆栈) 堆栈的作用 分配局部变量 向函数传递参数 保存函数的返回地址 保存处理器的状态 保存寄存器 保存暂时结果 堆栈的大小 默认大小为 1k字,链接时可用-stack size改变大小 编译器、链接器没有提供检查堆栈溢出的方法,堆栈溢出会破环运行环境,导致程序失败,因此,要确保有足够大的空间用于堆栈的扩展 堆栈的管理 堆栈从低地址向高地址增长 AR1:堆栈指针(SP),SP指针指向堆栈的下一个可访问单元 AR0:结构(frame)指针(FP),指向当前结构的开始处,函数调用时,函数的局部变量会在栈顶创建一个新的frame * C语言和汇编语言的混合编程?C语言的存储器模型 动态存储空间(.system段) 用于运行时为变量动态分配存储器,malloc、calloc、realloc、free 总是采用间接寻址来访问,即用指针来访问 默认大小为1k字 链接时可用-heap size改变大小 * C语言和汇编语言的混合编程?C语言的寄存器规则 2 C语言的寄存器规则 寄存器使用、保存规定 编译器如何使用寄存器 函数调用时如何保护寄存器值 寄存器 用处 被调函数保护 AR0 结构指针 Yes AR1 堆栈指针 Yes AR2 局部变量指针 No AR2~AR5 表达式分析 No AR6~AR7 寄存器变量 Yes ACC累加器 表达式分析/返回值 No P 表达式分析 No T 表达式分析 No * C语言和汇编语言的混合编程?C语言的寄存器规则 状态位域 保留值是在进入一个函数或从一个函数返回时,编译器期望的该位域的值 短横线表示编译器不期望一个特定的值 被修改栏表明编译器代码产生器是否曾修改该位域 域 名称 保留值 被修改 ARP 辅助寄存器指针 1 Yes C 进位位 — Yes DP 数据页 — Yes OV 溢出位 — Yes OVM 溢出模式 0 No PM 乘积移位模式 0 No SXM 符号扩展模式 — Yes TC 测试位 — Yes * C语言和汇编语言的混合编程?C语言的寄存器规则 堆栈指针、结构指针和局部变量指针 堆栈指针SP AR1——堆栈指针SP,指向堆栈的下一个可访问单元 堆栈从低地址向高地址增长 结构(frame)指针FP 当一个函数要求局部存储时(如局部变量、暂存单元),它将在堆栈中建立自己的操作空间(局部结构),该局部结构在函数进入时在堆栈中建立分配,在函数返回时释放分配 AR0——结构指针FP,指向当前结构的开始处 FP指向的局部结构的第一个单元被用作暂时存储单元,以允许寄存器之间的数据传输,且对于C函数的重入是必须的 局部变量指针LVP AR2——局部变量指针LVP 所有存储在局部结构中的对象,包括参数,都通过LVP进行间接访问 * C语言和汇编语言的混合编程?C语言的寄存器规则 寄存器变量 寄存器变量是局部变量,位于寄存器中(不是存储器中)的编译器的临时变量 编译器使用这些寄存器变量的方式取决于是否使用了优化器 表达式分析寄存器 表达式分析寄存器用于计算表达式的值并保存临时的结果 表达式分析寄存器的内容在被调函数中不被保护 任何用于临时存储的表达式分析寄存器在函数调用前被保存在局部结构中 返回值 函数返回值放在累加器中 * C语言和汇编语言的混合编程?C语言的函数调用规则 3 C语言的函数调用规则 如何产生函数调用 一个函数(父函数)在调用其它函数(子函数)执行以下任务 注意:ARP必须设为1 1)父函数将参数以颠倒的顺序压入堆栈,最右边声明

文档评论(0)

bodkd + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档