SETcc

Set Byte on Condition

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
0F 97SETA r/m8MValidoValidoSet byte si arriba (CF=0 y ZF=0).
0F 93SETAE r/m8MValidoValidoSet byte si arriba o igual (CF=0).
0F 92SETB r/m8MValidoValidoSet byte if below (CF=1).
0F 96SETBE r/m8MValidoValidoSet byte if below or equal (CF=1 or ZF=1).
0F 92SETC r/m8MValidoValidoSet byte if port (CF=1).
0F 94SETE r/m8MValidoValidoSet byte if equal (ZF=1).
0F 9FSETG r/m8MValidoValidoSet byte si mayor (ZF=0 y SF=OF).
0F 9DSETGE r/m8MValidoValidoEstablecer byte si es mayor o igual (SF=OF).
0F 9CSETL r/m8MValidoValidoSet byte si menos (SF OF).
0F 9ESETLE r/m8MValidoValidoEstablecer byte si es menos o igual (ZF=1 o SF OF).
0F 96SETNA r/m8MValidoValidoSet byte if not above (CF=1 or ZF=1).
0F 92SETNAE r/m8MValidoValidoSet byte if not above or equal (CF=1).
0F 93SETNB r/m8MValidoValidoSet byte si no abajo (CF=0).
0F 97SETNBE r/m8MValidoValidoSet byte si no es inferior o igual (CF=0 y ZF=0).
0F 93SETNC r/m8MValidoValidoSet byte si no lleva (CF=0).
0F 95SETNE r/m8MValidoValidoSet byte if not equal (ZF=0).
0F 9ESETNG r/m8MValidoValidoSet byte si no mayor (ZF=1 o SF OF)
0F 9CSETNGE r/m8MValidoValidoSet byte si no es mayor o igual (SF OF).
0F 9DSETNL r/m8MValidoValidoEstablecer byte si no menos (SF=OF).
0F 9FSETNLE r/m8MValidoValidoEstablecer byte si no menos o igual (ZF=0 y SF=OF).
0F 91SETNO r/m8MValidoValidoEstablecer byte si no desbordamiento (OF=0).
0F 9BSETNP r/m8MValidoValidoSet byte if not parity (PF=0).
0F 99SETNS r/m8MValidoValidoEstablecer byte si no firmar (SF=0).
0F 95SETNZ r/m8MValidoValidoSet byte si no cero (ZF=0).
0F 90SETO r/m8MValidoValidoSet byte si desbordamiento (OF=1)
0F 9ASETP r/m8MValidoValidoSet byte if parity (PF=1).
0F 9ASETPE r/m8MValidoValidoSet byte if parity even (PF=1).
0F 9BSETPO r/m8MValidoValidoSet byte if parity odd (PF=0).
0F 98SETS r/m8MValidoValidoEstablecer byte si signo (SF=1).
0F 94SETZ r/m8MValidoValidoSet byte if cero (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.

M

  1. modrm.rm escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

Coste medido

Cargando las mediciones de arch-data...

Descripción

Se establece el operando de destino a 0 o 1 dependiendo de la configuración de las banderas de estado (CF, SF, OF, ZF y PF) en el registro EFLAGS. El operando de destino señala un registro de byte o un byte en memoria. El código de condición sufijo (cc) indica la condición para la que se está probando.

Los términos "arriba" y "bajo" se asocian con la bandera CF y se refieren a la relación entre dos valores enteros no identificados. Los términos "verdedor" e "menos" están asociados con las banderas SF y OF y se refieren a la relación entre dos valores enteros firmados.

Muchas de las instrucciones SETcc códigos de operación tienen mnemonía alternativa. Por ejemplo, SETG (conjunto si mayor) y SETNLE (conjunto si no menos o igual) tienen el mismo código de operación y prueba para la misma condición: ZF es igual a 0 y SF igual a OF. Estas mnemonias alternativas se proporcionan para hacer el código más inteligible. Apéndice B, "EFLAGS Códigos de Estado", en Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1, muestra la mnemonics alternativa para varias condiciones de prueba.

Algunos idiomas representan uno lógico como entero con todos los bits fijados. Esta representación se puede obtener eligiendo la condición lógicamente opuesta para la instrucción SETcc, luego decrementando el resultado. Por ejemplo, para probar el desbordamiento, utilice la instrucción SETNO, luego decrementar el resultado.

El campo reg del byte ModR/M no se utiliza para la instrucción SETCC y los bits código de operación son ignorados por el procesador.

En modo IA-64, el tamaño de operando se fija en 8 bits. El uso del prefijo REX permite un tratamiento uniforme a los registros adicionales de byte. De lo contrario, la operación de esta instrucción es la misma que en el modo legado y el modo de compatibilidad.

Operación

IF condition
    THEN DEST := 1;
    ELSE DEST := 0;

FI;

Banderas afectadas

None.

Excepciones

Modo protegido
#GP(0)Si el destino se encuentra en un segmento no escrito. Si la dirección efectiva un operando de memoria está fuera del límite de segmento CS, DS, ES, FS o GS. Si el registro DS, ES, FS o GS contiene un NULL selector de segmento.
#SS(0)Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF(fault-code) Si un fallo de pagina ocurre.
#UDSi se utiliza el prefijo LOCK.
Modo real
#GPSi un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS.
#SSSi un operando de memoria dirección efectiva está fuera del límite del segmento SS.
#UDSi se utiliza el prefijo LOCK.
Modo virtual-8086
#GP(0)Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS.
#SS(0)Si un operando de memoria dirección efectiva está fuera del límite del segmento SS.
#PF(fault-code)Si un fallo de pagina ocurre.
#UDSi se utiliza el prefijo LOCK.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#SS(0)Si una dirección de memoria que hace referencia al segmento SS está en forma no canónica.
#GP(0)Si la dirección de memoria está en forma no canónica. #PF(fault-code) Si un fallo de pagina ocurre.
#UDSi se utiliza el prefijo LOCK.

Fuentes