C程序调用ARM汇编子程序,要做的首要作业有两个:一是在C程序顶用关键字EXTERN声明ARM汇编子程序的函数原型(C程序是函数结构的程序设计风格),声明该函数的完成代码在其他文件中;二是在ARM汇编子程序顶用伪指令EXPORT导出子程序名,而且用该子程序名最为ARM汇编代码段的标识,最后用“MOV PC,LR”指令回来。这样,在C程序中就能够像调用C函数相同调用该ARM汇编子程序了。
无论是C语言中的函数名仍是ARM汇编语言中的标号,其效果相同,都只是起到标明该函数名或标号存储单元开始地址的效果。
具体操作过程如下:
(1)ARM汇编程序中,用该子程序名作为ARM汇编代码段的标识,界说程序代码,最后用“MOV PC,LR”指令回来;
(2)ARM汇编程序顶用伪指令EXPORT导出子程序名;
(3)C程序顶用关键字EXTERN声明该ARM汇编子程序的函数原型,然后就可在C程序中拜访该函数;
(4)函数调用时的参数传递规矩:寄存器组中的【R0—R3】作为参数传递而回来值用寄存器R0回来,假如参数数目超越4个,则运用仓库进行传递。
程序清单如下:
// main.c
#include
extern void my_strcpy(const char *src,char *dest);
int main()
{
char *strsrc = “Welcome to XU”;
char temp[32] = {0};
my_strcpy(strsrc,temp);
printf(“Value of strsrc is: %sn”,strsrc);
printf(“Value of temp is: %sn”,temp);
return 0;
}
// asm.s
area my_strcpy,code,readonly
export my_strcpy
start
ldrb r5,[r0],#1
cmp r5,#0
beq exit
strb r5,[r1],#1
b start
exit
mov pc,lr
end
程序在ADS编译环境完美运转成功。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/262569.html