JCC指令集

作者:Vesper Vei
7 分钟阅读

目录

目录

  1. JCC指令集

JCC指令集

JE / JZ

(jump if equal / jump if zero) 基本作用
当最近一次比较/算术结果为“等于”或结果为 0 时跳转。 跳转条件(逻辑)

ZF == 1

RFLAGS(完整图)

+-------------------------------+
| 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 == 0

RFLAGS(完整图)

+-------------------------------+
| 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 == 0

RFLAGS(完整图)

+-------------------------------+
| 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 == 1

RFLAGS(完整图)

+-------------------------------+
| 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 == OF

RFLAGS(完整图)

+-------------------------------+
| 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 != OF

RFLAGS(完整图)

+-------------------------------+
| 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 == 1

RFLAGS(完整图)

+-------------------------------+
| CF | ZF | SF | OF | PF | AF |
+-------------------------------+
| ? | ? | ? | [1] | ? | ? |
+-------------------------------+

等效表达

if (OF == 1) jump;

常见用途
检测有符号溢出(例如加法/减法结果无法用目标位宽表示)。

JNO

(jump if not overflow) 基本作用
当无溢出时跳转。

跳转条件

OF == 0

RFLAGS(完整图)

+-------------------------------+
| CF | ZF | SF | OF | PF | AF |
+-------------------------------+
| ? | ? | ? | [0] | ? | ? |
+-------------------------------+

等效表达

if (OF == 0) jump;

JS

(jump if sign) 基本作用
当结果为负(最高位为 1)时跳转,检查符号位。

跳转条件

SF == 1

RFLAGS(完整图)

+-------------------------------+
| CF | ZF | SF | OF | PF | AF |
+-------------------------------+
| ? | ? | [1] | ? | ? | ? |
+-------------------------------+

等效表达

if (SF == 1) jump; // result negative (signed)

常见用途
检测负数或有符号运算中负结果分支。

JNS

(jump if not sign) 基本作用
当结果为非负(最高位为 0)时跳转。

跳转条件

SF == 0

RFLAGS(完整图)

+-------------------------------+
| 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 == 1

RFLAGS(完整图)

+-------------------------------+
| CF | ZF | SF | OF | PF | AF |
+-------------------------------+
| ? | ? | ? | ? | [1] | ? |
+-------------------------------+

等效表达

if (PF == 1) jump;

常见用途
用于某些奇偶校验或老旧代码/协议中位校验逻辑。

JNP / JPO

(jump if not parity / jump if parity odd) 基本作用
当 PF == 0(奇校验)时跳转。

跳转条件

PF == 0

RFLAGS(完整图)

+-------------------------------+
| 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;

常见用途
短循环、字符串/块处理的特例分支。



关系图谱

Loading graph...