汇编语言-条件跳转指令

http://bdxnote.blog.163.com/blog/static/84442352015327011988/

 

 

直接转移指令
指令格式机器码测试标志条件说明符号
 JO       OPR70 OF=1 结果有溢出 
 JNO      OPR71 OF=0 结果无溢出 
 JC       OPR72 CF=1 小于 <
 JNC      OPR73 CF=0 大于或等于 >=
 JZ/JE    OPR74 ZF=1 结果为0 ==
 JNZ/JNE  OPR75 ZF=0 结果非0 !=
 JS       OPR78 SF=1 结果为负 <0
 JNS      OPR79 SF=0 结果为正 >0
 JP/JPE   OPR7A PF=1 结果中1的个数为偶数 
 JNP/JPO  OPR7B PF=0 结果中1的个数为奇数 

 

 

间接转移指令-无符号数
指令格式机器码测试标志条件说明符号
 JB/JNAE  OPR72 CF=1 低于/不高于且不等于 <
 JNB/JAE  OPR73 CF=0 不低于/高于或等于 >=
 JBE/JNA  OPR76 (CF=1)|(ZF=1) 低于或等于/不高于 <=
 JNBE/JA  OPR77 (CF=0)&(ZF=0) 不低于且不等于/高于 >

 

 

间接转移指令-有符号数
指令格式机器码测试标志条件说明符号
 JL/JNGE  OPR7C (SF^OF)=1 小于/不大于且不等于 <
 JNL/JGE  OPR7D (SF^OF)=0 不小于/大于或等于 >=
 JLE/JNG  OPR7E (SF^OF)=1|(ZF=1) 小于或等于/不大于 <=
 JNLE/JG  OPR7F (SF^OF)=0&(ZF=0) 不小于且不等于/大于 >


理解方法:
N: Not
E: Equal
A: Above
B: Below
L: Less    (Little的比较级)
G: Greater (Great的比较级)

Less Than   : 小于
Greater Than: 大于

(SF^OF)=1 --> SF=0,OF=1 --> a < b
              SF=1,OF=0 --> a < b

(SF^OF)=0 --> SF=1,OF=1 --> a >  b
              SF=0,OF=0 --> a >= b                          

条件跳转指令是根据标志寄存器中的相关标志位的值来进行跳转的,因此,条件跳转指令只能与那些能够影响标志寄存器的相关标志位的指令配合使用;
能够直接影响标志寄存器的相关标志位的指令有:
1、算术运算指令 : add、sub、adc、sbb、inc、dec、neg、mul、div、imul、idiv,等等;
2、按位逻辑运算 : and、or、xor、not,等等;
3、比较运算指令 : cmp、test;
4、移位操作指令 : shr、shl、sar、sal、ror、rol、rcr、rcl;
5、BCD数调整指令: aaa、aas、daa、das、aam、aad;
6、标志处理指令 : clc、stc、cmc、cld、std、cli、sti;

能够间接影响标志寄存器的相关标志位的指令序列有:
pushf --> pop eax --> modify eax --> push eax --> popf
即:
pushf
pop eax
modify eax
push eax
popf
jbe OPR
这样的一系列操作之后,条件转移指令"jbe OPR"也可以根据标志寄存器的相关标志位进行转移;

程序员学习公众号:

 

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值