3.6.1 程序控制指令
1. 无条件转移、调用和返回指令
(1)无条件转移指令JMP
该指令分直接转移和间接转移两种。直接转移又可分短程(SHORT)、近程(NEAR)和远程(FAR)3种形式。当程序执行到JMP指令时,就无条件地转移到所指示的目的地址。
该指令的一般格式为
JMP OPRD ;OPRD是转移的目的地址
直接转移的3种形式为:
·短程转移JM PSHORTNEXT
在短程转移中目的地址与JMP指令所处地址的距离应在-128~127范围之内。
·近程转移JMP NEARPTRLOOP1 或JMP LOOP1 ;NEAR可省略
近程转移的目的地址与JMP指令应处于同一地址段范围之内。近程转移的NEAR往往予以省略。
·远程转移JMP FAR PTR LOOP2
远程转移是段间的转移,目的地址与JMP指令所在地址不在同一段内。执行该指令时要修改CS和IP的内容。
间接转移指令的目的地址可以由存贮器或寄存器给出。
·段内间接转移JMP CX
JMP WORDPTR
·段间间接转移JMPDWORDPTR
该指令指定的双字指针的第一个字单元内容送入IP,第二个字单元内容送入CS,所定义的单元必定是双字单元。
(2)调用和返回指令
CALL指令用来调用一个过程或子程序。当调用的过程或子程序结束后,可使用返回指令RET,使程序从调用的过程或子程序返回。
由于过程或子程序有段间(即远程FAR)和段内调用(即近程NEAR)之分。所以CALL也有FAR和NEAR之分。这由被调用过程的定义所决定。因此RET也分段间和段内返回两种。
调用指令一般格式为
CALL NEARPTROPRD;段内调用
CALL FARPTROPRD;段间调用
下面我们举两个使用近程调用指令和远程调用指令的实例。
主程序(近程调用)
… CALL NEAR PTR PROAD … ;过程PROAD定义
PROAD PROC NEAR
PUSH AX
PUSH CX
PUSH SI
LEA SI,ARY MOV CX,COUNT
XOR AX,AX
NEXT:ADD AX,[SI]
ADD SI,2
LOOP NEXT
MOV SUM,AX
POP SI
POP CX
POP AX
RET
PROAD ENDP;主程序(远程调用)
… CALL FARPTR PROADD… ;
过程PROADD定义(远程调用过程)
PROADD PROC FAR
PUSH AX
PUSH CX
PUSH SI
PUSH DI
MOV SI,[BX]MOV DI,[BX+2]
MOV CX,
MOV DI,[BX+4]
XOR AX,AX
NEXT1:ADD AX,[SI]
ADD SI,2
LOOP NEXT1
MOV [DI],AX
POP DI
POP SI
POP CX
POP AX
RET
PROADD ENDP2. 条件转移指令
8088有18条不同的条件转移指令。它们根据标志寄存器中各标志位的状态,决定程序是否进行转移。条件转移指令的目的地址必须在现行的代码段(CS)内,
并且以当前指针寄存器IP内容为基准,其位移必须在+127~-128的范围之内。因此条件转移指令的范围是有限的,不像JMP指令那样可以转移到内存的任何一个位置上。
转移指令格式比较简单,如表3.1所示。

3. 循环控制指令
这类指令用于控制程序的循环,其控制转向的目的地址是在以当前IP内容为中心的-128~+127的范围内。这类指令用CX作计数器,每执行一次指令,CX内容减1,直到减
为0,循环才结束。
该类指令的一般格式为
LOOP OPRD ;CX≠0循环
LOOPNE OPRD ;CX≠0且ZF=0循环
LOOPE OPRD ;CX≠0且ZF=1循环
在LOOPE和LOOPNE两条指令中,只要两个条件中任一个不满足,循环就结束。
例:
SUB DI,BX
INC DI
MOV CX,DI
DEC BX
NEXT:INCBX
CMP BYTEPTR,0
LOOPE NEXT…
4. 软中断指令及中断返回指令
在8088的微机系统中,当程序执行到中断指令INT时,便中断当前程序的执行,转向由256个中断向量所提供的中断入口地址之一去执行。
软中断指令的一般格式为:
INT OPRD ;OPRD可以取00H~FFH中的值
