3.6.1 程序控制指令
1. 無條件轉(zhuǎn)移、調(diào)用和返回指令
(1)無條件轉(zhuǎn)移指令JMP
該指令分直接轉(zhuǎn)移和間接轉(zhuǎn)移兩種。直接轉(zhuǎn)移又可分短程(SHORT)、近程(NEAR)和遠(yuǎn)程(FAR)3種形式。當(dāng)程序執(zhí)行到JMP指令時(shí),就無條件地轉(zhuǎn)移到所指示的目的地址。
該指令的一般格式為
JMP OPRD ;OPRD是轉(zhuǎn)移的目的地址
直接轉(zhuǎn)移的3種形式為:
·短程轉(zhuǎn)移JM PSHORTNEXT
在短程轉(zhuǎn)移中目的地址與JMP指令所處地址的距離應(yīng)在-128~127范圍之內(nèi)。
·近程轉(zhuǎn)移JMP NEARPTRLOOP1 或JMP LOOP1 ;NEAR可省略
近程轉(zhuǎn)移的目的地址與JMP指令應(yīng)處于同一地址段范圍之內(nèi)。近程轉(zhuǎn)移的NEAR往往予以省略。
·遠(yuǎn)程轉(zhuǎn)移JMP FAR PTR LOOP2
遠(yuǎn)程轉(zhuǎn)移是段間的轉(zhuǎn)移,目的地址與JMP指令所在地址不在同一段內(nèi)。執(zhí)行該指令時(shí)要修改CS和IP的內(nèi)容。
間接轉(zhuǎn)移指令的目的地址可以由存貯器或寄存器給出。
·段內(nèi)間接轉(zhuǎn)移JMP CX
JMP WORDPTR
·段間間接轉(zhuǎn)移JMPDWORDPTR
該指令指定的雙字指針的第一個(gè)字單元內(nèi)容送入IP,第二個(gè)字單元內(nèi)容送入CS,所定義的單元必定是雙字單元。
(2)調(diào)用和返回指令
CALL指令用來調(diào)用一個(gè)過程或子程序。當(dāng)調(diào)用的過程或子程序結(jié)束后,可使用返回指令RET,使程序從調(diào)用的過程或子程序返回。
由于過程或子程序有段間(即遠(yuǎn)程FAR)和段內(nèi)調(diào)用(即近程N(yùn)EAR)之分。所以CALL也有FAR和NEAR之分。這由被調(diào)用過程的定義所決定。因此RET也分段間和段內(nèi)返回兩種。
調(diào)用指令一般格式為
CALL NEARPTROPRD;段內(nèi)調(diào)用
CALL FARPTROPRD;段間調(diào)用
下面我們舉兩個(gè)使用近程調(diào)用指令和遠(yuǎn)程調(diào)用指令的實(shí)例。
主程序(近程調(diào)用)
… 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;主程序(遠(yuǎn)程調(diào)用)
… CALL FARPTR PROADD… ;
過程PROADD定義(遠(yuǎn)程調(diào)用過程)
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. 條件轉(zhuǎn)移指令
8088有18條不同的條件轉(zhuǎn)移指令。它們根據(jù)標(biāo)志寄存器中各標(biāo)志位的狀態(tài),決定程序是否進(jìn)行轉(zhuǎn)移。條件轉(zhuǎn)移指令的目的地址必須在現(xiàn)行的代碼段(CS)內(nèi),
并且以當(dāng)前指針寄存器IP內(nèi)容為基準(zhǔn),其位移必須在+127~-128的范圍之內(nèi)。因此條件轉(zhuǎn)移指令的范圍是有限的,不像JMP指令那樣可以轉(zhuǎn)移到內(nèi)存的任何一個(gè)位置上。
轉(zhuǎn)移指令格式比較簡單,如表3.1所示。

3. 循環(huán)控制指令
這類指令用于控制程序的循環(huán),其控制轉(zhuǎn)向的目的地址是在以當(dāng)前IP內(nèi)容為中心的-128~+127的范圍內(nèi)。這類指令用CX作計(jì)數(shù)器,每執(zhí)行一次指令,CX內(nèi)容減1,直到減
為0,循環(huán)才結(jié)束。
該類指令的一般格式為
LOOP OPRD ;CX≠0循環(huán)
LOOPNE OPRD ;CX≠0且ZF=0循環(huán)
LOOPE OPRD ;CX≠0且ZF=1循環(huán)
在LOOPE和LOOPNE兩條指令中,只要兩個(gè)條件中任一個(gè)不滿足,循環(huán)就結(jié)束。
例:
SUB DI,BX
INC DI
MOV CX,DI
DEC BX
NEXT:INCBX
CMP BYTEPTR,0
LOOPE NEXT…
4. 軟中斷指令及中斷返回指令
在8088的微機(jī)系統(tǒng)中,當(dāng)程序執(zhí)行到中斷指令I(lǐng)NT時(shí),便中斷當(dāng)前程序的執(zhí)行,轉(zhuǎn)向由256個(gè)中斷向量所提供的中斷入口地址之一去執(zhí)行。
軟中斷指令的一般格式為:
INT OPRD ;OPRD可以取00H~FFH中的值
