当前位置:新励学网 > 秒知问答 > 汇编语言是怎么调用c语言的程序的

汇编语言是怎么调用c语言的程序的

发表时间:2024-07-19 03:08:04 来源:网友投稿

一、参数传递的基本规则(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

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!