Jcc

Saltar si la condición es Met

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
77 cbJA rel8DValidoValidoSalto corto si arriba (CF=0 y ZF=0).
73 cbJAE rel8DValidoValidoSalto corto si arriba o igual (CF=0).
72 cbJB rel8DValidoValidoSalta corto si abajo (CF=1).
76 cbJBE rel8DValidoValidoSalta corto si es inferior o igual (CF=1 o ZF=1).
72 cbJC rel8DValidoValidoSalta corto si lleva (CF=1).
E3 cbJCXZ rel8DNo codificableValidoSalto corto si el registro CX es 0.
E3 cbJECXZ rel8DValidoValidoSalto corto si el registro ECX es 0.
E3 cbJRCXZ rel8DValidoNo codificableSalto corto si el registro RCX es 0.
74 cbJE rel8DValidoValidoSalta corto si es igual (ZF=1).
7F cbJG rel8DValidoValidoSalta corto si es mayor (ZF=0 y SF=OF).
7D cbJGE rel8DValidoValidoSalta corto si es mayor o igual (SF=OF).
7C cbJL rel8DValidoValidoSalta corto si menos (SF OF).
7E cbJLE rel8DValidoValidoSalta corto si es menos o igual (ZF=1 o SF OF).
76 cbJNA rel8DValidoValidoSalta corto si no por encima (CF=1 o ZF=1).
72 cbJNAE rel8DValidoValidoSalta corto si no por encima o por igual (CF=1).
73 cbJNB rel8DValidoValidoSalto corto si no debajo (CF=0).
77 cbJNBE rel8DValidoValidoSaltar corto si no es inferior o igual (CF=0 y ZF=0).
73 cbJNC rel8DValidoValidoSalto corto si no lleva (CF=0).
75 cbJNE rel8DValidoValidoSalto corto si no igual (ZF=0).
7E cbJNG rel8DValidoValidoSaltar corto si no mayor (ZF=1 o SF OF).
7C cbJNGE rel8DValidoValidoSaltar corto si no mayor o igual (SF OF).
7D cbJNL rel8DValidoValidoSalta corto si no menos (SF=OF).
7F cbJNLE rel8DValidoValidoSalta corto si no menos o igual (ZF=0 y SF=OF).
71 cbJNO rel8DValidoValidoSaltar corto si no desbordamiento (OF=0).
7B cbJNP rel8DValidoValidoSaltar corto si no paridad (PF=0).
79 cbJNS rel8DValidoValidoSaltar corto si no firmar (SF=0).
75 cbJNZ rel8DValidoValidoSalto corto si no cero (ZF=0).
70 cbJO rel8DValidoValidoSaltar corto si desbordamiento (OF=1).
7A cbJP rel8DValidoValidoSalta corto si paridad (PF=1).
7A cbJPE rel8DValidoValidoSalta corto si la paridad incluso (PF=1).
7B cbJPO rel8DValidoValidoSaltear corto si paridad extraña (PF=0).
78 cbJS rel8DValidoValidoSaltar corto si signo (SF=1).
74 cbJZ rel8DValidoValidoSalto corto si cero (ZF = 1).
0F 87 cwJA rel16DNo soportadoValidoSaltar cerca de si arriba (CF=0 y ZF=0). No compatible con el modo 64-bit.
0F 87 cdJA rel32DValidoValidoSaltar cerca si arriba (CF=0 y ZF=0).
0F 83 cwJAE rel16DNo soportadoValidoSaltar cerca de si arriba o igual (CF=0). No compatible con el modo 64-bit.
0F 83 cdJAE rel32DValidoValidoSaltar cerca de si arriba o igual (CF=0).
0F 82 cwJB rel16DNo soportadoValidoSaltar cerca de si abajo (CF=1). No compatible con el modo 64-bit.
0F 82 cdJB rel32DValidoValidoSaltar cerca de si abajo (CF=1).
0F 86 cwJBE rel16DNo soportadoValidoSaltar cerca de si abajo o igual (CF=1 o ZF=1). No compatible con el modo 64-bit.
0F 86 cdJBE rel32DValidoValidoSaltar cerca de si abajo o igual (CF=1 o ZF=1).
0F 82 cwJC rel16DNo soportadoValidoSaltar cerca si llevar (CF=1). No compatible con el modo 64-bit.
0F 82 cdJC rel32DValidoValidoSaltar cerca si llevar (CF=1).
0F 84 cwJE rel16DNo soportadoValidoSaltar cerca de si es igual (ZF=1). No se admite en modo de 64 bits.
0F 84 cdJE rel32DValidoValidoSaltar cerca si es igual (ZF=1).
0F 84 cwJZ rel16DNo soportadoValidoSaltar cerca de 0 (ZF=1). No compatible con el modo 64-bit.
0F 84 cdJZ rel32DValidoValidoSaltar cerca de 0 (ZF=1).
0F 8F cwJG rel16DNo soportadoValidoSaltar cerca de si es mayor (ZF=0 y SF=OF). No se admite en modo de 64 bits.
0F 8F cdJG rel32DValidoValidoSaltar cerca si es mayor (ZF=0 y SF=OF).
0F 8D cwJGE rel16DNo soportadoValidoSaltar cerca de si es mayor o igual (SF=OF). No se admite en modo de 64 bits.
0F 8D cdJGE rel32DValidoValidoSaltar cerca si es mayor o igual (SF=OF).
0F 8C cwJL rel16DNo soportadoValidoSaltar cerca de si menos (SF OF). No se admite en modo de 64 bits.
0F 8C cdJL rel32DValidoValidoSaltar cerca si menos (SF OF).
0F 8E cwJLE rel16DNo soportadoValidoSaltar cerca de si menos o igual (ZF=1 o SF OF). No compatible con el modo 64-bit.
0F 8E cdJLE rel32DValidoValidoSaltar cerca de si menos o igual (ZF=1 o SF OF).
0F 86 cwJNA rel16DNo soportadoValidoSaltar cerca si no por encima (CF=1 o ZF=1). No compatible con el modo 64-bit.
0F 86 cdJNA rel32DValidoValidoSaltar cerca si no por encima (CF=1 o ZF=1).
0F 82 cwJNAE rel16DNo soportadoValidoSaltar cerca si no por encima o por igual (CF=1). No se admite en modo de 64 bits.
0F 82 cdJNAE rel32DValidoValidoSaltar cerca si no por encima o igual (CF=1).
0F 83 cwJNB rel16DNo soportadoValidoSaltar cerca si no debajo (CF=0). No está soportado en modo de 64 bits.
0F 83 cdJNB rel32DValidoValidoSaltar cerca si no abajo (CF=0).
0F 87 cwJNBE rel16DNo soportadoValidoSaltar cerca si no es inferior o igual (CF=0 y ZF=0). No compatible con el modo 64-bit.
0F 87 cdJNBE rel32DValidoValidoSaltar cerca si no por debajo o por igual (CF=0 y ZF=0).
0F 83 cwJNC rel16DNo soportadoValidoSaltar cerca si no llevar (CF=0). No compatible con el modo 64-bit.
0F 83 cdJNC rel32DValidoValidoSaltar cerca si no llevar (CF=0).
0F 85 cwJNE rel16DNo soportadoValidoSaltar cerca si no es igual (ZF=0). No se admite en modo de 64 bits.
0F 85 cdJNE rel32DValidoValidoSaltar cerca si no es igual (ZF=0).
0F 8E cwJNG rel16DNo soportadoValidoSaltar cerca si no mayor (ZF=1 o SF OF). No compatible con el modo 64-bit.
0F 8E cdJNG rel32DValidoValidoSaltar cerca si no mayor (ZF=1 o SF OF).
0F 8C cwJNGE rel16DNo soportadoValidoSaltar cerca si no mayor o igual (SF OF). No apoyado en modo de 64 bits.
0F 8C cdJNGE rel32DValidoValidoSaltar cerca si no es mayor o igual (SF OF).
0F 8D cwJNL rel16DNo soportadoValidoSalta cerca si no menos (SF=OF). No se admite en modo de 64 bits.
0F 8D cdJNL rel32DValidoValidoSaltar cerca si no menos (SF=OF).
0F 8F cwJNLE rel16DNo soportadoValidoSaltar cerca si no menos o igual (ZF=0 y SF=OF). No compatible con el modo 64-bit.
0F 8F cdJNLE rel32DValidoValidoSaltar cerca si no menos o igual (ZF=0 y SF=OF).
0F 81 cwJNO rel16DNo soportadoValidoSaltar cerca si no desbordamiento (OF=0). No está soportado en modo de 64 bits.
0F 81 cdJNO rel32DValidoValidoSaltar cerca si no desbordamiento (OF=0).
0F 8B cwJNP rel16DNo soportadoValidoSaltar cerca si no la paridad (PF=0). No se admite en modo de 64 bits.
0F 8B cdJNP rel32DValidoValidoSaltar cerca si no paridad (PF=0).
0F 89 cwJNS rel16DNo soportadoValidoSaltar cerca si no firmar (SF=0). No se admite en modo de 64 bits.
0F 89 cdJNS rel32DValidoValidoSaltar cerca si no firmar (SF=0).
0F 85 cwJNZ rel16DNo soportadoValidoSaltar cerca de si no cero (ZF=0). No se admite en modo de 64 bits.
0F 85 cdJNZ rel32DValidoValidoSaltar cerca si no cero (ZF=0).
0F 80 cwJO rel16DNo soportadoValidoSaltar cerca si el desbordamiento (OF=1). No se admite en modo de 64 bits.
0F 80 cdJO rel32DValidoValidoSaltar cerca si el desbordamiento (OF=1).
0F 8A cwJP rel16DNo soportadoValidoSaltar cerca si la paridad (PF=1). No se admite en modo de 64 bits.
0F 8A cdJP rel32DValidoValidoSaltar cerca si la paridad (PF=1).
0F 8A cwJPE rel16DNo soportadoValidoSaltar cerca si la paridad incluso (PF=1). No se admite en modo de 64 bits.
0F 8A cdJPE rel32DValidoValidoSaltar cerca si la paridad incluso (PF=1).
0F 8B cwJPO rel16DNo soportadoValidoSaltar cerca de si la paridad es impar (PF=0).
0F 8B cdJPO rel32DValidoValidoSaltar cerca de si paridad extraña (PF=0).
0F 88 cwJS rel16DNo soportadoValidoSaltar cerca de si signo (SF=1). No compatible con el modo 64-bit.
0F 88 cdJS rel32DValidoValidoSaltar cerca de si señal (SF=1).
0F 84 cwJZ rel16DNo soportadoValidoSaltar cerca de 0 (ZF=1). No compatible con el modo 64-bit.
0F 84 cdJZ rel32DValidoValidoSaltar cerca de 0 (ZF=1).

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

