• 汇编语言转移指令规则汇总


    摘要:虽然jmp指令提供了控制转移,但是它不允许进行任何复杂的判断。80x86条件跳转指令提供了这种判断。条件跳转指令是创建循环和实现其他条件执行语句,如if…endif的基本要素。

     
    条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像setcc指令):如果标志匹配成功,该指令就将控制转移到目标位置;如果匹配失败,CPU忽略该条件跳转指令而继续执行下一条指令。一些条件跳转指令只是简单测试符号位(sign)、进位位(carry)、溢出位(overflow)、零标志(zero)位的设置。例如,在执行一条sh1指令后,您需要测试进位标志,来判断sh1是否从操作数的高地址位移出一位。类似地,也可以在一条test指令后测试零标志位,来判断指定的位是否为1。大多数情况,在cmp指令之后执行条件跳转指令。cmp指令设置标志位,以便判断小于、大于、等于等情况。
     
    测试标志位的JCC指令
    指 令
    描 述
    条 件
    别 名
    相 反 指 令
    JC
    如果进位位被置位则跳转
    进位标志=1
    JB,JNAE
    JNC
    JNC
    如果进位位没有置位则跳转
    进位标志=0
    JNB,JAE
    JC
    JZ
    如果0标志被置位则跳转
    0标志=1
    JE
    JNZ
    JNZ
    如果0标志没有置位则跳转
    0标志=0
    JNE
    JZ
    (续表)
    指 令
    描 述
    条 件
    别 名
    相反指令
    JS
    如果符号位被置位则跳转
    符号标志=1
     
    JNS
    JNS
    如果符号位没有被置位则跳转
    符号标志=0
     
    JS
    JO
    如果溢出标志置位则跳转
    溢出标志=1
     
    JNO
    JNO
    如果溢出标志没有置位则跳转
    溢出标志=0
    JO
     
    JP
    如果奇偶校验位被置位则跳转
    奇偶校验标志=1
    JPE
    JNP
    JPE
    如果奇偶校验位为偶校验则跳转
    奇偶校验标志=1
    JP
    JPO
    JNP
    如果奇偶校验位没有被置位则跳转
    奇偶校验标志=0
    JPO
    JP
    JPO
    如果奇偶校验位为奇校验则跳转
    奇偶校验标志=0
    JNP
    JPE
    使用无符号数比较的JCC指令
    指 令
    描 述
    条 件
    别 名
    相反指令
    JA
    如果超过(>)则跳转
    进位标志=0,0标志=0
    JNBE
    JNA
    JNBE
    如果不低于或等于(不 <=)则跳转
    进位标志=0,0标志=0
    JA
    JBE
    JAE
    如果超过或等于(>=)则跳转
    进位标志=0
    JNC,JNB
    JNAE
    JNB
    如果不低于则跳转(不 <)
    进位标志=0
    JNC,JAE
    JB
    JB
    如果低于(<)则跳转
    进位标志=1
    JC,JNAE
    JNB
    JNAE
    如果不超过或等于(不>=)则跳转
    进位标志=1
    JC,JB
    JAE
    JBE
    如果低于或等于(<=)则跳转
    进位标志=1或0标志=1
    JNA
    JNBE
    JNA
    如果不超过(不>)则跳转
    进位标志=1或0标志=1
    JBE
    JA
    JE
    如果相等(=)则跳转
    0标志=1
    JZ
    JNE
    JNE
    如果不相等(<>)则跳转
    0标志=0
    JNZ
    JE
    使用有符号数比较的JCC指令
    指 令
    描 述
    条 件
    别 名
    相反指令
    JG
    如果大于(>)则跳转
    符号标志=溢出标志或0标志=0
    JNLE
    JNG
    JNLE
    如果小于或等于(<=)则跳转
    符号标志=溢出标志或0标志=0
    JG
    JLE
    JGE
    如果大于或等于(>=)则跳转
    符号标志=溢出标志
    JNL
    JGE
    JNL
    如果不小于(不<)则跳转
    符号标志=溢出标志
    JGE
    JL
    JL
    如果小于(<)则跳转
    符号标志<>溢出标志
    JNGE
    JNL
    JNGE
    如果大于或等于(>=)跳转
    符号标志<>溢出标志
    JL
    JGE
    JLE
    如果小于或等于(<=)跳转
    符号标志<>溢出标志或0标志=1
    JNG
    JNLE
    JNG
    如果不大于(不>)则跳转
    符号标志<>溢出标志或0标志=1
    JLE
    JG
    JE
    如果等于(=)则跳转
    0标志=1
    JZ
    JNE
    JNE
    如果不等于(<>)则跳转
    0标志=0
    JNZ
    JE
    loop跳转指令:
    注意这下面三行代码:
            
    1.      MOV     CX,3  
    2.      NEXT: MOVSB  
    3.       LOOP    NEXT  
         其中,loop的跳转机制:通过对cx进行自动递减来实现跳转
  • 相关阅读:
    Qt之悬浮球菜单
    electron中使用win.hide()再使用win.show()会引起窗口闪烁问题
    centos开放防火墙
    centos 设置CDN
    drfsave()更新操作
    os库获取/设置/删除环境变量
    def待学习的功能
    shell命令操作(jenkins执行后判断shell执行的对与错)
    使用templates模版
    centos安装vue前端环境
  • 原文地址:https://www.cnblogs.com/1996313xjf/p/5943711.html
Copyright © 2020-2023  润新知