nbsp;18: COMRET:
19: RET
如此,在分支时,在第13条指令做回路,10,11 则比较住址以决定是否完成。这一来,完成结束只有一次,需时 16T,其余所有执行时间皆为4T,较前一回路快了13T 之多。
再试用「终止指令」法,其必要条件为资料中有多余的组合可供选择。一般多以 00H,0FFH 等极端值比较理想,下面且以0FFH作为终止指令,并置于资料终止处。
1: MOV CL,0FFH ;终止检查用
2: SUB AL,AL ;先设为最小值,备用
3: COMPAR:
4: MOV AH,AL ;设AH为低位值
5: COMPAR1:
6: LODSB ;取资料
7: CMP AL,CL ;比是否终止指令?
8: JAE COMRET ;完成
9: CMP AL,AH ;比大、小
10: JAE COMPAR ;高位大,再查
11: MOV [SI-2],AX ;交换AH,AL,排序
12: DEC SI ;向低位再查
13: MOV AH,[SI-2]
14: JMP COMPAR1
15: COMRET:
16: RET
似此,程式较短,其他效果差不多。
这段程式,在处理速度上,还大有油水。因为已经检查过的资料,因为回路关系,还会不断地重复检查,是否能够避免这种情况呢? 事实上,当排序到某住址时,即表示由该住址起,上面已经检查完毕。因此,只要记录下来,下次再查时,将住址还原即可。
1: MOV CL,0FFH ;终止检查用
2: COMPAR0:
3: SUB AL,AL &