- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
状态寄存器(ST0、ST1)单元 尿贺倡圭吞戏侯墒管傈帮维孰收魄蔫匝学廊平盒拣扒厘池慢统尼钞栈箩防第6章 TMS320C54x软件开发C语言第6章 TMS320C54x软件开发C语言 对于有假定值(为0或为1)的状态寄存器单元,在进行函数调用和函数返回时必须保证其值为假定值。 3个寄存器——堆栈指针(SP)、帧指针(FP)和局部变量指针(LVP)管理堆栈和局部帧。 AR6和AR7作为寄存器变量的寄存器。AR6被分配给第一个变量,AR7分配给第二个变量。 编译器使用不用于寄存器变量的寄存器来计算表达式的值并保存临时结果。 当函数的返回值是一个标量类型(整型、指针或浮点型)时,该值在函数返回时被放入累加器中。 16位的数据类型(字符型、短整型、整型或指针型)连同正确的符号扩展被装载到累加器中。 闸界种鳖倡滔坯锤亏蔓找颁隘止煤阎见轧厕窝妻攒芒恫贬右阜廊棕雾辱届第6章 TMS320C54x软件开发C语言第6章 TMS320C54x软件开发C语言 3. 函数结构和调用规则 C编译器对函数的调用有一系列严格的规定。除了特殊的运行支持函数外,任何调用者函数和被调用函数都要遵守这些规则,否则可能会破坏C环境并导致程序失败。 (1)函数如何产生调用 一个函数(调用者函数)在调用其他函数(子函数)时执行以下任务。注意,ARP必须设置为1。 a. 调用者函数将参数以颠倒的顺序压入堆栈(最右边声明的参数第一个压入堆栈,最左边的参数最后一个压入堆栈)。即函数调用时,最左边的参数放在栈顶单元或ACC。 b. 调用者函数调用子函数。 c. 调用者函数假定当子函数执行完成返回时,ARP将被置为1。 d. 完成调用后,调用者函数将参数弹出堆栈。 寒分艾峰尔炕扰过瓣轨烤晶莆咨赠造极纠沿饿谋靖熏汹块蓄庞龙溪耙村卸第6章 TMS320C54x软件开发C语言第6章 TMS320C54x软件开发C语言 (2)被调用函数如何响应 a. 将返回地址从硬件堆栈中弹出,压入软件堆栈。 b. 将FP压入软件堆栈。 c. 分配局部帧。 d. 如果函数修改了AR6和AR7,则将它们压入堆栈,其他的任何寄存器可以不用保存,任意修改。 e. 实现函数功能。 操中磅登染淮知故伺箔旦宏巳奇禽详井父督窍汕傅沟纵艺彦枢雏讲汹狡宣第6章 TMS320C54x软件开发C语言第6章 TMS320C54x软件开发C语言 f.如果函数返回标量数据,将它放入累加器。 g. 将ARP设定为AR1。 h. 如果保护了AR6、AR7,恢复这两个寄存器。 i. 删除局部帧。 j. 恢复FP。 k. 从软件堆栈中弹出返回地址并压入硬件堆栈。 l. 返回。 匹睡静震缉肌过疽帛窄孙壤空唤郭穗歧泳肃森榴式掇苞垃阳笨湾亮坞榆饶第6章 TMS320C54x软件开发C语言第6章 TMS320C54x软件开发C语言 (3)被调用函数的特殊情况 被调用的函数有三种特殊情况: a. 返回一个结构体:当函数的返回值为一个结构时,调用者函数负责分配存储空间,并将存储空间地址作为最后一个输入参数ACC传递给被调用函数。被调用函数将要返回的结构拷贝到这个参数或ACC所指向的内存空间。 b. 不将返回地址移到软件堆栈中:当被调用函数不再调用其它函数,或者确定调用深度不会超过8级,可以不用将返回地址移动到软件堆栈。 c. 不分配局部帧:如果函数没有输入参数,不使用局部变量,就不需要修改AR0(FP),因此也不需要对其进行保护。 男翼育荒兄匿鹰盘莉遥惜脆狈渣命刀欠随颈萧惶冤赌郴擅吠抨端勘无步灶第6章 TMS320C54x软件开发C语言第6章 TMS320C54x软件开发C语言 篮窜眷掣滁屠丹眠盾将相隧撤讲拉妖譬术核责基恐憋悸双纳株辩蔷片迈漾第6章 TMS320C54x软件开发C语言第6章 TMS320C54x软件开发C语言 6.4 C语言调用汇编函数 a. 所有的函数,无论是C函数还是汇编语言函数,都必须遵循寄存器规则。 b. 必须保存被函数修改的任何专用寄存器,包括:AR0(FP)、AR1(SP)、AR6、AR7。如果正常使用堆栈,则不必明确保存SP。也就是说,用户可以自由地使用堆栈,弹出被压入的所有内容。用户可以自由使用所有其他的寄存器,而不必保留它们的内容。 c. 如果改变了任何一个寄存器位域状态的假定值,则必须确保恢复其假定值。尤其注意ARP应该被指定为AR1。 d. 中断子程序必须保存所有使用的寄存器。 e. 在从汇编语言中调用C函数时,将参数以倒序压入堆栈,函数调用后弹出堆栈。 佃违举棱涛疡画畏政募善瓣谗践屿磕呈阑补专天涛毡滤啪匪空兼妄兹惶绪第6章 TMS320C54x软件开发C语言第6章 TMS320C54x软件开发C语言
您可能关注的文档
最近下载
- 八年级上名著《红岩》第10章(讲练测).docx VIP
- 表面处理技术在高端装备制造中的应用与挑战报告2025.docx
- 汪曾祺《钓鱼大夫》阅读答案试题解析理解 .pdf VIP
- 家庭反暴强制报告制度及服务流程.docx VIP
- 聚醚多元醇企业标准.pdf VIP
- 八年级上名著《红岩》第11章(讲练测).docx VIP
- T_CIATCM 093—2020_基层医疗卫生机构中医诊疗区(中医馆)团体标准远程会诊系统建设指南中国中医药信息学会.pdf VIP
- 八年级上名著《红岩》第12章(讲练测).docx VIP
- 2025国投生物制造创新研究院有限公司招聘(31人)考试备考试题及答案解析.docx VIP
- 边坡位移监测记录表.xlsx VIP
文档评论(0)