本程序用keil5实现。
keil4会将C程序的地址设为0x00000000,即一开始就运行C程序了,参数都还没设置好。这个错误我也没深究,因为我自己装的是keil5.
首先需要在汇编代码中给C程序指定参数。如果函数需要4个及4个以下的参数的话,那么把我们需要的参数分别赋值在R0~R3这4个寄存器中即可。
如果多于4个参数,那么既要在堆栈中放入参数了。
设定好sp即堆栈指针的地址,c函数会在该堆栈中取第4个以后的参数。
调用C函数时,C文件不需要声明什么,就是普通的C即可。而汇编要在前面IMPORT 函数名
C语言代码:
int SUM(int result,int a,int b,int c,int d,int e,int f){ return result = a+b+c+d+e+f; }
汇编代码:
AREA EXAMPLE,CODE,READONLY
IMPORT SUM
PRESERVE8
ENTRY ARM
MOV R0,#;result
MOV R1,#;a
MOV R2,#;b
MOV R3,#;c LDR SP,=0X40001000
MOV R4,#;d
MOV R5,#;e
MOV R6,#;f STMFD SP!,{R4,R5,R6}; BL SUM;调用C END