p; RET
这样好得多了,可是,还能不能再加改进呢?组合语言的妙处就在于变化无穷,且看看是否还能变出花样来。
从设置开始,方式稍微改变一下,旗号的观念是供程式检查用。在应用时,要占用一个暂存器,而暂存器有限,浪费了可惜。此外,八个不同的子程式,又要占用一个计数用的暂存器,最好能够省掉。
因此,设置的重要性就显而易见了,程式的好坏,并非仅仅在于指令的应用。原始的理念,及程式的规划,经常在程式设计之前已经决定了。
我们称之为「预置法」,把前述的设置方式改变一下,用一组缓冲区,先定义如下:
DB 0 ; 计数用
BUFER DW 8 DUP (0) ; 存程式入口用
DW 1 ; 终止信号
然后再设计程式,预置及执行如次:
1: SETUP:
2: CMP BX,MAXVAL ; 最大值检查
3: JA SETRET ; 超过,无效
4: SHL BX,1 ; 参数乘2
5: ADD BX,SUBTB
6: JMP BX ; 各种程式
7: SUB3:
8: XOR BUUER,BX ; 设为第三组
9: JNZ SUB31 ; 开
10: SUB30:
11: DEC BUFER-1 ; 取消
12: RET
13: SUB31: INC BUFER_1 ; 计数
14: RET
15: SUBTB DW SUB1
16: DW SUB2
..
21: DW SUBN
22: ENTER:
23: MOV SI,OFFSET BUFER-1
24: LODSB ; 查是否需要
25: OR AL,AL &nbs