崇信县门户网站首页百度推广营销页
在C语言中调用汇编文件中的函数,要做的主要工作有两个:
一是在C语言中声明函数原型,并加extern关键字;
二是在汇编中用EXPORT导出函数名,并用该函数名作为汇编代码段的标识,最后用mov pc, lr返回。然后,就可以在C语言中使用该函数了。
从C语言的角度,并不知道该函数的实现是用C语言还是汇编语言。更深的原因是因为C语言的函数名起到表明函数代码起始地址的位置,这个和汇编的label是一致的。
实例代码:
#include <stdio.h>extern void asm_strcpy(const char *src, char *dest);int main()
{const char *s = "welcome to ETC";char d[32];asm_strcpy(s, d);return 0;
}
建立strcpy.s代码,并加入工程中。
;asm function implementationAREA asmfile, CODE, READONLYEXPORT asm_strcpyasm_strcpy
loopldrb r4, [r0], #1 ;address increment after
readcmp r4, #0beq overstrb r4, [r1], #1b loop
overmov pc, lr
END
在这里,C语言和汇编语言之间的参数传递是通过ATPCS(ARM Thumb Procedure Call Standard)的规定来进行的。简单地说,就是如果函数有不多于4个参数,对应的用R0~R3来进行传递,多于4个时借助栈,函数的返回值通过R0来返回