汇编语言程序设计(二)

四、模组分割

既然称为模组,本不存在分割与否的问题。如果一个程式师一开始就具备模组的观念,彻底瞭解其性质,当然知道如何设计,自然就没有分割的必要。即令如此,在程式的制作过程中,经常是信马游缰,想到哪,写到哪。所以,养成模组分割的观念,对实际工作上,自有其必然的功效。
模组分割的原因不定,大约可分下列数种:
1,为了制作的方便,把程式分成模组,易于维护。
2,为了工作效率,或需要速度、或为节省空间的程式,分别用不同的技巧制作。
3,因程式师的工作能力,或工作条件而进行分割。
4,因程式的功能分类,分开制作,以便于灵活应用。
不论原因为何,分割模组前,一定要先确定目标,全面认知程式的格局,再加以整理、归类,才能根据类别来分割。
分类确定后,再以分类来命名,以便于记忆及应用。这时格式的统一定义便是关键所在。因为模组一多,相互间的调用极为频繁,如果格式不能统一,程式间常常需要因应调整,反而增加了使用上的难度,得不偿失。
其次,各模组必须建立一个总表,而且要经常维护,务必与实际上所使用者一一对应,切勿偷懒。每次调用时,还需修正记录,如使用次数,调用的程式等。
如果程式制作的规模大,参与人数多,最理想是由专人负责模组管理。从事这种工作的人,必须头脑清楚,反应敏锐,而且要能任劳任怨,勤于更新。
在做模组分割前,应先备妥 .ref 及 .lst 档,设有一程式 abcd.asm ,其做法为:
C:>M ABCD,,,;
m 为汇编程式,即 masm.exe 之简化名,请参见第二章第二节。其后之“,,,;”表示需要 .obj,.lst和 .crf三个档,而且不必显示在萤幕上。
汇编完成后,再用 cref.exe 生成 abcd.ref 如下:
C:>CREF ABCD;
这时,将 abcd.lst 及 abcd.ref 印出,相互对照,先将程式精简、整理,再行分割。
1,在 abcd.ref 档中,每个「标题」都来自 abcd.lst 档,标题之后,有若干组数字,其中带#者,表示标题出处,余者为调用之处。若仅有来处,而无调用处,则此标题可删除。再如标题前之指令为 jmp 或 ret ,则此标题所代表的程式毫无用处,亦应删除之。

2,如 abcd.lst 档中有 nop指令,除非是有意安排者,否则亦应删除。如在 jmp xxxx 之后,可将之改为 jmp short xxxx 。
若 XXXX 之前无连接的程式,亦可将之合并。此外,凡指令 CALL 所调用的子程式,如仅调用一次,最好将此段子程式合并在程式内,或附属于其后,以便于分辨。

3,程式精简及合并后,再行检查各段程式,凡功能独立者,应先分割。分割后,再检查其中是否调用其他子程式,如有,应先记录下来,此段程式即可视为「功能模组」。

4,凡前述功能模组中调用的子程式,如仅供该模组调用,则可附在该模组后,否则应置于「共用模组」中。

5,但凡程式之「主流程」,大多属「应用模组」。此类应用模组极难分割,也无分割的必要。

6,分割完毕后,应详细注记,以便备用。

五、模组特性

所谓模组特性,是指各个模组在设计或分割之初所考虑的因素。特性包括了功能,效率的特别要求以及使用时应行注意的重点等有关模组的细节。
不论模组设计的目标为何,既然有了模组,就应该高度发挥其应有的效率。各个模组之分割,皆有其必然因素,不论是为了功能,或是为了制作方便,目的都在追求效率。而每个模组皆有其特性,要达到效率要求,应先瞭解模组的特性。
下面以前节所举的中文系统为例,将其中各个模组的特性一一详细分析如下:
【模组一】:中文处理的系统模组-功能模组
1,键盘中断:因为人输入的速度远逊于电脑处理速度,所以,本中断程式应该以节省空间为主。此外,键盘的应用,以灵活达变为重点,宜多采用「建表」法,便于修改、变更。

