汇编语言套装软件制作(2)

第三节 程式合并

我所见过的各种组合程式虽不算多,但至少有百余个了。毛病最多的当然是缺乏完整的规划,其次则是信马游缰,一份不折不扣的流水帐!明明大门口在东边,程式硬要朝西,直到游完了大观园,天黑了,才出东门!
这种程式我收集了一大叠,可是举来做例子,却心有余而力不足。原因无他,实在不耐烦照抄一遍,一见到就头痛!
电脑最强的功能,便是处理繁杂重复的工作,为什么一般程式师居然存心与电脑争风吃醋呢?不说别的,光把程式输入到电脑中,就要花上几个月宝贵的光阴,真值得这样做吗?
有一份程式,足足有四十多页,我只略作调整,便缩小到十页,处理速度则快了五倍。为什么会差这样远呢?很简单,有些人不喜欢用大脑,久而久之,习惯成自然,大脑就生了铁銹!除了等因奉此,什么都不会想了。
要想做一个优秀的程式师,第一个条件是不能偷懒,第二个条件则要有分析观察的习惯,第三个也是最重要的,则是要有追求完美的精神。程式师要像艺术家,不论是自己的或是别人的程式,都要一而再、再而三地玩味改良。
我曾见过一个扫地的妇人,她不管在哪里,见不得有任何脏乱。这种人才值得尊敬,这种精神是伟大的,与她的职业丝毫无关!
程式写得不够精简,有三个原因,第一个是程式师无能,这种程式能够写完,可以运行,已算相当难得了;第二个原因是不懂技巧,硬桥硬马的干, 不知什么是效率,也不知道如何达成。自己写的程式都不见得看得懂,遑论他人的?第三则是根本缺乏敬业精神,敷衍塞责,这种人我最瞧不起。
写程式之初,如果把任务瞭解清楚,然后分析因素,分割模组。所有类似的情况都合并到一处,再以变数代替,统一执行。这原本是份内的工作,前述的情况根本不可能发生!
问题是发生了以后怎么办呢?我建议最好重写,如果一定要改,只好采用程式合并的技巧,浓缩一下。
合并的目的是为了增进效率,而合并的方法则因情况不同而异,就像人生了病,必须先查出病因,否则无法下药。我试着以所知道的一些例证,简要地解说如后。

一、过程的合并:

要做过程的合并,首先要查明下列各点:
1,首先找出过程类似的,全部移到一堆,如果找不到,那就没救了。
然而,这种程式要就是太小,根本不可能有类似的情况,再不就是写作时杂乱无章,信马游缰。分明有类似的过程,但没有共通的原则,无从浓缩。当然,也可能有些程式,因工作量及处理的细节太多,以致无法浓缩。

2,在类似的程式中,找寻相异的指令或流程,再若没有,那就是重复了,正宜合并。

3,把相异的指令或流程用变数取代,或将不同程式之入口放在暂存器里。

4,将各程式在应用该流程前,设好变数及使用的暂存器。

5,合并相似的程式段,不同处应用变数取代之。

下面举一实例,系一绘图程式之片断,兹改变原用标题,并将分散在各处若干不同之段,列述如下:
189: MASK PROC NEAR
190: MOV DX,3C4H
191: MOV AL,2
192: OUT DX,AL
193: MOV DX,3C5H
194: MOV AL,PCOLOR
195: OUT DX,AL
196: RET
197: MASK ENDP

380: MOV DX,03CEH
381: MOV AL,3
382: OUT DX,AL
383: MOV AL,18H
384: INC DX
385: OUT DX,AL
386: RET

490: MOV DX,3CEH
491: MOV AL,3
492: OUT DX,AL
493: MOV DX,3CFH
494: MOV AL,0H
495: OUT DX,AL
496: RET

589: CROSS PROC NEAR
590: MOV DX,3C4H
591: MOV AL,2
592: OUT DX,AL
593: INC DX
594: MOV AL,0FH
595: OUT DX,AL
596: RET
597: CROSS ENDP

这样的段落有十多处,看来每个都略有不同,似乎不能合并。然而仔细分析,显然是程式师训练不够,把一个非常有规则的程式,安排得非常紊乱,以致到这个地步。

