新闻中心

EEPW首页>嵌入式系统>设计应用> 8086指令系统---控制转移指令(一)

8086指令系统---控制转移指令(一)

作者: 时间:2016-11-27 来源:网络 收藏
  2 条件转移指令(conditional jump)

  条件转移指令是在满足了规定的条件后才控制程序转移的一类指令,8086的条件转移指令总结在表3.4中。

  所有条件转移指令都是短转移指令,转移的目标地址必须在当前IP地址的-128至+127字节范围之内,因此条件转移指令是2字节指令。

  计算转向地址的方法和无条件短转移指令是一样的,看例3.40的反汇编代码。

  例3.40程序中的"JNZ AGAIN"汇编成"JNZ 000D",000D是标号AGAIN的地址,指令"JNZ 000D"的机器代码是75FA,75是操作码,FA是位移量。当CPU读取JNZ指令后,IP寄存器自动加2(JNZ的指令长度)指向了下一条指令(MOV),此时IP的当前值是0013。计算转向地址时,(IP)当前+位移量 = 0013+FA = 0013+FFFA = 000D,这正是AGAIN的偏移地址。实际上FA是-6的补码,8位的FA与16位的0013相加时,FA符号扩展成为FFFA,相加的加结果为000D。
            表3.4 条件转移指令
分类
指 令
转 移 条 件
说 明
(Ⅰ)
JZ/JE
ZF=1
为零/相等, 则转移
JNZ/JNE
ZF=0
不为零/不相等, 则转移
JS
SF=1
为负, 则转移
JNS
SF=0
为正, 则转移
JO
OF=1
溢出, 则转移
JNO
OF=0
不溢出, 则转移
JP
PF=1
奇偶位为1, 则转移
JNP
PF=0
奇偶位为0, 则转移
JC
CF=1
进位位为1, 则转移
JNC
CF=0
进位位为0, 则转移
(Ⅱ)
JB/JNAE/JC
CF=1
低于/不高于等于, 则转移
JNB/JAE/JNC
CF=0
不低于/高于等于, 则转移
JBE/JNA
(CFZF)=1
低于等于/不高于, 则转移
JNBE/JA
(CFZF)=0
不低于等于/高于, 则转移
(Ⅲ)
JL/JNGE
(SFOF)=1
小于/不大于等于, 则转移
JNL/JGE
(SFOF)=0
不小于/大于等于, 则转移
JLE/JNG
((SFOF)ZF)=1
小于等于/不大于, 则转移
JNLE/JG
((SFOF)ZF)=0
不小于等于/大于, 则转移
(Ⅳ)
JCXZ
(CX)=0
CX的内容为0, 则转移

注:(Ⅰ)根据条件码的值转移 (Ⅱ)比较两个无符号数,根据比较的结果转移
(Ⅲ)比较两个带符号数,根据比较的结果转移 (Ⅳ)根据CX寄存器的值转移

本文引用地址: //m.amcfsurvey.com/article/201611/322189.htm

1050:0000  B86610    MOV AX,1040
    1050:0003  8ED8     MOV DS,AX
    1050:0005  B90500    MOV CX,0005
    1050:0008  BB0000    MOV BX,0000
    1050:000D  0207 AGAIN: ADD AL,[BX]
    1050:000F  43      INC BX
    1050:0010  49      DEC CX
    1050:0011  75FA     JNZ 000D
    1050:0013  A20500    MOV [0005],AL
    1050:0016  B44C     MOV AH,4C
    1050:0018  CD21     INT 21

 例假设程序进行两个带符号数的比较,并根据比较结果转移,其中(AL)=80H,(BL)=01,请指出下面 两组指令的转向地址。

  ⑴ CMP AL,BL     ⑵ CMP AL,BL
    JL XY         JB XY  

  答:⑴ 转向目标地址XY;⑵不能实现转移。
    执行CMP指令时,(AL)-(BL)=80-01=7F,条件码设置为:SF=0,OF=1,CF=0。执行JL指令时,测试转移条件:SFOF = 01 =1,说明满足(AL)<(BL)的转移条件,因此,(IP)←XY的偏移地址,程序即转移到XY单元执行新的指令。

  JB指令的转移条件为CF=1,而CMP的执行结果使CF=0,所以不能引起转移。



上一页 1 2 下一页

评论


技术专区

关闭