ARM中ADS环境下C语言和汇编语言混合编程及示例
时间:08-10
来源:互联网
点击:
b Procedure Call Standard),具体见ATPCS规范。
四、在汇编中调用C的函数
在汇编语言中调用C语言的函数,需要在汇编中IMPORT对应的C函数名,然后将C的代码放在一个独立的C文件中进行编译,剩下的工作由连接器来处理。
下面是一个汇编语言调用C语言函数例子:
C语言文件.c int cFun(int a, int b, int c){ return a+b+c;}
;汇编语言文件.S AREA asmfile, CODE, READONLY
EXPORT cFun
start
mov r0, #0x1
mov r1, #0x2
mov r2, #0x3
bl cFun
nop
nop
b start
END
在汇编语言中调用C语言的函数,参数的传递也是按照ATPCS规范来实现的。
在这里简单介绍一下部分ATPCS规范:子程序间通过寄存器R0~R3来传递参数。
A.在子程序中,使用寄存器R4~R11来保存局部变量。
B.寄存器R12用于子程序间scratch寄存器(用于保存SP,在函数返回时使用该寄存器出桟),记作IP。
C.寄存器R13用于数据栈指针,记作SP。寄存器SP在进入子程序时的值和退出子程序时的值必须相等。
D.寄存器R14称为链接寄存器,记作LR。它用于保存子程序的返回地址。
E.寄存器R15是程序计数器,记作PC
F.参数不超过4个时,可以使用寄存器R0~R3来传递参数,当参数超过4个时,还可以使用数据栈来传递参数。
G.结果为一个32位整数时,可以通过寄存器R0返回
H.结果为一个64位整数时,可以通过寄存器R0和R1返回,依次类推。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)