发 帖  
原厂入驻New

Keil C51使用教程---代码效率

2008-10-6 18:30:35  2729
分享

Keil C51使用教程---代码效率

C51程序编译生成汇编代码的效率,是由许多因素共同决定的,对于Keil C51,主要受以下两种因素影响:


第一节 存储模式的影响
   
存储模式决定了缺省变量的存储空间,而访问各空间变量的汇编代码的繁简程度决定了代码率的高低。


例如:一个整形变量i,如放于内存18H、19H空间,则++i的操作编译成四条语句:
INC  0x19
MOV  A,0x19
JNZ  0x272D
INC  0x18
0x272D:
而如果放于外存空间0000H、0001H则++i的操作编译成九条语句:
MOV DPTR,0001
MOVX A,@ DPTR
INC A
MOVX @ DPTR,A
JNz  #5
MOV OPTR,#0000
MOVX A,@DPTR
INC A
MOVX @ DPTR,A


就汇编之后的语句而言,对外部存储器的操作较内部存储器操作代码率要低得多,生成的语句为内存的两倍以上,而程序中有大量的这种操作,可见存储模式对代码率的响了。


因此程序设计的原则是


1、存储模式从small-Compact-large依次选择,实在是变量太多,才选large模式。


2、即使选择了large模式,对一些常用的局部的或者可放于内存中的变量,最好放于内存中,以尽量提高程序的代码率。


第二节 程序结构的影响
   
程序的结构单元包括模块、函数等等。同样的功能,如果结构越复杂,其所涉及的操作、变量、功能模块函数等就越多,较之结构性好,代码简单的程序其代码率自然就低得多。
   
此外程序的运行控制语句,也是影响代码率的关键因素,例如:switch -case语句,许多编译器都把它们译得非常复杂,Keil C51也不例外,相对较为简易的Switch-case语句,编译成跳转指令形式,代码率较高,但对较为复杂的Switch-Case,则要调用一个系统库函数?C?ICASE进行处理,非常复杂。
   
再如if( ),while( ),等语句也是代码相对较低的语句,但编译以后比switch-case要高得多。
因此建议设计者尽量少用switch-case之类语句来控制程序结构,以提高代码率。
除以上两点外,其它因素也会对代码率产生影响,例如:
是否用寄存器传递参数  即NOAREGS选项是否有
是否包括调试信息:即debug选项
是否包括扩展的调试信息:即BJECTEXTEND

0
2008-10-6 18:30:35   评论 分享淘帖
1 个讨论
{:7:}
2013-4-17 07:59:36 评论

举报

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发表新帖
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表