DW COD1,COD2,COD3,COD4,COD5,COD6
12使DI=ABC,CX=6:
MOV DI,OFFSET ABC
MOV CX,6
13由比对字串后,判断是否AX中有上述之值,如有,则用间接定址的方式执行之。
REPNZ SCASW ; 比对六组字串
JCXZ NOTHING ; 没有所比之字串
SUB DI,OFFSET ABC+2 ; 得到比对位置值
CALL CS:DEF[DI] ; 或作JMP
上述之DEF 如果放在DG段中,还可以节省一字元,并可加快速度:
CALL DEF[DI]
二、程式的结构
若在程式规划之初,未先做好准备工作,临时想用前述的方法,并非绝不可能。但是,东添一点,西补一段,这种程式不仅会导致测试的麻烦,更可能影响未来的维护和调整。
因此,每当瞭解了工作任务后,需要作间接定址的部份,最好能集中在一个模组内。万一性质不同必须分割,也应该将间接定址的程式,置放在模组的起头处。
这样做的好处很多,一方面便于扩充功能,每次增加定址因素时,不必在程式中寻来找去,立刻可以安排妥当。其次,这种定址的需求,必然与整体功能有关,而且定义表相当于一个目录,把纲领放在前面,按图索骥,一目瞭然。更重要的,是可以表现出程式结构的层次,层次处理是网状流程中最难以掌握的一环,不可不慎。
还有,就是各子程式的标题安排,其位置的先后应以功能的集中性为准。这样做的好处是,如果有可以共用的程式段,很容易就可合并为一,节省空间。
三、次序与条件「真」「假」
条件分支的「时钟数」有二个可能,条件符合时,执行分支为 16T,不符合则为 4T ,且继续下一指令。两者相差有四倍之多,我们正该利用这一特点,速度重要的条件,都应该设为主流程,否则为分流程。
尤其是在需要高速的回路中,分支处理得好坏,效率相去甚远。这种分支需要平时多加小心,培养出良好的习惯。
CDEF:
CMP AL,''?''
JZ ABCD ; 各比较符号中,''?'' 者最少
LOOP CDEF ; NZ条件仅需4T速度较快
ABCD:
..
四、JMP 与 JMP SHORT
&