转移指令是汇编语言程序员经常使用的一组指令。在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所以,在汇编语言中,不但要使用转移指令,而且还要灵活运用,因为指令系统中有大量的转移指令。
转移指令分无条件转移指令和有条件转移指令两大类。
1、无条件转移指令
无条件转移指令包括:JMP、子程序的调用和返回指令、中断的调用和返回指令等。
下面只介绍无条件转移指令JMP
JMP指令的一般形式:
JMP 标号/Reg/Mem
2、条件转移指令
条件转移指令是一组极其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段。微机的指令系统提供了丰富的条件转移指令来满足各种不同的转移需要,在编程序时,要对它们灵活运用。
条件转移指令又分三大类:基于无符号数的条件转移指令、基于有符号数的条件转移指令和基于特殊算术标志位的条件转移指令。
、无符号数的条件转移指令
指令的助忆符
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)
例,已知一个字节变量char,试编写一程序段,把其所存的大写字母变成小写字母。
解:
next: …
char DB 'F' ;变量说明
…
MOV AL, char
CMP AL, 'A'
JB next ;注意:字符是无符号数,不要使用指令JL
CMP AL, 'Z'
JA next
ADD char, 20