微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM中ADS环境下C语言和汇编语言混合编程及示例

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返回,依次类推。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top