ARM混合编程:C与汇编的交互指南
需积分: 17 12 浏览量
更新于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标准至关重要,因为它保证了不同语言之间的兼容性和调用一致性,使得程序能够正确地传递参数、保存状态并返回结果。
点击了解资源详情
点击了解资源详情
107 浏览量
2190 浏览量
2013-07-15 上传
2021-11-25 上传
2010-09-16 上传
107 浏览量
2022-06-21 上传

weixin_38744435
- 粉丝: 373
最新资源
- 计算机组成原理期末试题及答案(2011参考)
- 均值漂移算法深入解析及实践应用
- 掌握npm与yarn在React和pg库中的使用
- C++开发学生信息管理系统实现多功能查询
- 深入解析SIMATIC NET OPC服务器与PLC的S7连接技术
- 离心式水泵原理与Matlab仿真教程
- 实现JS星级评论打分与滑动提示效果
- VB.NET图书馆管理系统源码及程序发布
- C#实现程序A监控与自动启动机制
- 构建简易Android拨号功能的应用开发教程
- HTML技术在在线杂志中的应用
- 网页开发中的实用树形菜单插件应用
- 高压水清洗技术在储罐维修中的关键应用
- 流量计校正方法及操作指南
- WinCE系统下SD卡磁盘性能测试工具及代码解析
- ASP.NET学生管理系统的源码与数据库教程