bsp; 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 ;先设为最小值,备用
4: COMPAR:
5: MOV AH,AL ;设AH为低位值
6: COMPAR1:
7: LODSB ;取资料
8: CMP AL,CL ;比是否终止指令?
9: JAE COMRET ;完成
10: CMP AL,AH ;比大、小
11: JAE COMPAR ;高位大,再查
12: MOV DI,SI ;暂时保存
13: COMPAR2:
14: MOV [SI-2],AX ;交换AH,AL,排序
15: DEC SI ;向低位再查
16: MOV AH,[SI-2]
17: LODSB ;取排序资料
18: CMP AL,AH &n