文档介绍:第五章基于ARM的程序设计
C与汇编相互调用
ATPCS规则
寄存器使用规则
堆栈使用规则
参数传递规则
在C中调用汇编的函数
在汇编中调用C的函数
在C中调用汇编的函数
在C中调用汇编文件中的函数
在C中声明函数原型,并加extern关键字
在汇编中用EXPORT导出函数名,并用该函数名作为汇编代码段的标识,最后利用 MOV PC, LR 返回
在C中调用汇编的函数
#include <>
extern void asm_strcpy(const char *src, char *dest);
int main( )
{
const char *s = "seasons in the sun";
char d[32];
asm_strcpy(s, d);
printf("source: %s", s);
printf(" destination: %s",d);
return 0;
}
声明汇编函数asm_strcpy
在C中调用汇编的函数
AREA asmfile, CODE, READONLY
EXPORT asm_strcpy 
asm_strcpy
loop
LDRB R4, [R0], #1
CMP R4, #0
BEQ over
STRB R4, [R1], #1
B loop
over
MOV PC, LR
END
汇编语言文件
在汇编中调用C的函数
汇编中调用C函数,需要在汇编中IMPORT 对应的C函数名,然后将C的代码放在一个独立的C文件中进行编译,剩下的工作由连接器来处理。
EXPORT CALLSUM5
AREA Example, CODE, READONLY
IMPORT sum5
CALLSUM5
STMFD SP!, {LR}
ADD R1, R0, R0
ADD R2, R1, R0
ADD R3, R1, R2
STMFD R3, [SP,#-4]!
ADD R3, R1, R1
BL sum5
ADD SP,SP,#4
LDMFD SP, {PC}
END