jz OVR lods buff cmp al,[bx+2] jnz LOD3 ;第三个字节不相等再从头开始 ;有一个HIT匹配 push bx lea bx,count add WORD ptr [bx],1 ;计数器增加一个 adc WORD ptr [bx+2],0 ;进位 pop bx jmp LOD3
OVR: mov ah,[si-1] mov BYTE ptr buff+1 , ah mov ah,[si-2] mov BYTE ptr buff , ah
pop ax ;恢复这次总共读出的字节数 cmp ax,rlength ;看看是不是最后一次(剩余的零头) jz READ ;如果是最后一次读文件,
ALLEND: mov ah,3eh ;关闭文件 mov bx,fd ;文件句柄 int 21h ;关闭文件
mov ah,9 ;显示结果字符串 lea dx,resault int 21h
;转换2进制结果到10进制ACSII形式 mov bx, WORD ptr count call TERN
mov ax,4c00h ;返回DOS int 21h ;结束代码,最大的数字已经排到了最前面 MAIN ENDP
TERN PROC ;这个子程序是转换并显示2进制数字的 mov cx,10000 call DEC_DIV mov cx,1000 call DEC_DIV mov cx,100 call DEC_DIV mov cx,10 call DEC_DIV mov cx,1 call DEC_DIV ret TERN ENDP DEC_DIV PROC mov ax,bx mov dx,0 div cx mov bx,dx mov dl,al add dl,30H mov ah,disflag ;read flag cmp ah,0 jnz DISP ;已经显示过有效数字了 cmp dl,30H jz NODISP mov disflag,1 ;作用是第一个有效数字出现前不显示0 DISP: mov ah,2 int 21H NODISP: ret DEC_DIV ENDP CODE ENDS END MAIN
上面这段代码我猜你也懒得仔细阅读。其实他不能"显示结果"。因为最后这段负责把最终结果转换成可显示ASCII码的程序实际上只能转换二进制十六位的数据,而最终的结果高达1000万挂零,显示会出错。由于这最终结果的显示已经和程序的运行没有大关系了,因此,我也就懒得去写一个32位的ASCII转换程序了。就这样吧。
第五个选手:JAVA
JAVA是一个不能不参加比赛的选手。有如此多的人热爱他,他们中的一半人是因为JAVA的面向对象特性以及良好的跨平台特性。而另一半人纯粹就是因为JAVA不姓"微(软)",这就是意识形态在程序员头脑中对某种语言的注释。单纯从语言元素上来说,我还是比较喜欢JAVA的。因为他的语法干净、简洁。环境也好。虽然用虚拟机系统(JVM)的做法来实现跨平台特性并非什么了不得的创意(像不像30年前的BASIC解释器?别跟我说什么中间代码?几乎所有的解释器都是把语言因素翻译成中间代码的,JVM不过是分成2步来实现罢了,但从运行机制上应该是差不多的。),但JVM仍然将JAVA的跨平台特性做到了前所未有的地步。而且JVM是一个很干净的系统,让人用起来赏心悦目。说到这里我忍不住想提一下J2EE企业应用框架了。不知道有多少人能够看懂SUN出的J2EE的"理论著作"?满纸充斥着各种生造的概念,洋溢着溢美之词。JAVA的企业应用框架实在是比较复杂的东西,虽然赶不上后来的.NET框架,但足以让大多数初学者望而却步。一句话,东西太多了。事实上JAVA的企业级应用并没有想象的成功,iPlanet就随着电子商务概念的全面垮台而渐渐淡出。现在换了个名叫“SUNONE”――SUN公司员工原话。
我们回到JAVA的语言元素上来说,实际上JAVA可以被理解为被纯化的C++。JAVA去除了C++为了兼容C而增加的一些"非面向对象特质",用其他的一些变通办法实现C++直接实现的功能,比如:多继承。在实现机制上,JAVA的程序会先编译成.CLASS文件,然后这种跨平台的中间代码就可以"一次编译,到处运行"了。当然必须运行在有JVM虚拟机的环境中,连图形什么的都可以照搬。换句话说,你用JAVA程序在PC屏幕上画一个圆,在JAVA-PDA上它还是圆的。
我在本次测试中,写了下面的代码,用JAVA做了同样的测试,测试中实际上用到了:JAVA的文件流类,运行了循环、条件判断、数组操作等基本的语言因素。环境是J2SE1.3.1-06。JAVA程序做1500万行的文本扫描用了8分21秒18。应该说是几种语言中最慢的,基本上和纯解释的PERL是在同一水准。J2EE的JVM环境还是经过优化的所谓HOTSPOT。
import java.io.*; public class langtest { public static void main(String[] args) { String filename = "d:\\access.log_"; try { count(filename); } catch (IOException e)
上一篇:四种网络游戏外挂的设计方法
下一篇:软件也要时尚漂亮 软件包装周边制作一览
|