📄 附录二 程式语言效率分析.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www.wisesoul.net/web/asm/asm/asm07.htm -->
<HTML><HEAD><TITLE>附录二 程式语言效率分析</TITLE>
<META http-equiv=Content-Type content=text/html;CHARSET=GB2312>
<META content="Produced by Doc-2-Doc product, http://www.WinPerTurn.com"
name=WinPerTurn>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
<STYLE>BODY {
LINE-HEIGHT: 20px
}
TD {
LINE-HEIGHT: 20px
}
.Paragraph {
FONT-SIZE: 9pt
}
.9 {
FONT-SIZE: 9pt
}
A:link {
COLOR: #0033cc; TEXT-DECORATION: none
}
A:visited {
COLOR: #0033cc; TEXT-DECORATION: none
}
A:active {
COLOR: #0000ff; TEXT-DECORATION: none
}
A:hover {
COLOR: #ff0000; TEXT-DECORATION: underline
}
</STYLE>
</HEAD>
<BODY bgColor=#f2f2f2>
<DIV align=center>
<CENTER>
<TABLE cellSpacing=0 cellPadding=0 width=706 border=0>
<TBODY>
<TR>
<TD width=706 bgColor=#000000>
<TABLE height=98 cellSpacing=0 cellPadding=6 width="100%" border=0>
<TBODY>
<TR>
<TD width="100%" bgColor=#f2f2f2 height=20>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="100%">
<P class=9 align=right><FONT face=细明体><A
href="http://www.wisesoul.net/web/asm/asm/asm06.htm">上一页</A>
<A
href="http://www.wisesoul.net/web/asm/asm/index.html">目录</A>
<A
href="http://www.wisesoul.net/web/asm/asm/asm08.htm">下一页</A>
</FONT></P></TD></TR></TBODY></TABLE></TD></TR>
<TR bgColor=#dfe0d1>
<TD width="100%" bgColor=#f2f2f2 height=21>
<P align=center><FONT face=细明体><STRONG>附录二 程式语言效率分析</STRONG>
</FONT></P></TD></TR>
<TR bgColor=#f5f7ee>
<TD align=middle width="100%" bgColor=#f2f2f2 height=51>
<TABLE>
<TBODY>
<TR>
<TD>
<P class=Paragraph><FONT
face=细明体><BR>附录二 程式语言效率分析
<BR><BR> 以下为利用ASSEMBLY,BASIC,PASCAL,C,FORTRAN 等程式语言,将一个24x 24之点阵字形,放大成为48x 48,并分别比较其处理速度、占用空间以及制作时间。
<BR> 为了正确计算执行时间,特意作 10,000 次处理,至于指定的24x 24字形,则假设为一空格。
<BR><BR>一、ASSEMBLY
<BR><BR> 组合语言变化无穷,先以一般的作法,用点阵位移来处理。
<BR> 1: PAGE 60, 132
<BR> 2: CG SEGMENT
<BR> 3: BUFIN DB 72 DUP(0)
<BR> 4: BUFOT DB 72*4 DUP(0)
<BR> 5: ASSUME CS:CG,DS:CG,ES:CG
<BR> 6: START:
<BR> 7: MOV AX,CG
<BR> 8: MOV DS,AX
<BR> 9: MOV ES,AX
<BR> 10: CLD
<BR> 11: MOV BP,10000 ; 处理10,000次
<BR> 12: S3:
<BR> 13: SUB CX,CX
<BR> 14: MOV BX,CX
<BR> 15: MOV DX,1803H ; 计数用
<BR> 16: MOV SI,OFFSET BUFIN ; 24*24 点阵起始位址
<BR> 17: MOV DI,OFFSET BUFOT ; 预定48*48储存位址
<BR> 18: MVBYTE:
<BR> 19: MOV BH,DL ; 做三列
<BR> 20: MVDB:
<BR> 21: LODSB ; 取原点阵
<BR> 22: MOV BL,AL
<BR> 23: MOV CL,8 ; 做八位元
<BR> 24: MVDB1:
<BR> 25: RCL BL,1 ; 左移一次
<BR> 26: PUSHF ; 保存状态
<BR> 27: RCL AX,1 ; 两字同时左移一次
<BR> 28: POPF ; 取出原移位状态
<BR> 29: RCL AX,1 ; 再一次,得双位点值
<BR> 30: LOOP MVDB1 ; 八次回路
<BR> 31: STOSW ; 存入
<BR> 32: MOV [DI+4],AX ; 上下放大一行
<BR> 33: DEC BH ; 共 3列
<BR> 34: JNZ MVDB
<BR> 35: ADD DI,6 ; 移向次行
<BR> 36: DEC DH
<BR> 37: JNZ MVBYTE ; 共24行
<BR> 38: DEC BP ; 执行10,000次
<BR> 39: JNZ S3 ; 完成
<BR> 40: MOV AX,4C00H
<BR> 41: INT 21H
<BR> 42: CG ENDS
<BR> 43: END START
<BR> 本程式制作时间,为十五分钟。
<BR> 经汇编后,得934 字元的执行程式,执行耗时14.5秒。
<BR> 若将上段程式加以分析,可以发现到此段程式执行时间全部浪费在23至30这一段「回路」中。为了增加速度,可以将空间加大,避开回路,连续执行八次「移位」动作如次:
<BR> 23: RCL BL,1
<BR> 24: RCL AX,1
<BR> 25: SHL AX,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -