; 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