我们先归纳问题,决定如何合并。第一,上述各段程式,应该统一作为子程式;第二,全部变数只有四个,其中两个是传送值,两个是输出入埠。后者有连续关系,等于只有一个。因此,在调用此子程式前,应先令DX为输出入埠,再将变数装入AX中,一次调用即可。此子程式如下:
300: SUB:
301: OUT DX,AL
302: INC DX
303: MOV AL,AH
304: OUT DX,AL
305: RET
这样简短的子程式,有无必要,端视时空的效益而定。不论怎样整理,都远比原来的要好。
另外有种情况,更为可怕,就是在键盘输入后,用流程方式,一一比较输入码,再一一分别处理。
比如说,为了检查游标键的左、右、上、下等八个方向的移动,以便作相应的处理,程式居然写成:
100: PP1: MOV AH,0
101: INT 16H
102: CMP AX,4800H ;↑键
103: JNE NEXT1
104: CALL MOVDATA ;SET BUFFERS
105: CALL SETDLT ;SET INCREMENT
106: NXT01:
107: CALL DOTUP
108: LOOP NXT01
109: CALL XORDOT ;SET NEW DOT
110: CALL XYDISP ;DISP NEW XXX,YYY
111: JMP PP1
112: NEXT1:
113: CMP AX,5000H ;↓键
114: JNE NEXT2
115: CALL MOVDATA ;SET BUFFERS
116: CALL SETDLT ;SET INCREMENT
117: NXT02:
118: CALL DOTDOWN
119: LOOP NXT02
120: CALL XORDOT ;SET NEW DOT

时间: 2024-08-30 01:53:36

汇编语言套装软件制作(2)的相关文章

汇编语言套装软件制作(1)

程式写完后,还要加工成为可执行的套装软件(Package),一般说来,即使是可以执行的程式,一点错误都没有,离套装软件的程度,却还有一段距离. 当然,程式侦错也是必经过程之一,有时侦错与程式写作可以同时进行.但有经验的程式师,对全面有了充份的认识,往往会等到程式联接后再行侦错. 程式完成后的全面侦错,最好不要依靠写程式的人.因为程式师经常不是使用者,他们仅在自己设计的条件下,依其理念进行侦错.当然这种错误必须更正,但最容易发生的错误,却是使用者不小心在输入时,或运用指令时,违背了程式师的理念.这

怎么使用Word软件制作书法字帖

  怎么使用Word软件制作书法字帖          1.创建字帖 如图 1,单击"文件"→"新建"→"书法字帖"按钮,创建字帖文档,打开"增减字符"对话框. 图1 创建字帖文档 2.选择字体,增加文字 如图 2,单击"书法字体"→选择字体(也可用系统自带自体),选择需要的字符,添加到右侧. 图2 设置字体,增加文字 如图 3 ,完成字帖制作. 图3 完成字帖 3.书法设置 图4 书法设置 如图4,字帖制

通过Excel结合财务软件制作催款函

年初财会要进行欠款清理工作,那些未收回来的账款要在新年初始收回来,那么我们就要制作催款单,督促对方早日将欠款汇来.下面,我来说说我是如何通过Excel结合财务软件制作催款单的. 导出欠款数据 目的:从财务软件中导出欠款的相关数据 现在大多数单位都使用了财务软件,因此整理欠款基础数据时,从财务软件中直接导出即可,例如在浪潮财务软件中,进入"账务处理"模块,执行"账 表"→"科目余额表"命令,在弹出的"科目余额表"对话框中,选择会

巧用Photoshop结合SAI软件制作言情手绘风格的人像

  巧用Photoshop结合SAI软件制作言情手绘风格的人像,绘画青春,绘出我们的精彩,值得借鉴 分类: PS入门教程

gif动态图片用什么软件制作,最好提供几个制作gif图片过程,谢谢

问题描述 gif动态图片用什么软件制作,最好提供几个制作gif图片过程,谢谢 gif动态图片用什么软件制作,最好提供几个制作gif图片的视频教程,文字版本的也可以,谢谢. 解决方案 gif就是简单的Flash 只是把几张图合在一块 然后加一个计时器 按时间刷新帧, 一张图就是一帧 解决方案二: gif就是简单动画,可以用flash制作,几张图片或者一小段视频,最后输出为图片即可

考试软件制作都是用那些软件制作的

问题描述 考试软件制作都是用那些软件制作的 本人想给自己的同学制作一个软件 大神 解决方案 没试过,路过来看看,顶一下 解决方案二: 支持一下~希望你早日做出来 解决方案三: 怎样的软件!!有什么要求都不说!!谁知道啊

可视化设计-搜狐的数字之道或者sina的图解新闻是用什么软件制作的呢?

问题描述 搜狐的数字之道或者sina的图解新闻是用什么软件制作的呢? 求各位大牛解释,搜狐的数字之道或者sina的图解新闻是用什么软件制作的呢?

masm32安装-汇编语言安装软件时出现问题了,求大神解决啊

问题描述 汇编语言安装软件时出现问题了,求大神解决啊 请问大家,安装masm出现DELETE operation of EXE file has failed是什么原因,

赛门铁克推出增强版存储优化套装软件

    赛门铁克公司今天宣布推出 Veritas CommandCentral 增强版存储优化套装软件,致力于帮助企业减少购买不必要的存储设备,有效降低营运成本.Veritas CommandCentral Storage包括新的无代理(agentless)功能,通过提高存储利用率来帮助企业降低存储采购成本,并使存储消耗与实际业务应用实现结合的更加紧密,从而加速企业投资价值的实现.凭借这些增强性的功能,用户可在一年或一年半以上的时间内持续有效地利用现有存储资产,满足业务应用需求.  赛门铁克公司