Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

汇编常用跳转指令及检测的标志位

汇编常用跳转指令及检测的标志位

助记符 条件 表达式
无符号数 JC/JB/JNAE CF=1 A < B
JNC/JAE/JNB CF=0 A ≥ B
JA/JNBE CF=0 and ZF=0 A > B
JBE/JNA CF=1 or ZF=1 A ≤ B
有符号数 JL/JNGE SF ≠ OF A < B
JGE/JNL SF=OF A ≥ B
JG/JNLE SF=OF and ZF=0 A > B
JLE/JNG SF ≠ OF or ZF=1 A ≤ B
无符号数或 JZ/JE ZF=1 A = B
有符号数 JNZ/JNE ZF=0 A != B
其他 JS SF=1 结果为负
JNS SF=0 结果为正
提示:

1. JC/JNAE 会被汇编器汇编成 JB
2. JNC/JAE 会被汇编器汇编成 JNB
3. JNE 会被汇编器汇编成 JNZ
汇编常用指令对标志位的影响
加法指令 ADD (addition)

指令对标志位的影响:

CF=1 最高有效位向高位有进位

CF=0 最高有效位向高位无进位

OF=1 两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反。

OF=0 两个不同符号数相加,或同符号数相加,结果符号与其相同。

带进位加法指令 ADC (add with carry)

指令对标志位的影响:

CF=1 最高有效位向高位有进位

CF=0 最低有效位相高位无进位

OF=1 两个同符号数相加,结果符号与其相反,

OF=0 两个同符号数相加,或同符号相加,结果符号与其相同

加 1 指令 INC (increament)

指令对标志位的影响:

对 CF 无影响

OF=1 两个同符号数相加,结果符号与其相反,

OF=0 两个同符号数相加,或同符号相加,结果符号与其相同。

减法指令 SUB (subtract)

指令对标志位的影响:

CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)

CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)

OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

带借位减法指令 SBB (subtract with borrow)

指令对标志位的影响:

CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)

CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

减 1 指令 DEC (decrement)

指令对标志位的影响:

对 CF 无影响

OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

比较指令 CMP (compare)

指令对标志位的影响:

CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)

CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)

OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

求补指令 NEG (negate)

指令对标志位的影响:

CF=1 不为 0 的操作数求补时

CF=0 为 0 的操作数求补时

OF=1 操作数为-128(字节运算)或操作数为-32768(字运算)

OF=0 当求补运算的操作数不为-128(字节)或-32768(字)时

无符号乘法指令 MUL (unsigned multiple) 有符号乘法指令 IMUL(signed muliple)

指令对标志位的影响:乘法指令只影响标志位 CF 和 OF,其他条件码位无定义。

MUL 指令的条件码设置为:

CF OF=0 0 乘积的高一半为 0(字节操作的(AH)或字操作的(DX))

CF OF=1 1 乘积的高一半不为 0

IMUL 指令的条件码设置为:

CF OF=0 0 乘积的高一半为低一半的符号扩展.
CF OF=1 1 其他情况

无符号数除法 DIV (unsigned divide) 带符号数除法 IDIV (singed divide)

指令对标志位的影响:不影响条件码。

逻辑与 AND (logic and)

指令对标志位的影响:

指令执行后 CF 和 OF 置零,AF 无定义。

PF=1 结果操作数中 1 的个数为偶数时置 1

PF=0 结果操作数中 1 的个数为奇数时置 0

逻辑或 or (logic or)

指令对标志位的影响:

令执行后 CF 和 OF 置零,AF 无定义。

PF=1 结果操作数中 1 的个数为偶数时置 1

PF=0 结果操作数中 1 的个数为奇数时置 0

逻辑非 NOT (logic not)

指令对标志位的影响:对标志位无影响

异或 XOR (exclusice or)

指令对标志位的影响:

令执行后 CF 和 OF 置零,AF 无定义。

PF=1 结果操作数中 1 的个数为偶数时置 1

PF=0 结果操作数中 1 的个数为奇数时置 0

测试指令 TEST

指令对标志位的影响:
令执行后 CF 和 OF 置零,AF 无定义。

PF=1 结果操作数中 1 的个数为偶数时置 1

PF=0 结果操作数中 1 的个数为奇数时置 0

逻辑左移 SHL (shift logical left)

指令对标志位的影响:CF=移入的数值

OF=1 当 cnt=1 时,移动后最高位的值发生变化。

OF=0 当 cnt=1 时,移动时最高位的值未发生变化。

逻辑右移 SHR (shift logical right)

指令对标志位的影响:CF=移入的数值

OF=1 当 cnt=1 时,移动后最高位的值发生变化。

OF=0 当 cnt=1 时,移动时最高位的值未发生变化。

算术左移 SAL (shift arithmetic left)

指令对标志位的影响:CF=移入的数值

OF=1 当 cnt=1 时,移动后最高位的值发生变化。

OF=0 当 cnt=1 时,移动时最高位的值未发生变化。

算术右移 SAR (shift arithmetic right)

指令对标志位的影响:CF=移入的数值

OF=1 当 cnt=1 时,移动后最高位的值发生变化。

OF=0 当 cnt=1 时,移动时最高位的值未发生变化。

循环左移 ROL (rotate left)

指令对标志位的影响:CF=移入的数值

OF=1 当 cnt=1 时,移动后最高位的值发生变化。

OF=0 当 cnt=1 时,移动时最高位的值未发生变化。


循环右移 ROR (rotate right)

指令对标志位的影响:CF=移入的数值

OF=1 当 cnt=1 时,移动后最高位的值发生变化。

OF=0 当 cnt=1 时,移动时最高位的值未发生变化。

带进位的循环左移 RCL (rotate left through carry)

指令对标志位的影响:CF=移入的数值。

OF=1 当 cnt=1 时,移动后最高位的值未发生变化。

OF=0 当 cnt=1 时,移动后最高位的值发生变化。

SF、ZF、PF 标志位不受影响。

带进位的循环右移 RCR (rotate right through carry)

指令对标志位的影响:CF=移入的数值。

OF=1 当 cnt=1 时,操作数最高位的值未发生变化。

OF=0 当 cnt=1 时,操作数最高位的值发生变化。

SF、ZF、PF 标志位不受影响。

串传送 MOVSB / MOVSW (move string byte/word)

指令对条件码的影响:不影响条件码。

存串 STOSB / STOSW (stroe from string byte/word)

指令对条件码的影响:不影响条件码。

取串 LODSB / LODSW (load from string byte/word)

指令对条件码的影响:不影响条件码。

串比较 CMPSB / CMPSW (compare string byte/word)

指令对条件码的影响:

CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)

OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

串扫描 SCASB / SCASW (scan string byte / word)

指令对条件码的影响:

CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)

CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)

OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。

OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

条件转移指令

指令的汇编格式及功能 根据条件码的值转移:

49、JZ(JE) OPR ZF=1

50、JNZ(JNE) OPR ZF=0

51、JS OPR SF=1

52、JNS OPR SF=0

53、JO OPR OF=1

54、JNO OPR OF=0

55、JP OPR PF=1

56、JNP OPR PF=0

57、JC OPR CF=1

58、JNC OPR CF=0

比较两个无符号数,根据比较的结果转移

59、JB(JNAE,JC) OPR CF=1 被减数小于减数则转移

60、JNB(JAE,JNC) OPR CF=0 被减数大于或等于减数则转移


61、JBE(JNA) OPR CF 或 ZF=1 被减数小于或等于减数则转移

62、JNBE(JA) OPR CF 或 ZF=0 被减数大于减数则转移

比较两个带符号数,根据比较结果转移

63、JL/JNGE OPR SF 异或 OF=1 被减数小于减数则转移

64、JNL/JGE SF 异或 OF=0 被减数不小于减数则转移

65、JLE/JNE (SF 异或 OF)与 ZF=1 被减数不大于减数则转移

66、JNLE/JG (SF 异或 OF)与 ZF=0 被减数大于减数则转移

根据 CX 寄存器的值转移

67、JCXZ (CX)=0 CX 内容为零 则转移

You might also like