JCC指令集
目录
JCC指令集
JE / JZ
(jump if equal / jump if zero)
基本作用
当最近一次比较/算术结果为“等于”或结果为 0 时跳转。
跳转条件(逻辑)
ZF == 1RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF ||carry|zero |sign |overflow|parity|aux|+-------------------------------+| ? | [1] | ? | ? | ? | ? |+-------------------------------+等效表达
if (ZF == 1) jump;常见用途
字符串或数值相等判断后分支(cmp 后常用)。
JNE / JNZ
(jump if not equal / jump if not zero)
基本作用
当最近一次比较/算术结果不等或结果非 0 时跳转。
跳转条件
ZF == 0RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | [0] | ? | ? | ? | ? |+-------------------------------+等效表达
if (ZF == 0) jump;常见用途
循环继续、查找失败继续等。
JA / JNBE
(jump if above / jump if not below or equal) (无符号 a > b)
基本作用
用于无符号比较,表示严格大于(a > b,unsigned)。
跳转条件
(CF == 0) && (ZF == 0)RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| [0] | [0] | ? | ? | ? | ? |+-------------------------------+等效表达
if (!CF && !ZF) jump; // unsigned a > b常见用途
内存长度、无符号索引比较等。
JAE / JNB / JNC
(jump if above or equal / jump if not below / jump if not carry) (无符号 a >= b)
基本作用
无符号比较的 >=:没有借位(carry)。
跳转条件
CF == 0RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| [0] | ? | ? | ? | ? | ? |+-------------------------------+等效表达
if (!CF) jump; // unsigned a >= b常见用途
边界检查(unsigned)。
备注
JAE = JNB = JNC(常见别名)。
JB / JNAE / JC
(jump if below / jump if not above or equal / jump if carry) (无符号 a < b)
基本作用
无符号小于(有借位)。
跳转条件
CF == 1RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| [1] | ? | ? | ? | ? | ? |+-------------------------------+等效表达
if (CF == 1) jump; // unsigned a < b常见用途
错误/边界判断。
备注:JC(jump if carry)是 JB 的别名。
JBE / JNA
(jump if below or equal / jump if not above) (无符号 a <= b)
基本作用
无符号小于等于。
跳转条件
(CF == 1) || (ZF == 1)RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| [1] | ? | ? | ? | ? | ? || OR | [1] | | | | |+-------------------------------+等效表达
if (CF || ZF) jump; // unsigned a <= b常见用途
数组/缓冲边界检查(unsigned)。
JG / JNLE
(jump if greater / jump if not less or equal) (有符号 a > b)
基本作用
用于有符号整数比较,判断严格大于(a > b,signed)。
跳转条件
(ZF == 0) && (SF == OF)RFLAGS(完整图)
+-------------------------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------------------------+| ? | [0] | [SF]| [OF]| ? | ? || | | SF==OF (must be true) |+-------------------------------------------------+等效表达
if ((ZF == 0) && (SF == OF)) jump; // signed a > b典型用途
有符号比较分支(如带符号整数排序或条件判断)。
JGE / JNL
(jump if greater or equal / jump if not less) (有符号 a >= b)
基本作用
有符号 >=。
跳转条件
SF == OFRFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | ? | [SF] | [OF] | ? | ? || (require SF == OF) |+-------------------------------+等效表达
if (SF == OF) jump; // signed a >= b典型用途
带符号边界判断。
JL / JNGE
(jump if less / jump if not greater or equal) (有符号 a < b)
基本作用
有符号小于。
跳转条件
SF != OFRFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | ? | [SF] | [OF] | ? | ? || (require SF != OF) |+-------------------------------+等效表达
if (SF != OF) jump; // signed a < b典型用途
有符号比较分支(负数相关判断)。
JLE / JNG
(jump if less or equal / jump if not greater) (有符号 a <= b)
基本作用
有符号小于等于。
跳转条件
(ZF == 1) || (SF != OF)RFLAGS(完整图)
+------------------------------------------------+| CF | ZF | SF | OF | PF | AF |+------------------------------------------------+| ? | [1] | [SF]| [OF]| ? | ? || OR (or SF != OF) |+------------------------------------------------+等效表达
if (ZF || (SF != OF)) jump; // signed a <= b典型用途
有符号范围检测(<=)。
JO
(jump if overflow)
基本作用
当上一次算术操作发生溢出(有符号溢出)时跳转。
跳转条件
OF == 1RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | ? | ? | [1] | ? | ? |+-------------------------------+等效表达
if (OF == 1) jump;常见用途
检测有符号溢出(例如加法/减法结果无法用目标位宽表示)。
JNO
(jump if not overflow)
基本作用
当无溢出时跳转。
跳转条件
OF == 0RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | ? | ? | [0] | ? | ? |+-------------------------------+等效表达
if (OF == 0) jump;JS
(jump if sign)
基本作用
当结果为负(最高位为 1)时跳转,检查符号位。
跳转条件
SF == 1RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | ? | [1] | ? | ? | ? |+-------------------------------+等效表达
if (SF == 1) jump; // result negative (signed)常见用途
检测负数或有符号运算中负结果分支。
JNS
(jump if not sign)
基本作用
当结果为非负(最高位为 0)时跳转。
跳转条件
SF == 0RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | ? | [0] | ? | ? | ? |+-------------------------------+等效表达
if (SF == 0) jump;JP / JPE
(jump if parity / jump if parity even)
基本作用
当最近一次算术或逻辑结果的偶校验(parity)为偶数(即 PF == 1)时跳转。PF 表示结果低 8 位中 1 的个数为偶数。
跳转条件
PF == 1RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | ? | ? | ? | [1] | ? |+-------------------------------+等效表达
if (PF == 1) jump;常见用途
用于某些奇偶校验或老旧代码/协议中位校验逻辑。
JNP / JPO
(jump if not parity / jump if parity odd)
基本作用
当 PF == 0(奇校验)时跳转。
跳转条件
PF == 0RFLAGS(完整图)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | ? | ? | ? | [0] | ? |+-------------------------------+等效表达
if (PF == 0) jump;JCXZ / JECXZ / JRCXZ
(jump if CX/ECX/RCX == 0)
基本作用
检查寄存器 CX/ECX/RCX 是否为 0(按位比较立即数 0),若为 0 则跳转。常用于循环计数器为 0 的快速分支(短跳)。
跳转条件
(CX == 0) 或 (ECX == 0) 或 (RCX == 0)RFLAGS(完整图)
(这些指令不直接依赖 RFLAGS 的 CF/ZF 等,但逻辑上等价于比较寄存器是否为 0,因此可以理解为依赖寄存器值而非 FLAGS;为一致起见仍示意 FLAGS)
+-------------------------------+| CF | ZF | SF | OF | PF | AF |+-------------------------------+| ? | ? | ? | ? | ? | ? |+-------------------------------+等效表达
if (RCX == 0) jump;常见用途
短循环、字符串/块处理的特例分支。