深圳市华胄科技有限公司 >> MCU专题 >> 单片机编程


Keil C51使用教程---代码效率(七)



提交者 华胄斑竹  在  2008-5-23 13:55:39 

上一篇 下一篇
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



单片机教程,五系列(55讲)电子书全集下载

论坛精选:
■ 单片机c语言,10小时学会C 语言 (一)
第一章 C 语言简介与Turbo C 的使用
■ 单片机c语言,10小时学会C 语言 (二)
第二章 C 程序的结构
■ 单片机c语言,10小时学会C 语言 (三)
第三章 常数与变数
■ 单片机c语言,10小时学会C 语言 (四)
第四章 基本输出入函式
■ 单片机c语言,10小时学会C 语言 (五)
第五章 流程图与抉择指令
■ 单片机c语言,10小时学会C 语言 (六)
第六章 循环与自动重复
■ 单片机c语言,10小时学会C 语言 (七)
第七章 数组与指针
■ 单片机c语言,10小时学会C 语言 (八)
第八章 函数与呼叫
■ 单片机c语言,10小时学会C 语言 (九)
第九章 档案存取

1 楼  提交者:Guest 在 2008-5-25 22:43:53
dsadsadsadsa
2 楼  提交者:Guest 在 2008-6-5 12:22:27
怎么隐藏 啊
3 楼  提交者:Guest 在 2008-6-6 1:42:24
无内容
4 楼  提交者:Guest 在 2008-6-7 14:25:14

5 楼  提交者:Guest 在 2008-6-13 18:36:04
kank
6 楼  提交者:Guest 在 2008-7-18 16:38:58
7 楼  提交者:王生 在 2008-7-20 9:43:37
DGDG
8 楼  提交者:Guest 在 2008-7-21 14:34:03
test怎么隐藏 啊
9 楼  提交者:Guest 在 2008-7-25 15:27:30
...........
10 楼  提交者:Guest 在 2008-7-25 17:14:28
谢谢
11 楼  提交者:Guest 在 2008-7-25 23:24:05
1`
12 楼  提交者:Guest 在 2008-7-26 10:39:31
13 楼  提交者:Guest 在 2008-7-28 13:53:56
wo kan
14 楼  提交者:okyihu 在 2008-7-28 15:49:50
dada
15 楼  提交者:Guest 在 2008-7-29 12:43:06
d
16 楼  提交者:Guest 在 2008-7-31 16:14:47
uju
17 楼  提交者:Guest 在 2008-7-31 23:55:25
非凡方法
18 楼  提交者:Guest 在 2008-7-31 23:55:34
非凡方法
19 楼  提交者:Guest 在 2008-8-1 10:25:55
hao
20 楼  提交者:Guest 在 2008-8-1 19:05:02
21 楼  提交者:Guest 在 2008-8-2 19:49:57
哈哈
22 楼  提交者:Guest 在 2008-8-10 15:35:55
好,多谢了!
23 楼  提交者:Guest 在 2008-8-11 20:49:40
jghj
24 楼  提交者:Guest 在 2008-8-14 0:42:33
ok
25 楼  提交者:Guest 在 2008-8-21 15:13:34
kan kan  
26 楼  提交者:Guest 在 2008-8-31 2:04:35
hao 
27 楼  提交者:Guest 在 2008-9-2 10:15:51
学习
28 楼  提交者:Guest 在 2008-9-3 20:23:13
rewrwr
29 楼  提交者:Guest 在 2008-9-4 9:28:11
hao
30 楼  提交者:Guest 在 2008-9-5 9:10:10
好好好哈哈哈
上一篇 下一篇
当前第〖1〗页 共有8页 转到第 1 2 3 4 5 6 7 8