D

  1. offsetdesplazamiento que sigue al opcode

Coste medido

Cargando las mediciones de arch-data...

Descripción

Comprueba el estado de uno o más de las banderas de estado en el registro EFLAGS (CF, OF, PF, SF y ZF) y, si las banderas están en el estado especificado (condición), realiza un salto a la instrucción de destino especificada por el operando de destino. Un código de condición (cc) se asocia con cada instrucción para indicar la condición que se está probando. Si la condición no está satisfecha, el salto no se realiza y la ejecución continúa con la instrucción siguiendo la instrucción Jcc.

La instrucción de destino se especifica con un offset relativo (un offset firmado en relación con el valor actual del puntero de instruccion en el registro EIP). Un offset relativo (rel8, rel16, o rel32) se especifica generalmente como una etiqueta en código de montaje, pero a nivel de código de máquina, se codifica como un valor inmediato firmado, de 8 bits o de 32 bits, que se añade al puntero de instruccion. La codificación de instrucciones es más eficiente para los offsets de 128 a +127. Si el atributo el operando-size es 16, los dos bytes superiores del registro EIP se limpian, dando como resultado un tamaño máximo puntero de instruccion de 16 bits.

Las condiciones para cada Jcc mnemonic se dan en la columna "Descripción" de la tabla en la página anterior. Los términos "menos" y "mayor" se utilizan para las comparaciones de enteros con signo y los términos "arriba" y "bajo" se utilizan para enteros sin signo.

