• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 汇编语言套装软件制作(2)

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了汇编语言软件,汇编语言用什么软件,汇编语言编程软件,汇编语言软件下载,写汇编语言的软件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

第三节 程式合并

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

一、过程的合并:

要做过程的合并,首先要查明下列各点:
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

 2 3  下一页</div> </div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-06-28汇编源码系列之dskwatch
  • 2017-06-28汇编教程之通用控件
  • 2017-06-28DOS下的EXE格式文件
  • 2017-06-17串操作类指令
  • 2017-06-17什么是子程序?子程序的概念
  • 2017-06-17外部设备
  • 2017-06-28汇编源码系列之driver
  • 2017-06-28汇编源码系列之getsect
  • 2017-06-28SHELL排序测试
  • 2017-06-28驱动程序的动态加载

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 汇编教程之处理鼠标按键消息
    • 汇编教程:控制转移(2)
    • MASM-两个16位二进制数减法模拟
    • 汇编源码系列之cleanf
    • GUI编程中以对话框为主要界面的应用程序
    • 汇编语言的艺术-观念正误(五)
    • 顺序程序设计
    • 汇编创建简单的窗口
    • 汇编中的伪操作
    • 汇编教程:获得结果

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有