⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 附录二 程式语言效率分析.htm

📁 汇编语言 参考书 包含作业与答案 从入门到精通 通俗易懂
💻 HTM
📖 第 1 页 / 共 4 页
字号:
                  <BR><BR>三、BASIC 
                  <BR><BR>&nbsp;10:&nbsp;DIM&nbsp;wd24(23,2),WD48(47,5),table(255),mask(7) 
                  <BR>&nbsp;20:&nbsp;r1=0 <BR>&nbsp;30:&nbsp;r2=0 
                  <BR>&nbsp;40:&nbsp;REM&nbsp;&nbsp;用测试点的方式,每字元分八次处理。 
                  <BR>&nbsp;50:&nbsp;mask(0)=0 <BR>&nbsp;60:&nbsp;mask(1)=2 
                  <BR>&nbsp;70:&nbsp;FOR&nbsp;i=2&nbsp;TO&nbsp;7 
                  <BR>&nbsp;80:&nbsp;mask(i)=mask(i-1)*2 
                  <BR>&nbsp;90:&nbsp;NEXT&nbsp;i <BR>100:&nbsp;INPUT&nbsp;A$ 
                  <BR>110:&nbsp;FOR&nbsp;count=1&nbsp;TO&nbsp;10 
                  <BR>120:&nbsp;K=0 <BR>130:&nbsp;FOR&nbsp;i=O&nbsp;TO&nbsp;23 
                  <BR>140:&nbsp;T=0 <BR>150:&nbsp;FOR&nbsp;j=0&nbsp;TO&nbsp;2 
                  <BR>160:&nbsp;FOR&nbsp;m=0&nbsp;TO&nbsp;7 
                  <BR>170:&nbsp;temp=table(wd24(i,j)) 
                  <BR>180:&nbsp;temp=temp&nbsp;AND&nbsp;mask(m) 
                  <BR>190:&nbsp;IF&nbsp;temp=128&nbsp;THEN&nbsp;r1=192&nbsp;AND&nbsp;r1 
                  <BR>200:&nbsp;IF&nbsp;temp=64&nbsp;THEN&nbsp;r1=48&nbsp;AND&nbsp;r1 
                  <BR>210:&nbsp;IF&nbsp;temp=32&nbsp;THEN&nbsp;r1=12&nbsp;AND&nbsp;r1 
                  <BR>220:&nbsp;IF&nbsp;temp=16&nbsp;THEN&nbsp;r1=3&nbsp;AND&nbsp;r1 
                  <BR>230:&nbsp;IF&nbsp;temp=8&nbsp;THEN&nbsp;r2=192&nbsp;AND&nbsp;r2 
                  <BR>240:&nbsp;IF&nbsp;temp=128&nbsp;THEN&nbsp;r2=48&nbsp;AND&nbsp;r2 
                  <BR>250:&nbsp;IF&nbsp;temp=64&nbsp;THEN&nbsp;r2=12&nbsp;AND&nbsp;r2 
                  <BR>260:&nbsp;IF&nbsp;temp=32&nbsp;THEN&nbsp;r2=3&nbsp;AND&nbsp;r2 
                  <BR>270:&nbsp;NEXT&nbsp;m <BR>280:&nbsp;wd48(K,T)=r1 
                  <BR>290:&nbsp;wd48(K,T+1)=r2 <BR>300:&nbsp;wd48(K+1,T)=r1 
                  <BR>310:&nbsp;wd48(K+1,T+1)=r2 <BR>320:&nbsp;T=T+2 
                  <BR>330:&nbsp;NEXT&nbsp;j <BR>340:&nbsp;K=K+2 
                  <BR>350:&nbsp;NEXT&nbsp;i <BR>360:&nbsp;NEXT&nbsp;count 
                  <BR>370:&nbsp;PRINT&nbsp;"FINISHED" <BR>380:&nbsp;END 
                  <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;本程式制作时间为10分钟,执行程式共占12,764字元,执行时间为23,000秒! 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;足证BASIC&nbsp;不适用于点阵处理,由于上述的处理方法是以移位为主,因BASIC&nbsp;没有专用的指令,所以非常不利。现在改用查表方法,再看如何。 
                  <BR><BR>&nbsp;10:&nbsp;REM&nbsp;&nbsp;本程式将24*24的点阵以查表方式转为48*48 
                  <BR>&nbsp;20:&nbsp;rem&nbsp;&nbsp;本程式用quickbasic&nbsp;version&nbsp;4.00&nbsp;microsoft&nbsp;inc. 
                  <BR>&nbsp;30:&nbsp;dim&nbsp;wd24(23,2),wd48(47,2).table(255) 
                  <BR>&nbsp;40:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOR&nbsp;K=1&nbsp;TO&nbsp;100 
                  <BR>&nbsp;50:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T=0 
                  <BR>&nbsp;60:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOR&nbsp;I=0&nbsp;TO&nbsp;23 
                  <BR>&nbsp;70:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOR&nbsp;J=0&nbsp;TO&nbsp;2 
                  <BR>&nbsp;80:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A=TABLE(WD24(I,J)) 
                  <BR>&nbsp;90:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WD48(T,J)=A 
                  <BR>100:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WD48(T+1,J)=A 
                  <BR>110:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NEXT&nbsp;J 
                  <BR>120:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NEXT&nbsp;I 
                  <BR>130:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NEXT&nbsp;K 
                  <BR>140:&nbsp;END 
                  <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;本程式所用对照表与一、同,执行程式占11,642字元,执行时间共计1,800&nbsp;秒。 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;其他的改进方法当然还有,可是看来已接近极限。 
                  <BR><BR>四、PASCAL 
                  <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;PASCAL仅适用于查总表的方式,在我们没有发展出「制表法」以前,几乎要放弃这个试验。现在,且沿用组合语言所用的总表,看其效率如何吧! 
                  <BR><BR>&nbsp;&nbsp;1:&nbsp;PROGRAM&nbsp;PASTABLE; 
                  <BR>&nbsp;&nbsp;2:&nbsp;VAR 
                  <BR>&nbsp;&nbsp;3:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOURCE&nbsp;:PACKED&nbsp;ARRAY[1…24,1…3]&nbsp;OF&nbsp;-128…127; 
                  <BR>&nbsp;&nbsp;4:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJCT&nbsp;&nbsp;&nbsp;&nbsp;:ARRAY[1…48,1…3]&nbsp;OF&nbsp;INTEGER; 
                  <BR>&nbsp;&nbsp;5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TABLE&nbsp;&nbsp;&nbsp;&nbsp;:ARRAY[0…255]&nbsp;OF&nbsp;INTEGER; 
                  <BR>&nbsp;&nbsp;6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I,J,K,N:INTEGER; 
                  <BR>&nbsp;&nbsp;7:&nbsp;BEGIN 
                  <BR>&nbsp;&nbsp;8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOR&nbsp;N:=1&nbsp;TO&nbsp;10000&nbsp;DO 
                  <BR>&nbsp;&nbsp;9:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEGIN 
                  <BR>&nbsp;10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K:=O; 
                  <BR>&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOR&nbsp;I:=1&nbsp;TO&nbsp;24&nbsp;DO 
                  <BR>&nbsp;12:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEGIN 
                  <BR>&nbsp;13:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOR&nbsp;J:=1&nbsp;TO&nbsp;3&nbsp;DO 
                  <BR>&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEGIN 
                  <BR>&nbsp;15:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJCT[K,J]=TABLE[SOURCE[I,J]; 
                  <BR>&nbsp;16:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJCT[K+1,J]=OBJCT[K,J] 
                  <BR>&nbsp;17:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END; 
                  <BR>&nbsp;18:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K:=K+2 
                  <BR>&nbsp;19:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END 
                  <BR>&nbsp;20:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END 
                  <BR>&nbsp;21:&nbsp;end. 
                  <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;本程式制作需时10分钟,空间占11,650字元,执行时间为17秒,较BASIC&nbsp;为佳。 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;显然&nbsp;PASCAL&nbsp;的效率较C及组合语言为差,但若不计总表,程式仅21条,差强人意。 
                  <BR><BR>五、FORTRAN 
                  <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;同样的,FORTRAN&nbsp;也祇能用查表的方法,程式如下: 
                  <BR><BR>&nbsp;&nbsp;1:&nbsp;DIMENSION&nbsp;IT1(24,3(,IT2(48,6),IT3(256) 
                  <BR>&nbsp;&nbsp;2:&nbsp;DO&nbsp;40&nbsp;II=1,10000 
                  <BR>&nbsp;&nbsp;3:&nbsp;DO&nbsp;30&nbsp;I=1,24 
                  <BR>&nbsp;&nbsp;4:&nbsp;M=I+I 
                  <BR>&nbsp;&nbsp;5:&nbsp;DO&nbsp;30&nbsp;J=1,3 
                  <BR>&nbsp;&nbsp;6:&nbsp;K=IT3(IT1(I,J)) 
                  <BR>&nbsp;&nbsp;7:&nbsp;IT2(M-1,J)=K 
                  <BR>&nbsp;&nbsp;8:&nbsp;30&nbsp;IT2(M,J)=K 
                  <BR>&nbsp;&nbsp;9:&nbsp;40&nbsp;CONTINUE 
                  <BR>&nbsp;10:&nbsp;END 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;这段程式也是用查表的方式,制作时间7分钟,执行程式&nbsp;9,959字元,比C稍大,执行速度也较慢,为20秒。另外,在&nbsp;FORTRAN中也没有找到适合的位元控制指令,因此很难再加改进。 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;从上述的试验中,可以看出这几种语言的效率差异。不论用什么方法,组合语言明显地遥遥领先。 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;就制作时间而言,因为程式简单,看不出很大分别。事实上,组合语言的确比较复杂,祇是我们习惯成自然,有了经验,所以制作时显得轻松。 
                  <BR>&nbsp;&nbsp;&nbsp;&nbsp;以下为上述测试的统计表: 
                  <BR>&nbsp;┌────┬────┬────┬──────┬─────┬──────┐ 
                  <BR>&nbsp;│处理方式│程式语言│制作时间│&nbsp;&nbsp;程式空间&nbsp;&nbsp;│执行速度&nbsp;│&nbsp;&nbsp;备&nbsp;&nbsp;&nbsp;&nbsp;注&nbsp;&nbsp;│ 
                  <BR>&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│(分钟)│&nbsp;&nbsp;(字元)&nbsp;&nbsp;│&nbsp;(秒)&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│ 
                  <BR>&nbsp;├────┼────┼────┼──────┼─────┼──────┤ 
                  <BR>&nbsp;│点阵位移│组合语言│&nbsp;&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;970&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7.1&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│ 
                  <BR>&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;4,727&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;29.0&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│ 
                  <BR>&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│basic?│&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;12,764&nbsp;&nbsp;&nbsp;│&nbsp;23,000.0&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│ 
                  <BR>&nbsp;├────┼────┼────┼──────┼─────┼──────┤ 
                  <BR>&nbsp;│查小表法│组合语言│&nbsp;&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;949&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.2&nbsp;│边际效益最高│ 
                  <BR>&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;4,693&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30.0&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│ 
                  <BR>&nbsp;├────┼────┼────┼──────┼─────┼──────┤ 
                  <BR>&nbsp;│查总表法│组合语言│&nbsp;&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;1,441&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.5&nbsp;│速度效益最高│ 
                  <BR>&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;4,575&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18.0&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│ 
                  <BR>&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│pascal&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;11,650&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17.0&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│ 
                  <BR>&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│fortrcn&nbsp;│?7&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;9,959&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20.0&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│ 
                  <BR>&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│basic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;11,692&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;1,800.0&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│ 
                  <BR>&nbsp;└────┴────┴────┴──────┴─────┴──────┘ 
                  <BR><BR></FONT></P></TD></TR></TBODY></TABLE></TD></TR>
        <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></TBODY></TABLE></TD></TR></TBODY></TABLE></CENTER></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -