您的位置 首页 应用

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

C程序调用ARM汇编子程序,要做的主要工作有两个:一是在C程序中用关键字EXTERN声明ARM汇编子程序的函数原型(C程序是函数结构的程序设计…

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部