四、桥式法:
桥式法是利用读写记忆体的特性,将程式中若干指令直接填入,作为临时便桥,以改变此段程式的功能,
汇编语言程式设计5
。例如在显示时,希望能提供多种变化,而又不愿减低速度及增加太多的程式。最好的方法,便是利用桥式法,在同一位址,填入需要的指令。
桥式法用得好而又灵活时,对程式的效率极有助益。但是应该注意一点,就是只能用在可读可写的记忆区中,如若要制成「韧体」,即置入仅读记忆体(ROM)中的程式,绝不可使用此法。
下面的实例,即为萤幕显示的桥式应用。首先,把架桥的「材料」设置在缓冲器中,如:
CDSPMODDB88H;8805=MOV[DI],AL
DB30H;3005=XOR[DI],AL
DB08H;0805=OR[DI],AL
DB20H;2005=AND[DI],AL
CDSPMOD即为缓冲器,其中有四个数据,分别为机器码的相异部份,如分号后所注。因为四组机器码皆有05,不必再填。=右边部份,即为该机器语言相对应的指令。
程式部份先设妥功能定义,利用一、所说的变数应用法,依序由0至3先载入暂存器BX中。根据BX值,将所需机器码载入程式中。
10:CLOD:
11:MOVAL,CDSPMOD[BX];用BX取预存码
12:MOVCS:CDSP2[1],AL;载入CDSP2+1
13:CDSP:
14:SUBSI,SI;资料由0起
15:CDSP1:
16:LODSB;取资料
17:CDSP2LABELBYTE;载入的位置
18:XORES:[DI],AL;原码263005
19:INCDI;须改30部份
20:LOOPCDSP1
21:RET
五、流水线法:
工业上的流水线生产作业,需要极为严格的规格限制,原器件分别研制完毕后,统一送到生产线上组装,
电脑资料
《汇编语言程式设计5》()。程式亦可采用同样的方法,只可惜一时手头上找不到现成的、适用的例子,只得将方法概述如下:
先设定处理流程,凡是能用这种生产流程者,皆适用。
再设定处理流程中所采用的「生产线」,也就是缓冲器。因为流水线上所用的资料都需要由缓冲器提供。
此缓冲器的长度由流程决定,缓冲器中的资料则由各调用本流程的原程式载入。
各调用程式可视个别条件,将所需处理的资料,放在缓冲器内(全部或部份)。待调用后,再从原缓冲器中取出经过处理后的资料。
六、对应表法
凡是指根据某种需要,将经过整理的资料,以某种固定的格式,安排在一特定区域中。每当需要时,立刻可以按照排列的位置取出来使用的,皆可称之为对应表。
这种对应表是我最喜欢利用的技巧,速度奇快不说,修改也极其容
易。尤其是我做事一向不拘小节,写起程式来,专出小错。自从采用了表格对照法后,凡是适合这种形式的程式,只要想通了最理想的结构,几个指令就把程式写完了。兹将附录中所举的例子,对字形放大所采用的查表法,在此作进一步的介绍。
假设有一组图形,要在萤幕上左右放大一倍。一般程式师做这种题目,都是在暂存器内移来移去,每一个字元的资料,起码要移八次之多,每次都要用借位作为转换值。而转换时,又要放进一个16位元的暂存器中,尽管可以用回路去做,时间的延误相当大,读者可参考附录二以做比较。
当然,表格要占用空间,以本例而言,如果一次用256B,取足则要512B。
因此这种技术可以说是以空间换取时间。在第一章第三节「效率」的第四条定律下,我们知道键盘输入速度,决定于人的操作速度,而人的反应远远不及电脑,故应以人的速度为时间边际值,尽量设法节省。
目前,所涉及的是显示时间,每个人在电脑前,都期望着立即得到结果。因此,显示速度不仅要快,而且越快越好。所以,前述的空时交换应在可能范围中,视实际的边际效应,以作取舍。