汇编(JCC指令)

JCC指令


什么是jcc指令?

JCC指令 是x86/x86-64架构中的一类条件跳转指令(Jump if Condition is Met),根据CPU标志寄存器(FLAGS)中的状态位决定是否跳转到目标地址。JCC中的“CC”代表条件码(Condition Code),表示不同的跳转条件

我们之前用的jmp是无条件跳转指令,那jcc指令就是统称的有条件跳转指令

JCC指令:

指令 条件 标志位条件 描述
JE/JZ Jump if Equal/Zero ZF=1 比较结果相等或算术结果为0
JNE/JNZ Jump if Not Equal/Non-Zero ZF=0 比较不等或结果非0
JG/JNLE Jump if Greater (Signed) ZF=0 且 SF=OF 有符号数大于
JGE/JNL Jump if Greater or Equal (Signed) SF=OF 有符号数大于等于
JL/JNGE Jump if Less (Signed) SF≠OF 有符号数小于
JLE/JNG Jump if Less or Equal (Signed) ZF=1 或 SF≠OF 有符号数小于等于
JA/JNBE Jump if Above (Unsigned) CF=0 且 ZF=0 无符号数大于
JAE/JNB Jump if Above or Equal (Unsigned) CF=0 无符号数大于等于
JB/JNAE Jump if Below (Unsigned) CF=1 无符号数小于
JBE/JNA Jump if Below or Equal (Unsigned) CF=1 或 ZF=1 无符号数小于等于
JS Jump if Sign (Negative) SF=1 结果为负数
JNS Jump if Not Sign SF=0 结果非负
JO Jump if Overflow OF=1 有符号溢出
JNO Jump if Not Overflow OF=0 无溢出
JC Jump if Carry CF=1 无符号运算进位/借位
JNC Jump if Not Carry CF=0 无进位/借位

汇编(JCC指令)_第1张图片

CF Carry Flag

若算术操作产生的结果在最高有效位发生进位或借位,则将其置1,反之清零,这个标志通常用来指示无符号整形运算的溢出状态

	mov al,0xfe
	add al,al,2

BF Parity Flag

如果结果的最低有效字节包含的偶数个1,则该位置1,否则清零(利用PF可进行奇偶校验检查)

	mov al,0ce
	add al,0

AF Auxilizry Carry Flag

如果算术操作在结果的第3位发生进位或借位则将该标志置1,否则清零(该标志用于二进制编码十进制算术 (BCD运算))

ZF Zero Flag

如果运算的结果为0,则将其置1,否则清零(常与cmp或者test等指令一起使用)

	mov eax,100
	mov ecx,100
	cmp eax,ecx
	//或者
	test eax,eax

SF Sign Flag

如果该标志被设置为有符号整形的最高有效位(看一个运算结果是正的还是负的 0为正,反之为负)

	// 运行后fs为1
	mov al,0x7f
	add al,2
	
	// 运行后fs为0
	mov al,0xef
	add al,2

OF Overflow Flag

溢出标志of用于反映有符号数运算所得结果是否溢出(无符号数看CF位,有符号数看OF位)

	mov al,0x7f
	add al,2

DF Directin Flag

这个方向标志控制串指令(MOVS,CMPS,SCAS,LODS,STOS),设置df标志使得串指令自动递减(从高地址向低地址方向处理字符串),清除该标志使得串指令自动递增(STD以及CLD指令分别用于设置以及清除df标志)

你可能感兴趣的:(汇编,汇编)