nbsp; 24: CALL BP
25: POP AX
26: XCHG DH,AH
27: POP BX
28:DYBPJRT:
29: RET
二、对称法:
本法实际上就是利用间接定址的指令,将原系对称处理,或可以调整成为对称型的程式,灵活调用。
下面这段程式,表面看来似乎毫不相干,但经过整理后,就有了眉目,然后再以暂存器间接定址,合并为一。像这种程式,规模越大,所节省的空间就越多。
1:ABCD:
2: CMP DX,BUFA
3: JB ABCD1
4: CMP CL,BUFD
5: JB ABCD1
6: MOV BUFC,CL
7: INC BUFE
8: MOV BUFB,DX
9: DEC BUFF
10: ABCD1:
11: ..
12: ..
与另一段程式:
20:EFGH:
21: CMP BX,BUFG
22: JB EFGH1
23: CMP CH,BUFH
24: JB EFGH1
25: INC BUFK
26: DEC BUFL
27: MOV BUFI,BX
28: MOV BUFJ,CH
29:EFGH1:
30: ..
31: ..
看来分别很大,先经过整理,得到左右两组程式:
EFGH: ABCD:
CMP BX,BUFG CMP DX,BUFA
JB EFGH1 JB ABCD1
CMP CH,BUFH CMP CL,BUFD
JB EFGH1 JB ABCD1
INC BUFK INC BUFE
DEC BUFL DEC BUFF
MOV BUFI,BX MOV BUFB,DX
MOV BUFJ,CH MOV BUFC,CL
EFGH1: ABCD1:
.. ..
.. ..
对照之下可以看出,其所不同的,只是暂存器及缓冲器的分别而已。这种程式的出现,是由于事先规划不当,未能通盘考虑,头痛医头,脚痛医脚。原可以把暂存器及缓冲器统一运用,现在木已成舟,想要变更很可能影响大局。
其次是写作的风格及习惯没有养成,在用指令时,信手拈来,以致两段程式,两种写法!
现在唯一的补救方法,是利用间接定址法,先将两组不同的缓冲器,照相对次序排列妥当,再改写程式。
1:ABCD:
2: MOV SI,OFFSET BUFA
3: MOV DI,OFFSET BUFB
4: MOV BX,DX
5: MOV CH,CL
6: JMP SHORT EFGH1
7:EFGH:
8: MOV SI,OFFSET BUFG
9: MOV DI,OFFSET BUFI
10:EFGH1:
11: CMP BX,[SI]
12: JB EFGH2
13: CMP CH,[SI+2]
14: JB EFGH2
15: MOV [DI],BX
16:上一页 [1] [2] [3] [4] [5] 下一页 |