2,显示中断:显示速度非常重要,本模组应牺牲空间以争取时效。此外,显示的弹性要大,凡字符的大小、位置、属性等,都应该一次考虑清楚。
目前显示器的规格很多,彼此互不相容,一般多在程式载入前,先作安排。在本模组中,尤其应该注意不同的显示程式,如何兼顾速度的运行。

3,列印中断:列印也面临不同的机种介面问题,但因不涉及速度,其技巧完全属于设定及载入方面。

4,通讯中断:通讯所需考虑的,是如何保证在资料传输过程中的安全、正确及保密。

【模组二】:中文内码模组-辅助模组
因为仓颉码可以组出既有的,以及排列组合上可能产生的中文字,照理应该不受内码的限制。但是仓颉输入码之长度不定,为了电脑的处理效率,我们采用了四字元内码,每一字元的最高位元设置为1 ,以与英文字符有别。
内码的转换也应考虑速度,而且要能双向转换,程式制作不难,但处理的技巧也不低。

【模组三】:中文字形结构模组-介面模组
贮存中文基本字形结构,根据输入的仓颉码,得到文字结构的基本讯息,以之组成字形。
中文字数极多,字形结构的规划是成败的关键,只要每个字形多加几个字元,空间就会恶性膨胀。
本模组采用多层结构的技巧,其中子模组甚多,空间及速度兼顾,才能在极小的空间中,完成大量字形输输出,而且变化灵活,完全拜模组分割之助。

【模组四】:字形分析模组-辅助模组
举凡字形大小、种类、笔形的变化及位置等,皆在本模组中完成。
字形分析以变化多为目的,故本模组主要功能在处理变数,应该妥善安排各缓冲器,以达到效率要求。

【模组五】:英文字形模组-功能模组
英文字形与中文有异,所以另成一模组。其字数较中文为少,但却不具备任意组合的功能。

【模组六】:绘图模组-功能模组
这段程式是字形产生器的核心,当得到模组四、五的资料以后,要以高速将字形绘出。
绘图程式的关键在计算,计算虽然是电脑的原始功能,如果不另外加上「辅助计算器」,电脑的运算效率就大为降低。
一般说来,仅在萤幕上绘图,或做字形绘制时,其范围有限,且可以预知,故可采用「对照表」或快速运算法,换取显示效率。在列印输出时,则可采高精度运算方式。

时间: 2024-10-03 20:30:05

汇编语言程序设计(二)的相关文章

IBM-PC汇编语言程序设计(第二版)习题3.36疑似错题。

问题描述 IBM-PC汇编语言程序设计(第二版)习题3.36疑似错题. 原题干如下: 假设X和X+2单的内容为双精度p,Y和Y+2单元的内容为双精度数q,X和Y为低位字,试说明下列程序段做什么工作? MOV DX, X+2 MOV AX, X ADD AX, X ADC DX, X+2 CMP DX, Y+2 JL L2 JG L1 CMP AX, Y JBE L2 L1: MOV AX,1 JMP SHORT EXIT L2: MOV AX,2 EXIT: INT 20H 接下来是习题解: 此

汇编程序-汇编语言程序设计求助

问题描述 汇编语言程序设计求助 题目一:将内存一个从符号地址DATA1开始连续m个存储单元的内容复制到内存中从DATA2开始的另一个区域,DATA1和DATA2在同一个数据段 题目二:对于内存中从地址DATA1开始连续存放的一组字节型数据,寻找最大值和最小值程序

汇编语言——Intel汇编语言程序设计(第5版)中文版

问题描述 汇编语言--Intel汇编语言程序设计(第5版)中文版 学会汇编语言的话,Intel汇编语言程序设计(第5版)中文版这本书怎么样呢

汇编语言程序设计(五)

