ARM汇编与C混编规则详解:参数传递与寄存器使用
需积分: 9 59 浏览量
更新于2024-08-19
收藏 226KB PPT 举报
本文主要探讨的是在Linux环境下,针对ARM架构进行的C语言与汇编语言的混合编程技术。在ARM架构中,由于性能优化的需求,有时会结合C语言的易用性和汇编语言的低级控制来编写程序。混编的关键在于理解和遵守ARM/Thumb Procedure Call Standard (ATPCS)规则,这是ARM体系结构中的调用约定,确保了不同编程层次间的顺畅交互。
ATPCS规则主要包括以下几个方面:
1. 寄存器使用规则:
- 子程序间参数传递通常使用r0~r3(记作A1~A4),最多4个参数后使用堆栈。
- 局部变量存储在r4~r11(V1~V8)寄存器中,需注意保存和恢复。
- r12(IP)用于保存堆栈指针SP,子程序返回时出栈。
- r13(SP)作为常规堆栈指针,r14(LR)作为链接寄存器保存返回地址。
- r15(PC)是程序计数器,控制程序流程。
2. 堆栈使用规则:
- ATPCS采用满递减类型(FD,FullDescending),堆栈地址随数据增长而降低,SP指向最低地址。
3. 参数传递规则:
- 整数参数前4个用寄存器,其余在堆栈中;浮点参数使用连续的FP寄存器。
- 返回值根据数据大小,可能通过r0、r1或其他指定寄存器返回,浮点数通过浮点寄存器F0、D0或S0。
在实际混编中,编写C程序时需确保调用的接口符合ATPCS规则,而在汇编程序中调用C函数则需要预先声明函数并使用BL(Branch and Link)指令。例如,对于一个名为`add`的C函数,汇编程序会先使用IMPORT伪指令声明该函数,然后通过BL指令执行C函数的调用。
限制字符在ARM汇编与C语言混编中起着指导作用,确保了不同层面上的数据存储方式和调用协议的一致性,从而实现高效且兼容的程序设计。理解和掌握这些规则是进行ARM混编编程的基础。
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2011-06-24 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
我的小可乐
- 粉丝: 26
- 资源: 2万+
最新资源
- Study-Circle:这个跨平台的应用程序是使用Flutter制作的,它可能会起到连接社会学习和共同成长的作用
- 一个简易的智能聊天机器人系统.zip
- MiniChickenFolkloric:TCC-UFAM 2020
- matlab心线代码-Multi-Agent-Navigation:多个代理的免费导航
- Whereby-crx插件
- Windows-NT-Native-API.zip_Windows编程_C/C++_
- the-white-rabbit:White Rabbit是基于Kotlin协程的异步RabbitMQ(AMQP)客户端
- 2Ring Extension for Cisco Finesse v4.1.1-crx插件
- 下一个示例会计笔记本
- Design_Park.rar_CAD_Windows_Unix_
- 瑞金医院MMC人工智能辅助构建知识图谱大赛.zip
- skillfactory
- 课程设计之基于HTML+CSS的网页设计.rar
- jokeapp:Spring5Framwork开玩笑的应用程序
- Monster Cards-crx插件
- 完全以SwiftUI编写的带有滑动手势的入门/滑动器。-Swift开发