Debido a que un estado particular de las banderas de estado puede a veces ser interpretado de dos maneras, dos mnemonics se definen para algunos códigos de operación. Por ejemplo, la instrucción JA (jump if above) y la instrucción JNBE (jump if not below or equal) son mnemonics suplentes para el código de operación 77H.

La instrucción Jcc no soporta saltos lejanos (jugos a otros segmentos de código). Cuando el objetivo para el salto condicional está en un segmento diferente, use la condición opuesta de la condición que se está probando para la instrucción Jcc, y luego acceda al objetivo con un salto lejano incondicional (instrucción JMP) al otro segmento. Por ejemplo, el siguiente salto condicional es ilegal:

JZ FARLABEL;

Para lograr este salto lejano, utilice las siguientes dos instrucciones: JNZ BEYOND; JMP FARLABEL; BEYOND:

Las instrucciones JRCXZ, JECXZ y JCXZ difieren de otras instrucciones de Jcc porque no verifican banderas de estado. En lugar de eso, verifican RCX, ECX o CX para 0. El registro es determinado por el atributo tamaño de la dirección. Estas instrucciones son útiles cuando se utilizan al principio de un bucle que termina con una instrucción de bucle condicional (como LOOPNE). Se pueden utilizar para evitar que una secuencia de instrucciones entre en un bucle cuando RCX, ECX o CX es 0. Esto haría que el bucle ejecutara 264, 232 o 64K veces (no cero veces).

Todos los saltos condicionales se convierten en garras de código de una o dos líneas de caché, independientemente de la dirección de salto o caqueabilidad.

En modo de 64 bits, tamaño de operando se fija en 64 bits. JMP Short es RIP = RIP + signo de compensación de 8 bits extendido a 64 bits. JMP Cerca es RIP = RIP + 32 bits de señal offset extendido a 64 bits.

Operación

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;

Banderas afectadas

None.

Excepciones

Modo protegido
#GP(0)Si el offset está más allá de los límites del segmento CS.
#UDSi se utiliza el prefijo LOCK.
Modo real
#GPSi el offset está más allá de los límites del segmento CS o está fuera del espacio de dirección eficaz de 0 a FFFFH. Esta afección puede ocurrir si se utiliza un prefijo de la dirección de 32 bits.
#UDSi se utiliza el prefijo LOCK.
Modo virtual-8086
Las mismas excepciones que en modo de dirección real.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#GP(0)Si la dirección de memoria está en forma no canónica.
#UDSi se utiliza el prefijo LOCK.

Fuentes