汇编语言程序设计(五)
2007-04-25 09:29:59 来源:WEB开发网核心提示:我们称之为「预置法」,把前述的设置方式改变一下,汇编语言程序设计(五)(4),用一组缓冲区,先定义如下: DB 0 ; 计数用 BUFER DW 8 DUP (0) ; 存程式入口用 DW 1 ; 终止信号 然后再设计程式,最后则是要多多动手,除此之外,预置及执行如次: 1: SETUP: 2: CMP BX,MAXV
我们称之为「预置法」,把前述的设置方式改变一下,用一组缓冲区,先定义如下:
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 ; 为0则无
26: JZ ENTRET
27: ENTER1:
28: LODSW ; 取程式资料
29: CMP AX,1 ; 查程式入口
30: JB ENTER1 ; 0表示不做
31: JZ ENTRET ; 1表示终止
32: PUSH SI
33: CALL AX ; 执行
34: POP SI
35: JMP ENTER1
36: ENTRET:
37: RET
前一段调用程式需要31个字元,而现在只要21个字元,速度也快得多。不仅如此,前段程式仅能提供八个子程式,最多用十六位元,不过十六个子程式。本程式则不然,只要预留的缓冲器够,可提供的子程式可以说是无限。
更重要的功能,是程式执行的顺序。除了这种预置法外,其他的方法,都受限于 SUBTB的安排次序,无法变更。但本方法则完全可任依使用者的需要,来决定子程式执行的顺序,以及是否执行。
请注意在 SETUP时,BX的参数就同时代表了执行的顺序。如果要想依照设定的次序决定顺序,只要将缓冲区加大,再加一组预设程式即可,如下所示:
1: SETUP:
2: SHL AX,1 ; 输入参数
3: ADD AX,OFFSET SUBTB ; 子程式入口
4: MOV BX,BUFER-2 ; 位置序数
5: SHL BX,1 ; 指向位置
6: MOV BUFDER[BX],AX ; 存入缓冲区
7: INC WORD PTR BUFER-2; 序数加一
8: RET
这一来,先调用的程式放在前面,后调用的放在后面,使用者只要知道子程式的代号,就可以随意安排调用。
甚至于各子程式所需的参数,也可以用类似的方法,预先设置妥当,然后一次取出运用。
预置法最宜于「用户」接口,而且作为应用程式,既简单又容易,方便灵活。
比如有一些应用模组,即可应用此方法,分别归类、编号后,书于手册中,以提供使用者选择、应用。
使用者选择介面的方法,可以通过萤幕提示,将各种模组显示在指定位置上。使用者利用游标,或其它选择方法,以求得到正确的编号,再依序置于缓冲区中。
各种模组都可能需要输入参数或资料,所以,另外要准备一个参数缓冲区,在选择模组时,同时选择参数。由于各模组会自动取用参数,故只要置入即可。
假设有一个「使用者自行设计程式」的工具套件,(“聚珍整合系统”就建立在这观念上,惜因我们人手不足,产品可能要到1991年才能上市。)萤幕提示有介面、功能、共用等各类模组,使用者选完一类后,萤幕再度提示该模组的编号。
萤幕上的模组编号经过程式转换,得到程式编号,将此编号存入缓冲区,再查是否需要输入资料。即可按照原有流程设计,逐步执行下去,完全可以利用这种预置法。
1: GETMOD:
2: SUB AX,AX
3: INT 16H ; 使用者输入
4: CALL GETSUB ; 转换为代号
5: SETUP: ; 代号置于AX
6: SHL AX,1 ; 次序乘二
7: ADD AX,OFFSET SUBTB ; 子程式入口
8: MOV BX,BUFER-2
9: SHL BX,1
10: MOV BUFFER[BX],AX
11: INC WORD PTR BUFER-2
12: JMP GETVAR ; 查取参数否
当然,真正可以应用的程式,还要考虑很多因素,但大致上,结构就这样简单。
写程式和画画没有两样,多看、多参考别人的程式,多想、多钻研各种方法,最后则是要多多动手,除此之外,别无其他法门。
更多精彩
赞助商链接