四.桥式法: 桥式法是利用读写记忆体的特性,将程式中若干指令直接填入,作为临时便桥,以改变此段程式的功能. 例如在显示时,希望能提供多种变化,而又不愿减低速度及增加太多的程式.最好的方法,便是利用桥式法,在同一位址,填入需要的指令. 桥式法用得好而又灵活时,对程式的效率极有助益.但是应该注意一点,就是只能用在可读可写的记忆区中,如若要制成「韧体」,即置入仅读记忆体(ROM) 中的程式,绝不可使用此法. 下面的实例,即为萤幕显示的桥式应用.首先,把架桥的「材料」设置在缓冲器中,如: CDSPMOD

汇编语言程序设计(四)

第五节 程式写作 说了不少,才真正到了写作程式的时候,运用指令就相当于写程式.只是,在运用指令前,一定要充份瞭解一应相关的课题.否则,应用指令如同和稀泥一般,堆砌出一团可以运作的成品,我个人不认为那能叫做「写程式」,充其量只是涂鸦罢了. 一.暂存器安排 因为暂存器不足,必须事先安排妥当,才能有效应用. 再以前例说明,需要安排的因素有: 1,字形大小:此项有两个变数需要安排,一是横向之始.终值; 另一是纵向之始.终值.因为在设计之初,我已经 考虑到极限值的问题,将上限定在 256点,恰在一个字元 

汇编语言程序设计(三)

第四节 程式规划 程式规划是指在整体设计的观念上,事先对全部程式周详地.有系统地分析,再定出一个明晰的架构,以便于制作. 最理想的方式,是从使用者的角度,先决定应用功能.用键.输入形式.空间结构及模组划分等. 这些都确定了,才能按图索骥,根据蓝图写程式.也就是说,规划即先把目标介定妥当,以便按步就班,循序执行. 1,工作的认识:程式的规划,相当于设计建筑篮图,首先要明确认识工作性质.特征.条件,选择取适当的方式,以求得到最理想的结果. 2,程式的结构:结构要事先定案,是采用流程抑或模组?全部或部

汇编语言的模块化程序设计(1004)

本文为<汇编语言程序设计>1004小节例程.点击链接-进课程主页. 模块化程序结构 assume cs:code code segment main: ... call sub1 ;调用子程序sub1 ... mov ax, 4c00h int 21h sub1: ... ;子程序sub1开始 call sub2 ;调用子程序sub1 ... ret ;子程序返回 sub2: ... ;子程序sub2开始 ... ret ;子程序返回 code ends end main 用寄存器来存储参数和

汇编语言第4周学生总结反馈

汇编语言程序设计课到第4周.这周的课后总结中,让同学们写下"我的疑惑".这倒好,真引出了一大堆好问题,其实,这也就是大家学习的最真实情况. 为同学们的解答公布如下.下一周,老贺不做这种一对多的事情了,我们开启互评模式,靠同学们的多对多,完成更有意义的深入交流. 学号 学生小结 老师点评 (14)1147 我得到的知识: loop指令和[bx]指令的运用及其相关的内容,还有源程序文件.目标文件和可执行文件的相互转换.我得到的技能: 用editplus去编写源程序,使用masm进行编译.我

我是如何从汇编语言脑残粉转变的

    我最早接触汇编语言可以追溯到裕兴学习机那一阵.当时裕兴在推出了浮点BASIC和游戏BASIC之后还不过瘾,觉得还能更深一步挖掘机器的潜力,结果推出了6502汇编语言的磁碟.我当时第一时间买了,磁碟还附赠一本简单的编程手册(十几页吧,蛮薄的).可说出来不怕各位童鞋笑话,我基本上是一句指令都没写出来的干活啊!:(     在我人生正式课堂晓(xiao二声)习的最后1年里,我曾从图书馆借阅了<IBM汇编语言程序设计>一书,如果说6502时不知汇编为何物,那么此时就是到了能看见汇编皮毛上浮的那