汇编语言是怎么调用c语言的程序的
一、参数传递的基本规则(ATPCS(ARM—ThumbProcedureCallStandard))
1、参数传递
二、汇编程序、C程序相互调用举例
1、C程序调用汇编程序
汇编程序的设计要遵守ATPCS(ARM—ThumbProcedureCallStandard),保证程序调用时参数的正确传递。在汇编程序中使用EXPORT伪操作声明本程序,使得本程序可以被别的程序调用。在C程序使用extern声明该汇编程序。
下面是一个C程序调用汇编程序的例子。其中汇编程序strcopy实现字符串复制功能,C程序调用strcopy完成字符串复制的工作。
//C程序
#include
externvoidstrcopy(char*d,constchar*s);
intmain()
{
constchar*srcstr=”Firststring-source”;
chardststr[]=”Secondstring-destination”;
printf(“Beforecopying:\n”);
printf(“%s\n%s\n”,srcstr,dststr);
strcopy(dststr,srcstr);
printf(“Aftercopying:\n”);
printf(“%s\n%s\n“,srcstr,dststr);
while(1);
}
;汇编程序
AREAScopy,CODE,READONLY
EXPORTstrcopy
Strcopy
LDRBR2,[R1],#1
STRBR2,[R0],#1
CMPR2,#0
BNEStrcopy
MOVPC,LR
END
2、汇编程序调用C程序
汇编程序的设计要遵守ATPCS,保证程序调用时参数的正确传递。在汇编程序中使用IMPORT伪操作声明将要调用的C程序。下面是一个汇编程序调用C程序的例子。其中在汇编程序中设置好各参数的值。本例中有6个参数,分别使用寄存器R0存放第1个参数,
R1存放第2个参数,R2存放第3个参数,R3存放第4个参数,第5个、第6个参数利用数据栈传送。由于利用数据栈传递参数,在程序调用结束后要调整数据栈指针。
//C程序g()返回6个参数的和
intg(inta,intb,intc,intd,inte,intf)
{
printf(“e=%d\n”,e);
printf(“f=%d\n”,f);
return(a+b+c+d+e+f);
}
;汇编程序调用C程序g()计算6个整数i,2*i,3*i,4*i,5*i,6*i的和
EXPORTf
AREAf,CODE,READONLY
IMPORTg
MOVR0,#1
ADDR1,R0,R0
ADDR2,R1,R0
ADDR3,R2,R0
ADDR4,R3,R0
ADDR5,R4,R0
STRR4,[SP,#-4]!
STRR5,[SP,#-4]!
BLg
ADDSP,SP,#4
ADDSP,SP,#4
STOPBSTOP
END
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