条件转移指令是一组极其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段。微机的指令系统提供了丰富的条件转移指令来满足各种不同的转移需要,在编程序时,要对它们灵活运用。
条件转移指令又分三大类:基于无符号数的条件转移指令、基于有符号数的条件转移指令和基于特殊算术标志位的条件转移指令。
指令的助忆符 | 检测的转移条件 | 功能描述 |
JE/JZ | ZF=1 | Jump Equal or Jump Zero |
JNE/JNZ | ZF=0 | Jump Not Equal or Jump Not Zero |
JA/JNBE | CF=0 and ZF=0 | Jump Above or Jump Not Below or Equal |
JAE/JNB | CF=0 | Jump Above or Equal or Jump Not Below |
JB/JNAE | CF=1 | Jump Below or Jump Not Above or Equal |
JBE/JNA | CF=1 or AF=1 | Jump Below or Equal or Jump Not Above |
指令的助忆符 | 检测的转移条件 | 功能描述 |
JE/JZ | ZF=1 | Jump Equal or Jump Zero |
JNE/JNZ | ZF=0 | Jump Not Equal or Jump Not Zero |
JG/JNLE | ZF=0 and SF=OF | Jump Greater or Jump Not Less or Equal |
JGE/JNL | SF=OF | Jump Greater or Equal or Jump Not Less |
JL/JNGE | SF≠OF | Jump Less or Jump Not Greater or Equal |
JLE/JNG | ZF=1 or SF≠OF | Jump Less or Equal or Jump Not Greater |
指令的助忆符 | 检测的转移条件 | 功能描述 |
JC | CF=1 | Jump Carry |
JNC | CF=0 | Jump Not Carry |
JO | OF=1 | Jump Overflow |
JNO | OF=0 | Jump Not Overflow |
JP/JPE | PF=1 | Jump Parity or Jump Parity Even |
JNP/JPO | PF=0 | Jump Not Parity or Jump Parity Odd |
JS | SF=1 | Jump Sign (negative) |
JNS | SF=0 | Jump No Sign (positive) |
解:
next: … SUB BX, AX JNS next NEG BX …
解:
next: … char DB 'F' ;变量说明 … MOV AL, char CMP AL, 'A' JB next ;注意:字符是无符号数,不要使用指令JL CMP AL, 'Z' JA next ADD char, 20H ;小写字母比大写字母的ASCII码大20H …
如果不知道(或忘了)大小写字母ASCII码之间的关系,那么,可用数值表达式'a'-'A'、'b'-'B'、…、'z'-'Z'等来代替具体的数值20H。
解:
… X DW ;变量说明 Y DW ? … MOV AX, X MOV BX, AX ;用BX来临时存放计算结果 CMP AX, 0 JLE setdata CMP AX, 500 JG case3 ADD BX, 100D? ;BX=X+100 JMP setdata next: SUB BX, 50D ;BX=X-50 setdata: MOV Y, BX ;把计算结果赋给变量Y …
…
MOV CX, COUNT ;给循环计数器赋初值(>0)
again: 循环体指令序列 ;循环体的首地址偏移量大于128
LOOP again解:
… MOV CX, COUNT again: 循环体指令序列 DEC CX JNZ again ;把LOOP指令改为条件转移指令