新闻中心

EEPW首页>嵌入式系统>设计应用> C程序访问ARM汇编程序中的函数

C程序访问ARM汇编程序中的函数

作者: 时间:2016-11-21 来源:网络 收藏
C程序调用ARM汇编子程序,要做的主要工作有两个:一是在C程序中用关键字EXTERN声明ARM汇编子程序的函数原型(C程序是函数结构的程序设计风格),声明该函数的实现代码在其他文件中;二是在ARM汇编子程序中用伪指令EXPORT导出子程序名,并且用该子程序名最为ARM汇编代码段的标识,最后用“MOV PC,LR”指令返回。这样,在C程序中就可以像调用C函数一样调用该ARM汇编子程序了。

无论是C语言中的函数名还是ARM汇编语言中的标号,其作用一样,都只是起到表明该函数名或标号存储单元起始地址的作用。

本文引用地址: //m.amcfsurvey.com/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编译环境完美运行成功。



评论


技术专区

关闭