布鲁斯游戏官方网站

当前所在位置:主页 > 推荐装备 >

C51和汇编的混合编程及其优化

C51和汇编的混合编程及其优化
时间:2011-09-23 08:47 作者:原创 人气:

  电脑编程技巧与维护51和汇编的混合编程及其优化施大发?一,王辉1(1.湖南大学电气与信息工程学院。
  长沙410082;2.湖南机电职业技术学院,长沙410151)摘要:介绍了51和汇编的混合编程背景及其优化方法。关键词:51;汇编;混合编程;程序优化51?2.(1.,410082;2.,410151):51.:51;;;1背景51是一种专门针对5系列微片理器的程序开发工具,它提供了非常丰富的库函数,具有很强的数据处理能力,编程中对5单片机寄存器和存储器的分配均由编译器自动管理,因而,通常用51来编写主程序。然而,有时也需要在程序中调用一些用汇编5编写的予程序,这主要是考虑到下述的几点原因。(1)器件中包含有用汇编语言编写的驱动程序,但是要使用时需要采用51程序完成系统的功能。(2)较为复杂的程序需要采用结构性较强的51开发,但是部分程序段要求较高的处理速度而必须用更简练的汇编语言编写。(3)程序中的部分代码因时序要求严格而不得不使用灵活性更强的汇编语言编写,例如,使用软件模拟串程序时。(4)在以汇编语言为主体的程序开发过程中,如果涉及到复杂的数学运算,往往需要借助语言工具所提供的运算库函数和强大的数据处理能力,这就要求在汇编中调用函数。综合上述的原因,在单片机的开发过程中掌握51和汇编的混合编程方法也是十分必要的。2方法2.1函数名的转换和命名以不同语言编写的程序,即混合编程必须指定参数的传递规则。而函数名称在传递过程中需要进行变化,函数名的转换如表所示。在使用51和汇编共同编写程序时,通常情况下以高级语言编写主程序,由于的结构性较强,这样程序易编写。大多数是用汇编语言编写与硬件有关的程序。
  编写程序时可以将中间结果放到片外中,如果外部代收稿日期:2009?11一19?42一表1函数名的转换说明符号名解释无参数传递或不含寄存器参数的函数名不作改变转入目标文件中,名字只是简单地转为大写形式带寄存器参数的函数名加入“一”字符前钮以示区别表明这类函数包含寄存器内的参数传递2一。对于重入函数加上“一。”字符中前线以示区别它表明该函数包含栈内的参数传递码仅用一次,消耗的时间将会很少,但循环重复使用这些字节消耗的时间将会很大。好的方法是以高级语言编写主程序。而经常用到的中间结果则调用相关的子函数,不论该函数用何种语言编写。
  所有程序运行通过后,返回来优化有缺陷的程序。
  一些编译器可以很容易地生成汇编语言源程序,必须汇编后才得到最后程序;一些编译器允许单行的汇编程序,也可把汇编程序集中在网友认为好玩啊同一文件中。参数通过因定的寄存器传给汇编与51之间提供了一个非常简洁的接,且返回值在寄存器中。2.25函数的参数传递规则和汇编接的关键在于要弄清函数的参数传递规则。51具有特定的参数传递规则。这就为两者的接提供了条件。51函数最多可通过寄存储器传递3个参数,这种传技术的优点是可产生与汇编语言相比的高效代码。如表2所示为利用寄存器传递参数的规则。如果参数较多而使寄存储器不够用时,部分参数将在固定的存储区域内传送,这种混合的情况有时会令读者在弄清每个参数的传递方式时发生困难。如果在源程序中选择了编软件开发与设计表2参数传递的寄存器选择参数类型.一般指针第1个参数76.74一71.2.3第2个参数54.54一7刖,2,3第3个参数32.3无,2,3译控制命令“”,则所有参数传递都发生在同定的存储区域,所使用的地址空间依赖于所选择的存储器模式。这种参数传递技术的优点是传递途径非常清淅对于这个游戏。缺点是代码效率不高。速度较慢。当甬数具有返回值时,也需传递参数,这种返回值参数的传递均是通过内部寄存器完成的。51编译器可使用寄存器传递参数新发布,也可用固定存储器位置或使用堆栈。通过堆栈传递参数,总的来说对更协调并支持重入,但对8051无效本网游这一点优秀,这是因为要保证有大的堆栈才能存取外部。所有操作必须用一对指令,它可能要耗用现有128或256字节中的100字节,而其他软件也需要内部。寄存器中最多传递3个函数。这种参数传递技术产生高效代码,可与汇编程序相媲美。
  下面提供了几个说明参数传递规则的实例。””是第?个参数,在6,7中传递,”¨在6、7中传递,“”在4、5中传递,””在、2、3中传递2(,,)””在4~7中传递,”.不能在寄存器中传递,只能在参数传递段中传递3(10,””在4一7中传递,”...不能在寄存器中传递,必须在参数传递中传递4(1,)参数传递段给出汇编在程序使用的固定存储区,就像参数传递给函数一样。
  参数传递段的首址通过名为“。函数名。”的可符号确定。当传递位值时,使用名为”。函数名。11'.的符号。所有传递的参数放在以首址开始递增的存储区内,函数返回值放入寄存器,这样,51程序与汇编语言的接相当直观,返回值的含义如表3所示。裹3参数传递的定义返回值寄存器说明“进位标志7116、耵高位在6,低位在747高位在4,低位在74~732位格式。指数和符号位在7指针1、也、33放存储器类型,高位在2,低位在1在汇编子程序中,当前选择的寄存器组及寄存器、和都可能改变。当被函数调用时,必须无条件地假定这些寄存器的内容已被破坏。如果在连续定位程序时选择了覆盖,那么每个汇编子程序包含一个单独的程序段是必要的,因为在覆盖过程中,函数间的参量不至于丢失。需要注意的是汇编子程序的数据区甚至可包含在覆盖部分中,但应该注意如下两方面:(1)所有段名必须以51类似的方法建立。(2)每个有局部变量的汇编程序必须指定自己的数据段,这个数据段只能为其他函数访问作参数传递用。所有参数一个接一个被传递,由其他函数计算的结果被保存入栈。
  2.3汇编和的相互调用汇编和的调用与和汇编的混合编程的概念并不相同。但在此处,由于都是为了解决在编程过程中和汇编的综合使用问题,所以归为一类编程序技术加以介绍。汇编和的相互调用可以分以下几种情况。(1)在汇编程序中访问51程序中的变量和函数在汇编程序中,用-就可以访问中变量了。访问数组时,可以用?+偏移量来访问,如一+3访问了数组中的。在汇编程序调用函数时,如果没有参数传递的情况,直接用就可以了。
  如果有参数传递,则函数中最左边的一个天龙网游参数由寄存器给出,其他的参数按顺序由堆栈给出。
  返回值是返回到寄存器或者由寄存器给出的地址。同时注意,为了使汇编语言能访问到语言中定义的变量和函数,必须声明为外部变量,即加前缀。(2)在51程序中访问汇编程序中的变量如果需要在程序中访问汇编程序中的变量,则汇编程序中的变量名必须以下划线为首字符,并且使之成为全局变量。如果需要在程序中调汇编程序中的过程,则过程名必须以下划线为首字符,并且,要根据程序编译时使用的模式是-还是来正确地编写该过程,使之能正确地取得调用函数。(3)5嵌套汇编在程序中还可以直接插入鹪(”搴..),从而实现在语言中内嵌汇编语句。
  该方法有两种实现方式。1)方法:在每个汇编语句前加即可,代码如下:,:.,;2)方法2:把作为关键字,其后的汇编内容的大括号起来即可。
  代码如下:?43?电脑编程技巧与维护,:.,.;2.4混合编程的编译方法由于混合编程中既有51语言,又有汇编语言,所以在进行程序的编译时。需要进行特殊的编译和连接。具体的过程可以使用如下的批处理文件。(1)51.(2)511.(3)511.1“)512.(5)513.(6)5.,.,。,2.3.(7).(8)..+.+1..+2..+3.汀+.51对上述的批处理文件做如下的说明:(1).:51编程的主程序。(2)1.:51编程的函数。(3)1.51:汇编函数。(4)2.51:汇编函数。(5)3.:汇编程序。(6)1,51.,1,,1.,2.,3.;将编译完的51程序和汇编程序连接起来。
  (7):编译成十六进制文件。(8).+1.+.+2。+3.+.51:将所得的连接文件做成一个整体。3优化混合编程总的来讲是用来改善编程的效率,即优化。在混合编程中,还需考虑一些能使程序优化的因素。以下选择对提高程序效率有很大影响:(1)尽量选择小存储模式,以避免用指令。(2)使用大模式应仔细考虑要放在内部数据存储器的变量要求是经常用的,还是用于中间结果的。访问内部数据存储器要比访问外部数据存储器快得多。内部由寄存器组、位数据区和其他用户用””类型定义的变量共享。由于内部容量的限制(128~256字节,由使用的单片机决定),必须权衡利弊以解决访问效率和这些?44?对象的数量之间的矛盾。(3)要考虑操作顺序,完成一件事后再做一件事。(4)注意程序编写细则,例如,若使用(;;)循环。指令比指令更有效,可减少重复循环次数。(5)若编写器不能使用左移和右移完成乘除法,应立即修改.例如。
  左移为乘2。(6)用逻辑取模比用,%操作更有效。(7)因计算使用二进制,仔细选择数据存储器和数组大小可节省操作。(8)尽可能使用最小的数据类型。一51系列是8位机,显然对具有“”类型的对象的操作比“”或类型对象的操作要方得多。(9)尽可能使用“”数据类型。一5免费游戏1系列并不直接支持有符号数的运算,因而51编译器必须产生与之相关的更多的程序代码以解决个问题。(10)尽可能使用局部函数变量。
  编译器总是尝试在寄存器里保持局部变量。这样将循环变量(如和循环中的计数变量)说明为局部变量是最好的。使用“"比“”的对象通常能获得最好的结果。
  4结语使用混合编程的技术,可以很方便地在一些较大的51程序中加入已有的汇编驱动程序。在编写较大的程序时,利用已有的汇编程序一方面可以节约大量的程序开发时间;另一方面在编写驱动程序时,使用汇编语言可以保证部分程序段对时间和稳定性的严格要求。同时,混合编程中的51和汇编语言的使用仍然和独立开发时基本一样,只是在使用不同的语言时,需要注意不同函数之间的调用格式和参数传递规定。参考文献[1]求是科技.单片机一典型模块设计实例导航.北京:人民邮电出版社,2005.[2]李鸿.单片机原理及应用.长沙:湖南大学出版社,2004.作者简介施大发,男(1965一),工程硕士,副教授,研究方向:自动化控制与应用。王辉,男(1960一),博士,教授,硕士生导师,研究方向:智能控制与应用。
  51和汇编的混合编程及其优化作者:施大发,王辉,作者单位:施大发,(湖南大学电气与信息工程学院游戏资料,长沙410082;湖南机电职业技术学院,长沙410151),王辉,(湖南大学电气与信息工程学院,长沙,410082)刊名:电脑编程技巧与维护英文刊名:年,卷(期):2010(4)参考文献(2条)1.李鸿单片机原理及应用20042.网通网游求是科技单片机-典型模块设计实例导航2005。

上一篇:Authorware制作算术测试题
下一篇:AutoCAD结合MATLAB实现公式曲面的精确绘制

最新发布文章

现代教学评价技术在高中信息技术课程中的应用研究
发展性教师评价的理论认识与操作实施
对高职学院学生体质状况与体育活动现状的分析
土木工程计算机辅助设计(CAD)中的虚拟现实技术
对高职院校科研管理工作的认识与建议
多媒体在活动课中大显身手
高校教务管理系统数据库设计与实现
谈网络环境下高校图书馆的教育职能
无线通信仍将引领产业发展潮流--英特尔深圳秋季术峰会有感
多媒体技术和语文教学