汇编语言和C语言混合编程接口技术.docVIP

  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文档。上传文档
查看更多
汇编语言和C语言混合编程接口技术

汇编语言和C语言混合编程接口技术   摘 要:随着网络与通信技术的发展,正在涌现出大量新的嵌入式系统,通常情况用C或者C++完成大部分的编程任务,仅有初始化部分用汇编语言完成。本文主要研究汇编语言和C语言混合编程,在当前程序开发领域提供了新的途径。 关键词:汇编程序;C语言;编排技术 1 引言 在平常编写程序时,我们一般都希望选择C、Pascal、Basic等这样的高级语言来编写,高级语言由于有编译器的支持,它们的语法更接近于自然语言,表达能力强,使用灵活,具有强大的库函数,更重要的是高级语言与机器无关,可移殖性较好,这样使程序开发周期比较短,省时省力。为了提高程序运行速度,或直接访问硬件,用汇编语言编程可以提高程序的运行效率。为了既能缩短程序开发周期,又能保证程序的执行效率,较好的解决办法是程序的框架或主体部分用C语言编写,要求执行效率高的部分用汇编语言编写。这里就涉及到了混合编程的问题,这种混合编程的方法将C语言和汇编语言的优点结合起来,所以成为目前单片机开发最流行的编程方法。混合编程的关键是解决好高级语言与汇编语言的接口问题,可采用两种方法:一是使用嵌入式汇编,即在高级语言的语句中直接使用汇编语句,这种方法比较简洁直观,但功能较弱;另一种方法是独立编程,分别产生各自的目标文件,然后经过连接,形成一个完整的程序。 2 汇编语言和C语言程序的变量相互调用 在一个工程中,一般都会由多个汇编文件和多个C/C++程序文件有机组成。在这些汇编文件和C/C++文件之间就存在变量相互访问和函数相互调用的问题。内嵌汇编不用单独编辑汇编语言文件,比较简洁,但是有诸多限制,当汇编的代码较多时一般放在单独的汇编文件中。这时就需要在汇编和C之间进行一些数据的传递,最简便的办法就是使用全局变量。 2.1 汇编程序中访问C程序变量 在C/C++程序中声明的全局变量可以被汇编程序通过地址间接访问。具体访问方法/步骤如下: ①C/C++程序中声明全局变量;②在汇编程序使用IMPORT/EXTERN伪指令声明引用该全局变量;③使用LDR伪指令读取该变量的内存地址;④根据该数据的类型使用相应的LDR或STR指令读取或设置该变量的值。对于无符号变量,使用LDRB/STRB访问char;使用LDRH/STRH访问short;使用LDR/STR访问integer。对于有符号数,使用LDRSB/LDRSH。 在汇编的源程序中调用C语言风格的字符串需要使用IMPORT伪操作。IMPORT相当于C语言中的extern关键字,告诉编译器引用的符号不是在本文件中定义的,而是在其他的源文件中定义的。 伪操作的格式: IMPORT symbol[,WEAK] symbol是声明的符号的名称;[,WEAK]指示编译器如果发现symbol在所有的源文件中都没有找到,那么它也不会产生任何的错误信息。 2.2 C程序中访问汇编程序变量 在汇编程序中声明的数据可以被C/C++程序所访问,具体访问方法/步骤是:在汇编程序中用EX-PORT/GLOBAL伪指令声明该符号为全局标号,可以被其他文件应用;C/C++程序中定义相应数据类型的指针变量;对该指针变量赋值为汇编程序中的全局标号,利用该指针访问汇编程序中的数据。 3 汇编语言和C语言程序相互调用 3.1 在C程序中调用汇编函数 在C程序中调用汇编函数一般情况下,在C中要调用一个汇编编写的函数,需要首先在C语言中声明此函数的函数原型,同时C语言希望所有的外部标号均以下划线/_0开头,如果汇编模块中定义的函数及变量准备供C调用,应以下划线开头。如若有函数F_Sub,要定义为供C调用的函数,在汇编程序中应定义为PUBLIC _F_Sub。因为C语言区别对待大小写字母,所以在编写准备与C模块相连接的汇编模块时,应该注意符号名的大小写,以便保持一致。以下是在C中调用汇编程序的实例: //C语言主函数main() void F_Sub(void); //声明要调用的函数的函数原型,此函数无参数传递 intmain(void){ while(1) F_Sub(); //调用汇编函数 return 0; } //汇编子函数F_Sub() .CODE . PUBLIC _F_Sub _F_Sub: NOP RETF 以上程序在IDE集成开发环境下编译连接后即可运行。 3.2 在汇编程序中调用C函数 在汇编函数中要调用C语言的子函数,应该根据C函数原型所要求的参数类型,分别把参数压入堆栈后,再调用C函数。调用结束后还须再进行弹栈,以恢复调用C函数前的堆栈指针。以

文档评论(0)

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

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

1亿VIP精品文档

相关文档