BT
Prueba de bits
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
0F A3 /r | BT r/m16, r16 | MR | Valido | Valido | Almacene el bit seleccionado en la bandera CF. |
0F A3 /r | BT r/m32, r32 | MR | Valido | Valido | Almacene el bit seleccionado en la bandera CF. |
REX.W + 0F A3 /r | BT r/m64, r64 | MR | Valido | No codificable | Almacene el bit seleccionado en la bandera CF. |
0F BA /4 ib | BT r/m16, imm8 | MI | Valido | Valido | Almacene el bit seleccionado en la bandera CF. |
0F BA /4 ib | BT r/m32, imm8 | MI | Valido | Valido | Almacene el bit seleccionado en la bandera CF. |
REX.W + 0F BA /4 ib | BT r/m64, imm8 | MI | Valido | No codificable | Almacene el bit seleccionado en la bandera CF. |
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
modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pidemodrm.reglecturabyte ModRM, campo reg (bits 5-3)
MI
modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pideimm8byte inmediato que sigue a la instruccion
Coste medido
Cargando las mediciones de arch-data...
Banderas nombradas
CFAcarreoPFParidadAFAcarreo auxiliarZFCeroSFSignoOFDesbordamiento
Descripción
Selecciona el bit en un bit string (especificado con el primer operando, llamado la base de bits) en la bit-posición designada por el bit offset (especificado por el segundo operando) y almacena el valor del bit en la bandera CF. 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:
- Si el bit base operando especifica un registro, la instrucción toma el modulo 16, 32, o 64 del bit offset
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).
- Si el bit base operando especifica una ubicación de memoria, el operando representa la dirección del byte en memoria
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. En este caso, los 3 o 5 bits de bajo orden (3 para 16 bits operandos, 5 para 32 bits operandos) de la compensación inmediata se almacenan en el campo de compensación inmediata de bits, y los bits de alto orden se desplazan y se combinan con el desplazamiento de byte en el modo de dirección por el ensamblador. El procesador ignorará los bits de alta orden si no son cero.
Al acceder a un poco de memoria, el procesador puede acceder a 4 bytes a partir de la dirección de memoria para un tamaño de operando de 32 bits, utilizando la siguiente relación:
Effective Address + (4 (BitOffset DIV 32))O, puede acceder a 2 bytes a partir de la dirección de memoria para un operando de 16 bits, utilizando esta relación:
Effective Address + (2 (BitOffset DIV 16))Puede hacerlo incluso cuando sólo un solo byte necesita ser accedido para alcanzar el bit dado. Al utilizar este mecanismo de solución de bits, el software debe evitar las áreas de referencia de la memoria cercanas a los agujeros espaciales. En particular, debe evitar referencias a los registros I/O de memoria. En cambio, el software debe utilizar las instrucciones MOV para cargar o almacenar a estas direcciones, y utilizar el formulario de registro de estas instrucciones para manipular los datos.
En modo de 64 bits, el tamaño de operación predeterminado de la instrucción es de 32 bits. El uso de un prefijo REX en forma de REX.R permite el acceso a registros adicionales (R8-R15). Utilizar un prefijo REX en forma de REX.W promueve la operación a 64 bits operandos. 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);Banderas afectadas
La bandera CF contiene el valor del bit seleccionado. La bandera ZF no está afectada. Las banderas OF, SF, AF y PF quedan indefinidas.
Excepciones
Modo protegido
#GP(0) | Si un operando de memoria dirección efectiva 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. |
#UD | Si se utiliza el prefijo LOCK. |
Modo real
#GP | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. |
#SS | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
#UD | Si 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. |
#AC(0) | Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada. |
#UD | Si 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. |
#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. |
#UD | Si se utiliza el prefijo LOCK. |