汇编条件转移指令(Transfer Conditionally)
3168 点击·0 回帖
![]() | ![]() | |
![]() | 条件转移指令是一组极其重要的转移指令,它根据标志寄存器中的一个(或多个)标志位来决定是否需要转移,这就为实现多功能程序提供了必要的手段。微机的指令系统提供了丰富的条件转移指令来满足各种不同的转移需要,在编程序时,要对它们灵活运用。 条件转移指令又分三大类:基于无符号数的条件转移指令、基于有符号数的条件转移指令和基于特殊算术标志位的条件转移指令。 、无符号数的条件转移指令(Jumps Based on Unsigned (Logic) Data) 指令的助忆符检测的转移条件功能描述 JE/JZZF=1Jump Equal or Jump Zero JNE/JNZZF=0Jump Not Equal or Jump Not Zero JA/JNBECF=0 and ZF=0Jump Above or Jump Not Below or Equal JAE/JNBCF=0Jump Above or Equal or Jump Not Below JB/JNAECF=1Jump Below or Jump Not Above or Equal JBE/JNACF=1 or AF=1Jump Below or Equal or Jump Not Above 、有符号数的条件转移指令(Jumps Based on Signed (Arithmetic) Data) 指令的助忆符检测的转移条件功能描述 JE/JZZF=1Jump Equal or Jump Zero JNE/JNZZF=0Jump Not Equal or Jump Not Zero JG/JNLEZF=0 and SF=OFJump Greater or Jump Not Less or Equal JGE/JNLSF=OFJump Greater or Equal or Jump Not Less JL/JNGESF≠OFJump Less or Jump Not Greater or Equal JLE/JNGZF=1 or SF≠OFJump Less or Equal or Jump Not Greater 、特殊算术标志位的条件转移指令(Jumps Based on Special Arithmetic Tests) 指令的助忆符检测的转移条件功能描述 JCCF=1Jump Carry JNCCF=0Jump Not Carry JOOF=1Jump Overflow JNOOF=0Jump Not Overflow JP/JPEPF=1Jump Parity or Jump Parity Even JNP/JPOPF=0Jump Not Parity or Jump Parity Odd JSSF=1Jump Sign (negative) JNSSF=0Jump No Sign (positive) 例5.15 编写一程序段,它把寄存器AX-BX的绝对值存入BX中。 解: next:… SUBBX, AX JNSnext NEGBX … 例5.16 已知一个字节变量char,试编写一程序段,把其所存的大写字母变成小写字母。 解: next:… charDB ’F’ ;变量说明 … MOVAL, char CMPAL, ’A’ JBnext;注意:字符是无符号数,不要使用指令JL CMPAL, ’Z’ JAnext ADDchar, 20H;小写字母比大写字母的ASCII码大20H … 如果不知道(或忘了)大小写字母ASCII码之间的关系,那么,可用数值表达式’a’-’A’、’b’-’B’、…、’z’-’Z’等来代替具体的数值20H。 例5.17 编写一段程序,完成下面计算公式,其中:变量X和Y都是字类型。 解: … XDW ?;变量说明 YDW ? … MOV AX, X MOVBX, AX;用BX来临时存放计算结果 CMPAX, 0 JLEsetdata CMPAX, 500 JGcase3 ADDBX, 100D;BX=X+100 JMP setdata next:SUBBX, 50D;BX=X-50 setdata:MOVY, BX;把计算结果赋给变量Y … 例5.18 下面循环体的指令代码字节数超过128,试改写该循环。 … MOV CX, COUNT;给循环计数器赋初值(>0) again:循环体指令序列;循环体的首地址偏移量大于128 LOOP again 解: … MOV CX, COUNT again:循环体指令序列 DEC CX JNZ again;把LOOP指令改为条件转移指令 | |
![]() | ![]() |