- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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++的
您可能关注的文档
- 西餐高端商务套餐菜单.pdf
- 要培养员工的自我安全意识.pdf
- 覆铜介绍和覆铜需要处理好的几个问题和注意事项概述.pdf
- 见习工业工程师题及答案.pdf
- 见习管理制度(2).pdf
- 见习管理制度(3).pdf
- 见证人员培训.pdf
- 见证取样和见证送检记录(钢筋电渣压力焊).pdf
- 规划地类和二调地类转换对应表.pdf
- 规划求解练习.pdf
- 浙江金华市公共资源交易中心永康市分中心编外人员招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 浙江宁波慈溪市政协办公室招考聘用编外工作人员笔试历年典型考题及考点研判与答案详解.docx
- 浙江金华永康市西溪镇人民政府招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 福建南平市公安局建阳分局招考聘用辅警笔试历年典型考题及考点研判与答案详解.docx
- 浙江嘉兴海盐县武原街道基层残疾人工作专职委员(公益岗位)招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 浙江宁波知识产权保护中心招考聘用工作人员笔试历年典型考题及考点研判与答案详解.docx
- 浙江杭州建德市面向2024届普通高校毕业生招考聘用教师(第二批)16人笔试历年典型考题及考点研判与答案详解.docx
- 浙江省台州中学面向2024届普通高校毕业生招考聘用教师12人笔试历年典型考题及考点研判与答案详解.docx
- 湖北师范大学体育学院专任教师招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 重庆市南岸区教育事业单位面向2024届高校毕业生招考聘用114人笔试历年典型考题及考点研判与答案详解.docx
文档评论(0)