无论是C语言中的函数名还是ARM汇编语言中的标号,其作用一样,都只是起到表明该函数名或标号存储单元起始地址的作用。
本文引用地址:
https://www.eepw.com.cn/article/201611/319084.htm 具体操作步骤如下:
(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编译环境完美运行成功。

评论