汇编条件判断整理(CMP/TEST的实现)
执行到CMP指令的时候会读取这两个寄存器的内容,并加以减法运算,结果本身不保留,并按照结果设置符号位(属算术运算)。
当执行到TEST指令的时候会读取这两个寄存器的内容,并加以按位与运算,结果不保留,并按照结果设置符号位(属逻辑运算)。
JCC指令 | 含义 | 检查符号 | C含义 |
---|
JZ/JE | 结果若为0则跳转,若相等则跳转 | ZF=1 | if(i == j);if(i = 0); |
JNZ/JNE | 若不为0则跳转;若不相等则跳转 | ZF=0 | if(i != j);if(i != 0); |
JS | 若为负则跳转 | SF=1 | if (i < 0); |
JNS | 若为正则跳转 | SF=0 | if (i > 0); |
JP/JPE | 若1出现的次数为偶数则跳转 | PF=1 | (null) |
JNP/JPO | 若1出现次数为奇数则跳转 | PF=0 | (null) |
JO | 若溢出则跳转 | OF=1 | (null) |
JNO | 若无溢出则跳转 | OF=0 | (null) |
JC/JB/JNAE | 若进位则跳转;若低于则跳转;若不高于等于则跳转(无符号数) | CF=1 | if (i < j); |
JNC/JNB/JAE | 若无进位则跳转;若不低于则跳转;若高于等于则跳转 (无符号数) | CF=0 | if (i >= j); |
JBE/JNA | 若低于等于则跳转;若不高于则跳转(无符号数) | ZF=1或CF=1 | if (i <= j); |
JNBE/JA | 若不低于等于则跳转;若高于则跳转(无符号数) | ZF=0或CF=0 | if (i > j); |
JL/JNGE | 若小于则跳转;若不大于等于则跳转(有符号数) | SF != OF | if (si < sj); |
JNL/JGE | 若不小于则跳转;若大于等于则跳转(有符号数) | SF = OF | if (si >= sj); |
JLE/JNG | 若小于等于则跳转;若不大于则跳转(有符号数) | SF != OF 或 ZF=1 | if (si <= sj); |
JNLE/JG | 若不小于等于则跳转;若大于则跳转(有符号数) | SF=0F 且 ZF=0 | if(si>sj) |
VC格式 | OV | UP | EI | PL | ZR | AC | PE | CY |
---|
FLAGS位 | OF | DF | IF | SF | ZF | AF | PF | CF |
含义 | 溢出 | 方向 | 中断允许 | 符号 | 为零 | 辅助进位 | 奇偶 | 进位 |