ARM混合编程:C与汇编的交互指南
需积分: 17 67 浏览量
更新于2024-07-16
收藏 549KB PDF 举报
"ARM汇编与C语言混合编程讲义.pdf"
ARM汇编与C语言混合编程是嵌入式系统开发中的常见实践,这允许开发者利用C语言的高抽象层次和汇编语言的高效性能。在这样的编程模式下,遵循ATPCS(ARM/Thumb过程调用标准)是非常重要的,它规定了不同子程序之间调用的规范,包括寄存器的使用、堆栈管理和参数传递。
1. **寄存器的使用规则**:
- 参数传递:寄存器r0-r3作为参数传递的主要手段,超过4个参数则使用堆栈。r0-r3分别对应A1-A4。
- 局部变量:r4-r11用来保存子程序内部的局部变量,称为V1-V8,调用前后需注意保存和恢复。
- 堆栈指针:r12用作IP,用于子程序返回时出栈;r13(SP)作为堆栈指针。
- 链接寄存器:r14(LR)保存子程序返回地址。
- 程序计数器:r15(PC)用于指示程序执行的下一条指令地址。
2. **堆栈的使用规则**:
- 堆栈类型:遵循满递减(FD)方式,堆栈自高地址向低地址扩展,SP指向栈顶。
3. **参数传递规则**:
- 整数参数:前4个通过r0-r3传递,额外参数使用堆栈。
- 浮点参数:使用FP寄存器传递,根据需要选择一组连续的FP寄存器。
- 返回值:32位整数结果通过r0返回,64位通过r0和r1,浮点数通过F0、D0或S0返回。
4. **汇编程序调用C程序**:
- 汇编程序必须遵循ATPCS,确保调用C函数时参数正确传递。
- 使用`IMPORT`伪指令声明将要调用的C函数,表明其在外部定义。
- 调用C函数使用`BL`(Branch and Link)指令,将下一条指令地址保存到LR寄存器,然后跳转至函数地址执行。
例如,在C代码中定义了一个`add`函数,其在汇编中调用的示例如下:
```assembly
AREA |.text|, CODE, READONLY
ENTRY
; 声明C函数
IMPORT add
; 函数调用准备,假设r0和r1已存入参数
BL add ; 调用add函数,r0和r1作为参数,返回值保存在r0
; 其他汇编代码...
END
```
这个例子展示了如何在汇编程序中调用名为`add`的C函数,将参数存储在r0和r1中,然后通过`BL`指令进行调用,结果将返回到r0寄存器。
混合编程时,理解并遵循ATPCS标准至关重要,因为它保证了不同语言之间的兼容性和调用一致性,使得程序能够正确地传递参数、保存状态并返回结果。
2018-01-27 上传
2013-07-15 上传
2021-11-25 上传
2010-09-16 上传
2017-11-22 上传
2022-06-21 上传
weixin_38744435
- 粉丝: 373
- 资源: 2万+
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常