ARM混合编程:C与汇编的交互指南
需积分: 17 69 浏览量
更新于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标准至关重要,因为它保证了不同语言之间的兼容性和调用一致性,使得程序能够正确地传递参数、保存状态并返回结果。
2012-07-19 上传
2018-01-27 上传
2013-07-15 上传
2021-11-25 上传
2010-09-16 上传
2017-11-22 上传
2022-06-21 上传
weixin_38744435
- 粉丝: 373
- 资源: 2万+
最新资源
- serverlesss-punk
- pwp:测试pagina python
- yezi.rar_图形图像处理_matlab_
- RectuangularByTouch:通过触摸屏创建矩形
- textract:从任何文档中提取文本。 不要糊涂别大惊小怪
- something-awesome:我的COMP6841真棒
- c.zip_系统设计方案_Visual_C++_
- standards:数字生活API标准
- 适用于iOS的浮动条形图-Swift开发
- 大创竞赛之路:备赛资料全攻略
- BibNets:创建和分析书目网络
- qphotoview:基于Qt的照片查看器,专注于摄影师的需求
- asdsw2021:Materiale Corso di Architettura dei Sistemi Distribuiti 2021
- xxy.zip_GDI/图象编程_C/C++_
- Price-fix-crx插件
- 南方跨计算机z80