Jcc
如果条件已满足则跳转
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
77 cb | JA rel8 | D | 有效 | 有效 | 如果跳到以上(CF=0和ZF=0)则跳得短. |
73 cb | JAE rel8 | D | 有效 | 有效 | 如果跳到以上或等于(CF=0),则跳得短。 |
72 cb | JB rel8 | D | 有效 | 有效 | 如低于(CF=1),则跳得短。 |
76 cb | JBE rel8 | D | 有效 | 有效 | 如果低于或等于(CF=1或ZF=1),则跳得短. |
72 cb | JC rel8 | D | 有效 | 有效 | 携带时跳得短(CF=1). |
E3 cb | JCXZ rel8 | D | 不可编码 | 有效 | 如果 CX 寄存器为 0 , 则跳过短处 。 |
E3 cb | JECXZ rel8 | D | 有效 | 有效 | 如果 ECX 寄存器为 0, 则跳过短处 。 |
E3 cb | JRCXZ rel8 | D | 有效 | 不可编码 | 如果 RCX 寄存器为 0, 则跳过短处 。 |
74 cb | JE rel8 | D | 有效 | 有效 | 如果等于( ZF=1) 则跳得短 。 |
7F cb | JG rel8 | D | 有效 | 有效 | 如果较大则跳得短( ZF=0, SF=OF) 。 |
7D cb | JGE rel8 | D | 有效 | 有效 | 如果大于或等于(SF=OF),则跳过短处。 |
7C cb | JL rel8 | D | 有效 | 有效 | 如果跳得少则跳得短( SF OF) 。 |
7E cb | JLE rel8 | D | 有效 | 有效 | 如果小于或等于(ZF=1或SF OF),则跳得短。 |
76 cb | JNA rel8 | D | 有效 | 有效 | 如果跳得不高,则跳得短(CF=1或ZF=1). |
72 cb | JNAE rel8 | D | 有效 | 有效 | 如果跳得不高或相等,则跳得短(CF=1). |
73 cb | JNB rel8 | D | 有效 | 有效 | 如果跳到下面,则跳得短(CF=0). |
77 cb | JNBE rel8 | D | 有效 | 有效 | 跳跃如果不低于或等于(CF=0和ZF=0) |
73 cb | JNC rel8 | D | 有效 | 有效 | 如果不携带,则跳得短(CF=0). |
75 cb | JNE rel8 | D | 有效 | 有效 | 跳过短或不等于( ZF=0) 。 |
7E cb | JNG rel8 | D | 有效 | 有效 | 如果跳得不大, 则跳得短( ZF=1 或 SF OF) 。 |
7C cb | JNGE rel8 | D | 有效 | 有效 | 如果跳得不高或相等,则跳得短。 |
7D cb | JNL rel8 | D | 有效 | 有效 | 跳过( SF = OF) 。 |
7F cb | JNLE rel8 | D | 有效 | 有效 | 跳转短( ZF=0, SF=OF) 。 |
71 cb | JNO rel8 | D | 有效 | 有效 | 如不溢出,跳跃短(OF=0). |
7B cb | JNP rel8 | D | 有效 | 有效 | 跳跃短( 如果不是等值的话) (PF=0) 。 |
79 cb | JNS rel8 | D | 有效 | 有效 | 如果未签名, 则跳转短( SF=0) 。 |
75 cb | JNZ rel8 | D | 有效 | 有效 | 跳过短( 如果不是零) (ZF=0) 。 |
70 cb | JO rel8 | D | 有效 | 有效 | 如果溢出则跳得短( OF=1) 。 |
7A cb | JP rel8 | D | 有效 | 有效 | 如果对等则跳得短(PF=1). |
7A cb | JPE rel8 | D | 有效 | 有效 | 如果偶数跳得短( PF=1) 。 |
7B cb | JPO rel8 | D | 有效 | 有效 | 如果偶数( PF = 0) , 则跳得短 。 |
78 cb | JS rel8 | D | 有效 | 有效 | 如果符号跳过( SF=1) 。 |
74 cb | JZ rel8 | D | 有效 | 有效 | 如果零则跳得短( ZF = 1). |
0F 87 cw | JA rel16 | D | 不支持 | 有效 | 如果上方跳跃( CF=0 和 ZF=0),则不支持64位模式 。 |
0F 87 cd | JA rel32 | D | 有效 | 有效 | 如上跳则跳近(CF=0和ZF=0). |
0F 83 cw | JAE rel16 | D | 不支持 | 有效 | 如果上方或等值( CF=0) 跳转到附近, 不支持64位模式 。 |
0F 83 cd | JAE rel32 | D | 有效 | 有效 | 跳到上方或等值处( CF=0) 。 |
0F 82 cw | JB rel16 | D | 不支持 | 有效 | 如果在下方跳跃( CF=1),则不支持64位模式 。 |
0F 82 cd | JB rel32 | D | 有效 | 有效 | 跳到下方( CF=1) 。 |
0F 86 cw | JBE rel16 | D | 不支持 | 有效 | 如果低于或等于(CF=1或ZF=1),则跳转到附近。 |
0F 86 cd | JBE rel32 | D | 有效 | 有效 | 如果低于或等于(CF=1或ZF=1),则跳近。 |
0F 82 cw | JC rel16 | D | 不支持 | 有效 | 如果携带( CF=1) , 跳转到附近 。 不支持 64 位模式 。 |
0F 82 cd | JC rel32 | D | 有效 | 有效 | 如果携带(CF=1),则跳近点。 |
0F 84 cw | JE rel16 | D | 不支持 | 有效 | 如果等于( ZF=1) , 则跳转到附近 。 在 64 位模式中不支持 。 |
0F 84 cd | JE rel32 | D | 有效 | 有效 | 如果等于( ZF=1) , 则跳到附近 。 |
0F 84 cw | JZ rel16 | D | 不支持 | 有效 | 如果 0 (ZF=1) 跳近, 不支持64位模式 。 |
0F 84 cd | JZ rel32 | D | 有效 | 有效 | 跳近 0 (ZF=1) 。 |
0F 8F cw | JG rel16 | D | 不支持 | 有效 | 如果更大, 则跳近( ZF=0 和 SF= OF) 。 不支持64 位模式 。 |
0F 8F cd | JG rel32 | D | 有效 | 有效 | 跳近( ZF=0, SF=OF) 。 |
0F 8D cw | JGE rel16 | D | 不支持 | 有效 | 如果大于或等于( SF=OF) , 跳转到附近。 不支持64位模式 。 |
0F 8D cd | JGE rel32 | D | 有效 | 有效 | 如果大于或等于(SF=OF),则跳近。 |
0F 8C cw | JL rel16 | D | 不支持 | 有效 | 跳转到小于( SF OF) 。 不支持 64 位模式 。 |
0F 8C cd | JL rel32 | D | 有效 | 有效 | 跳近( SF OF) 。 |
0F 8E cw | JLE rel16 | D | 不支持 | 有效 | 如果小于或等于(ZF=1或SF OF),则跳转到附近。不支持64位模式。 |
0F 8E cd | JLE rel32 | D | 有效 | 有效 | 如果小于或等于( ZF=1 或 SF OF) , 则跳近 。 |
0F 86 cw | JNA rel16 | D | 不支持 | 有效 | 如果不是上方( CF=1 或 ZF=1 ),则跳转到附近。 不支持64位模式 。 |
0F 86 cd | JNA rel32 | D | 有效 | 有效 | 跳近( 如果不是以上的话) (CF=1 或 ZF= 1) 。 |
0F 82 cw | JNAE rel16 | D | 不支持 | 有效 | 跳转到上方或相等处( CF=1), 不支持64位模式 。 |
0F 82 cd | JNAE rel32 | D | 有效 | 有效 | 跳近( 如果不是上方或等于) (CF=1) 。 |
0F 83 cw | JNB rel16 | D | 不支持 | 有效 | 在64位模式下不支持的跳转到( CF=0) 。 |
0F 83 cd | JNB rel32 | D | 有效 | 有效 | 跳近或低于(CF=0) |
0F 87 cw | JNBE rel16 | D | 不支持 | 有效 | 跳转到接近或等于(CF=0和ZF=0),不支持64位模式. |
0F 87 cd | JNBE rel32 | D | 有效 | 有效 | 跳跃接近或等于(CF=0和ZF=0)。 |
0F 83 cw | JNC rel16 | D | 不支持 | 有效 | 如果不携带( CF=0) , 则跳转到附近 。 不支持 64 位模式 。 |
0F 83 cd | JNC rel32 | D | 有效 | 有效 | 如不携带则跳近(CF=0). |
0F 85 cw | JNE rel16 | D | 不支持 | 有效 | 跳近或不等于( ZF=0) 不支持64位模式 。 |
0F 85 cd | JNE rel32 | D | 有效 | 有效 | 跳近( ZF=0) 。 |
0F 8E cw | JNG rel16 | D | 不支持 | 有效 | 跳近( 如果不是更大的话) (ZF=1 或 SF OF) 。 不支持64位模式 。 |
0F 8E cd | JNG rel32 | D | 有效 | 有效 | 跳近( ZF=1 或 SF OF) 。 |
0F 8C cw | JNGE rel16 | D | 不支持 | 有效 | 跳转到( SF OF) 。 不支持 64 位模式 。 |
0F 8C cd | JNGE rel32 | D | 有效 | 有效 | 跳近( 如果不是更大或相等) 。 |
0F 8D cw | JNL rel16 | D | 不支持 | 有效 | 跳近( SF=OF) 。 不支持64位模式 。 |
0F 8D cd | JNL rel32 | D | 有效 | 有效 | 跳近( SF = OF) 。 |
0F 8F cw | JNLE rel16 | D | 不支持 | 有效 | 跳转到不小于或等于( ZF=0 和 SF=OF) 。 不支持64位模式 。 |
0F 8F cd | JNLE rel32 | D | 有效 | 有效 | 跳近( ZF=0, SF=OF) 。 |
0F 81 cw | JNO rel16 | D | 不支持 | 有效 | 如果不是溢出, 则跳转到附近( OF=0) 。 不支持64位模式 。 |
0F 81 cd | JNO rel32 | D | 有效 | 有效 | 如果不是溢出,则跳近(OF=0) |
0F 8B cw | JNP rel16 | D | 不支持 | 有效 | 跳转到接近( 如果不是等值( PF=0) ) 。 不支持64 位模式 。 |
0F 8B cd | JNP rel32 | D | 有效 | 有效 | 跳跃接近( 如果不是) 等值( PF = 0) 。 |
0F 89 cw | JNS rel16 | D | 不支持 | 有效 | 如果不是签名, 跳转到附近 (SF=0), 不支持64位模式 。 |
0F 89 cd | JNS rel32 | D | 有效 | 有效 | 跳转到( SF=0) 如果不是签名, 则跳到附近 。 |
0F 85 cw | JNZ rel16 | D | 不支持 | 有效 | 跳近( 如果不是0 ) (ZF=0 ), 不支持64位模式 。 |
0F 85 cd | JNZ rel32 | D | 有效 | 有效 | 跳到零( ZF=0) 附近 |
0F 80 cw | JO rel16 | D | 不支持 | 有效 | 如果溢出则跳近( OF=1), 不支持64位模式 。 |
0F 80 cd | JO rel32 | D | 有效 | 有效 | 如果溢出则跳近( OF=1) 。 |
0F 8A cw | JP rel16 | D | 不支持 | 有效 | 如果等价( PF=1) , 跳转到附近, 不支持 64 位模式 。 |
0F 8A cd | JP rel32 | D | 有效 | 有效 | 如果对等则跳近( PF = 1) 。 |
0F 8A cw | JPE rel16 | D | 不支持 | 有效 | 如果偶数( PF=1) , 跳转到附近, 不支持64位模式 。 |
0F 8A cd | JPE rel32 | D | 有效 | 有效 | 如果偶数跳近( PF=1) 。 |
0F 8B cw | JPO rel16 | D | 不支持 | 有效 | 如果平方奇数( PF=0) , 则跳近 。 不支持64 位模式 。 |
0F 8B cd | JPO rel32 | D | 有效 | 有效 | 如果偶数( PF = 0) , 则跳近 。 |
0F 88 cw | JS rel16 | D | 不支持 | 有效 | 跳近如果符号( SF=1) 。 不支持64位模式 。 |
0F 88 cd | JS rel32 | D | 有效 | 有效 | 如果符号跳近( SF = 1) 。 |
0F 84 cw | JZ rel16 | D | 不支持 | 有效 | 如果 0 (ZF=1) 跳近, 不支持64位模式 。 |
0F 84 cd | JZ rel32 | D | 有效 | 有效 | 跳近 0 (ZF=1) 。 |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
D
offset操作码后的位移
实测开销
正在从 arch-data 加载实测数据...
说明
检查EFLAGS登记册(CF,OF,PF,SF,和ZF)中一个或多个状态标志的状态,如果旗帜处于指定的状态(条件),则跳转到目标操作数指定的目标指令. 每个指令都附有一个条件代码(cc),以说明所测试的条件。 如果条件不能满足,则跳跃不进行,执行继续遵循Jcc指令的指示.
目标指令以相对偏移(与EIP登记册中的指令指针的当前值相对的签名偏移)来指定. 相对偏移(rel8,rel16,或rel32)在组装代码中一般被指定为标签,但在机器代码级别上,它被编码为签名,8位或32位的即时值,该值被添加到指令指针中. 指令编码对128至+127的抵消效率最高. 如果 操作数 大小属性为 16,则EIP 寄存器的上两个字节被清除,导致 指令指针 最大大小为 16 比特.
每个Jcc元音的条件在上页表格的"描述"栏中给出. 比较有符号整数时使用"小"和"大"两个词,比较无符号整数时使用"以上"和"以下"两个词.
由于状态标志的特定状态有时可以有两种解释,因此对一些操作码定义了两种mnemonics. 例如,JA(如果以上跳动)指令和JNBE(如果不低于或等于跳动)指令是操作码 77H的交替模式.
Jcc指令不支持远跳(跳转到其他代码段). 当有条件跳跃的目标处于不同的段位时,使用与Jcc指令测试的条件相反的条件,然后以无条件的远跳(JMP指令)进入另一个段位. 例如,以下有条件的远跳是非法的:
JZ FARLABEL;
要完成这一远处的跳跃,请使用以下两个指令: 1. (二) JNZ BEYOND; (二) JMP FARLABEL; BEYOND : (英语).
JRCXZ,JECXZ,和JCXZ指令与其他Jcc指令不同,因为它们不检查状态标志. 相反,他们检查RCX,ECX或CX为0. 选中的寄存器由地址大小属性决定 。 这些指令在以有条件的循环指令(如LOOPNE)终止的循环开头使用时有用. 它们可用于防止一个指令序列在RCX,ECX或CX为0时进入循环. 这将导致循环执行264,232或64K倍(而不是零倍).
所有有条件的跳转都转换为一两条缓存行的代码获取,无论跳转地址或缓存性如何.
在64位模式下,操作数大小固定在64位. JMP Short是RIP = RIP + 8位偏移符号扩展为64位. JMP Near is RIP = RIP + 32位偏移符号扩展为64位.
行动
IF condition
THEN
tempEIP := EIP + SignExtend(DEST);
IF OperandSize = 16
THEN tempEIP := tempEIP AND 0000FFFFH;
FI;
IF tempEIP is not within code segment limit
THEN #GP(0);
ELSE EIP := tempEIP
FI;
FI;受影响的旗帜
None.
异常
保护模式
#GP(0) | 如果冲抵跳跃到CS部分的极限之外. |
#UD | 如果使用 LOCK 前缀 。 |
实地址模式
#GP | 如果跳转到 CS 段的界限以外, 或者在 0 到 FFFFH 的有效地址空间之外, 如果使用 32 位地址大小覆盖前缀, 则会发生此条件 。 |
#UD | 如果使用 LOCK 前缀 。 |
虚拟 8086 模式
| 与真实地址模式相同的例外 。 |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
#GP(0) | 如果内存地址是非冠状的. |
#UD | 如果使用 LOCK 前缀 。 |