zoukankan      html  css  js  c++  java
  • x86汇编 条件跳转

    条件跳转表

     

    汇编语言-条件跳转指令  

    直接转移指令
    指令格式机器码测试标志条件说明符号
     JO       OPR 70  OF=1  结果有溢出  
     JNO      OPR 71  OF=0  结果无溢出  
     JC       OPR 72  CF=1  小于  <
     JNC      OPR 73  CF=0  大于或等于  >=
     JZ/JE    OPR 74  ZF=1  结果为0  ==
     JNZ/JNE  OPR 75  ZF=0  结果非0  !=
     JS       OPR 78  SF=1  结果为负  <0
     JNS      OPR 79  SF=0  结果为正  >0
     JP/JPE   OPR 7A  PF=1  结果中1的个数为偶数  
     JNP/JPO  OPR 7B  PF=0  结果中1的个数为奇数  
    间接转移指令-无符号数
    指令格式机器码测试标志条件说明符号
     JB/JNAE  OPR 72  CF=1  低于/不高于且不等于  <
     JNB/JAE  OPR 73  CF=0  不低于/高于或等于  >=
     JBE/JNA  OPR 76  (CF=1)|(ZF=1)  低于或等于/不高于  <=
     JNBE/JA  OPR 77  (CF=0)&(ZF=0)  不低于且不等于/高于  >
    间接转移指令-有符号数
    指令格式机器码测试标志条件说明符号
     JL/JNGE  OPR 7C  (SF^OF)=1  小于/不大于且不等于  <
     JNL/JGE  OPR 7D  (SF^OF)=0  不小于/大于或等于  >=
     JLE/JNG  OPR 7E  (SF^OF)=1|(ZF=1)  小于或等于/不大于  <=
     JNLE/JG  OPR 7F  (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"也可以根据标志寄存器的相关标志位进行转移;

  • 相关阅读:
    MyBatis动态SQL
    Mybatis基础配置
    MyBatis的手动映射与模糊查询
    Struts2框架和SpringMvc框架的区别
    Mybatis和Hibernate框架的区别
    Servlet
    JSP数据交互(二)
    JSP数据交互(一)
    Spark朴素贝叶斯(naiveBayes)
    【安卓开发】Android为什么选择binder
  • 原文地址:https://www.cnblogs.com/DirWang/p/12150259.html
Copyright © 2011-2022 走看看