解析C语言与ARM汇编与的相互调用以及与C++相互调用.pdf

解析C语言与ARM汇编与的相互调用以及与C++相互调用.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
解析 C 语言与 ARM 汇编与的相互调用以及与 C++ 相互调用 1.汇编程序访问 C 语言全局变量 全局变量只能通过地址间接调用,为了访问 C++++ 语言中全局变量,首先要通过 extern 伪指令引入全局变量,然后将其地址装入寄存器中。 对于 unsigned char类型,使用 LDRB/STRB 访问; 对于 unsigned short类型,使用 LDRH/STRH 访问; 对于 unsigned int 类型,使用 LDR/STR 访问; 对于 char 类型,使用 LDRSB/STRSB 访问; 对于 short 类型,使用 LDRSH/STRSH 访问; 例子: .text .global asmsubrouTIne .extern globvar asmsubrouTIne: LDR R1 ,=globvar LDR R0 ,[R1] ADD R0 ,R0,#2 STR R0,[R1] MOV PC ,LR .end 2.C 程序调用汇编程序 C 程序调用汇编程序首先通过 extern 声明要调用的汇编程序模块, 声明中形参个数要与汇 编程序模块中需要的变量个数一致,且参数传递要满足 ATPCS 规则,然后在 C 程序中调 用。 例子: #include extern void *strcopy (char*d ,char*s);//模块声明 int main () { char*srcstr= “first ”; char*dststr= “second”; strcopy (dststr,srcstr);//汇编模块调用; } .text .global strcopy Strcopy: LDRB R2 ,[R1],#1 STRB R2 ,[R0],#1 CMP R2 ,#0 BNE Sstcopy MOV PC ,LR .end 汇编程序调用 C 程序 在调用之前必须根据 C 语言模块中需要的参数个数,以及 ATPCS 参数规则,完成参数传 递,即前四个参数通过 R0-R3 传递,后面的参数通过堆栈传递,然后再利用 B、BL 指令 调用。 例子: int g (int a,int b ,int c,int d,int e)//C 语言函数原型 { return (a+b+c+d+e); } 汇编语言完成是求 i+2i+3i+4i+5i 的结果; .global _start .text _start: .extern g ;引入 c 程序 STR LR ,{SP ,-#4} !;保存 PC ADD R1 ,R0,R0 ADD R2 ,R1,R0 ADD R3 ,R1,R2 STR R3,{SP ,#-4} ! ADD R3 ,R1,R1 BL g ; 调用 C 函数 g ADD SP ,SP,#4 LDR PC ,[SP],#4 .end return (0 ); C 和 C++之间库的互相调用 昨晚有个朋友问我关于在 C 中调用 C++库的问题, 今天午饭后, 由于脖子痛的厉害而没有 加入到我们组的 “每天一战”的行列中去, 所以正好将 C 和 C++之间的库调用关系做个总 结。 1.extern “C”的理解: 很多人认为“ C”表示的 C 语言,实际并非如此, “C”表示的是一种链接约定,只是因 C 和 C++语言之间的密切关系而在它们之间更多的应用而已。实际上 Fortran 和汇编语言也 常常使用,因为它们也正好符合 C 实现的约定。 extern “C”指令描述的是一种链接约定,它并不影响调用函数的定义,即时做了该声明, 对函数类型的检查和参数转换仍要遵循 C++的

您可能关注的文档

文档评论(0)

171****9186 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档