代号3 发表于 2018-8-25 11:36:17

高效准确记住JCC条件跳转


        刚接触汇编对跳转很烦 尤其是是对JCC跳转特别烦 因为好麻烦,所以总结下JCC跳转的规律,记录下心得
        JCC有条件跳转根据自己的总结可以分为7类
        1·计数判断跳转
        2·等于判断跳转
        3·CMP比较跳转
        4·溢出判断跳转
        5·进位判断跳转
        6·奇偶校验判断跳转
        7·正负数判断跳转
        根据自己的实践心得 等于判断跳转 和 CMP比较判断跳转 最适合小白设计分支循环结构的
        在JCC跳转指令中经常有一条机器指令2种助记符的的描述 在CMP比较跳转和 奇偶校验判断跳转中较为常见
        在CMP比较跳转中,总结有符号数比较可以分为L系和G系 无符号数可以分为A系和B系
        二者的对同一条机器指令的助记符表示相反
       如有符号数比较中:

        JL rel8 小于(SF<>OF)时短跳转
        JNGE rel8 不大于或等于(SF<>OF)时跳转

        JG rel5 大于 (ZF=0且SF=OF)时短跳转
        JNLE rel8 不小于或等于(ZF=0且 SF=OF)时跳转
       
        在对7种判断跳转中可以结合FLAGS寄存器助记 如进位判断跳转:
       
        JC rel8 进位(CF=1)时段短跳转
        JNC rel8 无进位(CF=0)时段跳转
       
        CF为进位标志当运算结果产生进位(加法产生进位 减法产生借位)的时候 CF标志位置为1 JC JNC可以用JMP CF来进行助记

        同样
        JO JNO 是描述是否可以通过OF位进行溢出判断的跳转指令
        JP JNP是描述是否可以通过PF位进行奇偶校验判断的跳转指令
        JS JNS是描述是否可以通过SF位进行正负数判断的跳转指令

        JZ rel8 为零(ZF=1)时跳转
        JNZ rel8不为零(ZF=0)时跳转
        可以通过 JMP ZERO (0则跳转)来助记

        在JCC指令中2个字母跳转 JB JC JE JO JP JS JZ 都是表示置1的时候进行跳转,只有JA(CF=0且ZF=0)高于时跳转(无符号数中使用)是在置0的时候跳转
       
        注意:在使用奇偶校验的时候要注意到PF位的检测机制是对16位寄存器中的AH和AL段进行检测,当AL段中存在1的时候,有0或偶数个1则PF=1
当有奇数个1的时候 PF=0 ,当AL段中全部为0的时候 对AH段进行检测 同样是检测1的个数,当AX段中全部为0的时候 则PF校验位不再进行高位校验
所以PF位的校验与数值本身是否为奇数偶数并不是一一对应的,而是和数值中AX中1的个数有关


       



页: [1]
查看完整版本: 高效准确记住JCC条件跳转