- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 4.2 C程序与汇编程序相互调用
4.2 C程序与汇编程序的相互调用 为了使单独编译/汇编的程序(包括C程序、C++程序、ARM汇编程序、Thumb汇编程序)之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS(ARM-Thumb Procedure Call Standard)就是机器代码层次上ARM状态和THUMB状态子程序调用的基本规则。 ATPCS规定了一些子程序之间调用的基本规则。这些基本规则包括子程序调用过程中寄存器的使用规则,数据栈的使用规则,参数的传递规则。 为适应一些特定的需要,对这些基本的调用规则进行一些修改得到几种不同的子程序调用规则,这些特定的调用规则包括: 支持数据栈限制检查的ATPCS 支持只读段位置无关的ATPCS 支持可读写段位置无关的ATPCS 支持ARM程序和THUMB程序混合使用的ATPCS 处理浮点运算的ATPCS 使用ADS的C语言编译器编译的C语言子程序 满足用户指定的ATPCS类型。 而对于汇编语言 程序来说,完全要依赖用户来保证各子程序满足 选定的ATPCS类型。 具体来说,汇编语言子程序必须满足下面三个 条件: 在子程序编写时必须遵守相应的ATPCS规则; 数据栈的使用要遵守ATPCS规则; 在汇编编译器中使用-apcs选项 基本ATPCS规定了在子程序调用时的一些基本规则,包括以下三个方面的内容: 各寄存器的使用规则及其相应的名字; 数据栈的使用规则; 参数传递的规则 寄存器的使用规则: 1. 子程序通过寄存器R0~R3来传递参数。 这时寄存器可以记作: A1~A3 , 被调用的子程序在返回前无需恢复寄存器R0~R3的内容。 2. 在子程序中,使用R4~R11来保存局部变量,这时寄存器R4~R11可以记作: V1~V8 。如果在子程序中使用到V1~V8的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值,对于子程序中没有用到的寄存器则不必执行这些操作。在THUMB程序中,通常只能使用寄存器R4~R7来保存局部变量。 3. 寄存器R12用作子程序间scratch寄存器,记作ip; 在子程序的连接代码段中经常会有这种使用规则。 4. 寄存器R13用作数据栈指针,记做SP,在子程序中寄存器R13不能用做其他用途。 寄存器SP在进入子程序时的值和退出子程序时的值必须相等。 5. 寄存器R14用作连接寄存器,记作lr ; 它用于保存子程序的返回地址,如果在子程序中保存了返回地址,则R14可用作其它的用途。 6. 寄存器R15是程序计数器,记作PC ; 它不能用作其他用途。 7. ATPCS中的各寄存器在ARM编译器和汇编器中都是预定义的。 1.参数个数可变的子程序参数传递规则 对于参数个数可变的子程序,当参数不超过4个时,可以使用寄存器R0~R3来进行参数传递,当参数超过4个时,还可以使用数据栈来传递参数。 在参数传递时,将所有参数看做是存放在连续的内存单元中的字数据。然后,依次将各名字数据传送到寄存器R0,R1,R2,R3; 如果参数多于4个,将剩余的字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。 按照上面的规则,一个浮点数参数可以通过寄存器传递,也可以通过数据栈传递,也可能一半通过寄存器传递,另一半通过数据栈传递。 2.参数个数固定的子程序参数传递规则 对于参数个数固定的子程序,参数传递与参数个数可变的子程序参数传递规则不同,如果系统包含浮点运算的硬件部件,浮点参数将按照下面的规则传递: 各个浮点参数按顺序处理,为每个浮点参数分配FP寄存器。分配的方法是:满足该浮点参数需要的且编号最小的一组连续的FP寄存器。 第一个整数参数通过寄存器R0~R3来传递,其他参数通过数据栈传递。 3.子程序结果返回规则 结果为一个32位的整数时,可以通过寄存器R0返回。 结果为一个64位整数时,可以通过R0和R1返回,依此类推。 结果为一个浮点数时,可以通过浮点运算部件的寄存器f0,d0或者s0来返回。 结果为一个复合的浮点数时,可以通过寄存器f0-fN或者d0~dN来返回。 对于位数更多的结果,需要通过调用内存来传递。 汇编子程序的设计要遵守ATPCS规则,这样才能保证程序调用时参数的正确传递。 在汇编程序中,使用EXPORT伪指令声明本程序段,使得本子程序可以被别的程序调用。在C程序中,使用extern关键词声明引用该汇编程序。 例4-2-1 C程序调用汇编子程序strcopy完成字符串复制功能
您可能关注的文档
- 第1课 雅典城邦兴起=======修改稿.ppt
- 第2章 财务预算编制模式.ppt
- 第2章 电阻类元器件知识全解与电路祥解.ppt
- 第2章 经济管理中计算机应用——数据库与其查询.ppt
- 第2章__基因和染色体关系测试题(答案完全版).doc
- 第24讲 剖切面种类.ppt
- 第2章_数据库创建和管理.ppt
- 第2节 Multisim菜单命令和器件库.ppt
- 第2章_中国电子政务与其发展历程.ppt
- 第2章1 腐蚀电化学基础(电化学腐蚀热力学).ppt
- 2024年沧州市公务员考试行测真题及答案详解(名师系列).docx
- 粮油食品检验人员复习提分资料带答案详解(精练).docx
- 粮油食品检验人员自我提分评估(考点精练)附答案详解.docx
- 粮油食品检验人员全真模拟模拟题附参考答案详解(精练).docx
- 2025年延安市公务员考试行测试卷历年真题附答案详解(突破训练).docx
- 2025年株洲市公务员考试行测试卷历年真题含答案详解.docx
- 2024年枣庄市公务员考试行测真题及完整答案详解1套.docx
- 2024年抚顺市公务员考试行测真题及答案详解(各地真题).docx
- 2025年常州市公务员考试行测真题及一套参考答案详解.docx
- 2023年德州市公务员考试行测试卷历年真题及1套完整答案详解.docx
最近下载
- 林伟贤-魅力口才第1-40集全.ppt
- 海上油气集输油气混输管道浅析.pptx
- 广东省2024年本科普通类(历史)投档情况.pdf VIP
- 路堑高边坡安全专项施工方案.docx VIP
- deform v11安装教程注意前先退出安全管家之类杀毒软件以免过程中拦.pdf VIP
- trnsys太阳能系统详细案例.ppt VIP
- 可摘局部义齿修复工艺技术 第四章 可摘局部义齿的设计及制作流程 第四章 可摘局部义齿的设计及制作流程.pptx VIP
- 卫生巾营销策划方案.doc VIP
- PE聚乙烯焊工考试试卷.doc VIP
- 2025河南工业大学招聘非事业编(人事代理)12人笔试模拟试题及答案解析.docx VIP
文档评论(0)