BTC

Prueba de bits y complemento

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
0F BB /rBTC r/m16, r16MRValidoValidoAlmacene bit seleccionado en la bandera CF y complemento.
0F BB /rBTC r/m32, r32MRValidoValidoAlmacene bit seleccionado en la bandera CF y complemento.
REX.W + 0F BB /rBTC r/m64, r64MRValidoNo codificableAlmacene bit seleccionado en la bandera CF y complemento.
0F BA /7 ibBTC r/m16, imm8MIValidoValidoAlmacene bit seleccionado en la bandera CF y complemento.
0F BA /7 ibBTC r/m32, imm8MIValidoValidoAlmacene bit seleccionado en la bandera CF y complemento.
REX.W + 0F BA /7 ibBTC r/m64, imm8MIValidoNo codificableAlmacene bit seleccionado en la bandera CF y complemento.

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.

MR

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

MI

  1. modrm.rm lectura y escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  2. imm8byte inmediato que sigue a la instruccion

Coste medido

Cargando las mediciones de arch-data...

Banderas nombradas

Descripción

Selecciona el bit en un bit string (especificado con el primer operando, llamado la base de bits) en el bit-position designado por el bit offset operando (segundo operando), almacena el valor del bit en la bandera CF, y complementa el bit seleccionado en la cadena de bits. El bit base operando puede ser un registro o una ubicación de memoria; el bit offset operando puede ser un registro o un valor inmediato:

operando (tamaño de modulo depende del modo y tamaño de registro; operandos de 64 bits están disponibles sólo en modo de 64 bits). Esto permite seleccionar cualquier posición de bits.

que contiene la base bit (bit 0 del byte especificado) de la cadena bit. El rango de la posición del bit que puede ser referenciado por el operando offset depende del tamaño de operando.

See also: Bit(BitBase, BitOffset) on page 3-11.

Algunos ensambladores soportan compensaciones de bit inmediatas superiores a 31 utilizando el campo de compensación de bits inmediato en combinación con el campo de desplazamiento del operando de memoria. Vea "BT--Bit Test" en este capítulo para obtener más información sobre este mecanismo de tratamiento.

Esta instrucción se puede utilizar con un prefijo LOCK para permitir que la instrucción se ejecute atómicamente.

En modo de 64 bits, el tamaño de operación predeterminado de la instrucción es de 32 bits. Utilizando un prefijo REX en forma de REX.B permite el acceso a registros adicionales (R8-R15) para la base de bits. Utilizando un prefijo REX en forma de REX.R permite el acceso a R8-R15 para el offset de bits (cuando utiliza un registro). Utilizar un prefijo REX en forma de REX.W promueve la operación a 64 bits. Vea la tabla resumen al comienzo de esta sección para la codificación de datos y límites.

Operación

CF := Bit(BitBase, BitOffset);
Bit(BitBase, BitOffset) := NOT Bit(BitBase, BitOffset);

Banderas afectadas

La bandera CF contiene el valor del bit seleccionado antes de que se complemente. La bandera ZF no está afectada. Las banderas OF, SF, AF y PF quedan indefinidas.

Excepciones

Modo protegido
#GP(0)Si el operando de destino apunta a 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.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3.
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria.
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 el prefijo LOCK se utiliza pero el destino no es un operando de memoria.
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.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada.
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria.
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.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3.
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria.

Fuentes