chapter5混合编程 嵌入式教材.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
chapter5混合编程 嵌入式教材.ppt

混合编程;ARM与THUMB的交互;ARM调用THUMB子程序;THUMB调用ARM子程序;与C的混合编程;ATPCS寄存器堆栈规则;参数传递规则;汇编程序访问C语言全局变量;例5.16 汇编程序访问C语言全局变量。 .text .global asmsubroutine .exten globvar @引入C语言中的全局变量globvar asmsubroutine: LDR R1,﹦globvar @读取globvar的地址到R1中 LDR R0,[R1] @读取变量值 ADD R0,R0,#2 STR R0,[R1] MOV PC,LR .end;C程序调用汇编程序的例子;例5.17下列使一个C程序调用汇编程序的串拷贝例子。 C程序为: #include﹤stdio.h﹥ exten void *strcopy(char*d,char*s); int main() ﹛char*srcstr﹦〝First string–source〞; char*dststr﹦〝Second string–destination〞; printf(〝%s\n %s\n〞,srcstr,dststr); strcopy(dststr,srcstr); printf(〝After copying:\n〞); printf(〝%s\n %s\n〞,srcstr,dststr); return(0); ﹜ ARM汇编语言模块: .text .global strcopy Strcopy: @R0指向目的数据串,R1指向源数据串 LDRB R2,[R1],#1 @取字节并修改地址 STRB R2, [R0],#1 @存储字节并修改地址 CMP R2,#0 @检查是否到串尾 BNE strcopy @否,则继续 MOV PC,LR @返回 .end 其中,extern void strcopy(char*d,char*s)为汇编模块声明,strcopy(dststr,srcstr)为汇编模块调用。;汇编程序调用C程序的例子;例5.18定义汇编语言将要调用C的函数功能为返回5个参数之和,其函数原型为: int g(int a,int b,int c,int d,int e) ﹛return a﹢b﹢c﹢d﹢e﹜ 汇编语言要完成的功能使求取i﹢2i﹢3i﹢4i﹢5i的结果,程序如下: .global_start .text _start: .extern g @引入C函数g STR LR,[SP,#–4]! @保存LR ADD R1,R0,R0 @R1﹦2*i(第2个参数) ADD R2,R1,R0 @R2﹦3*i(第3个参数) ADD R3,R1,R2 @R3﹦5*i STR R3,[SP,#–4]! @第5个参数入栈 ADD R3,R1,R1 @R3﹦4*i(第4个参数) BL g @调用C函数g ADD SP,SP,#4 @第5个参数出栈 LDR PC,[SP],#4 @返回 .end 程序执行结束,结果保存于寄存器R0中。

文档评论(0)

yuzongxu123 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档