BSR
Análisis de bits
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
0F BD /r | BSR r16, r/m16 | RM | Valido | Valido | Un escaneo inverso en r/m16. |
0F BD /r | BSR r32, r/m32 | RM | Valido | Valido | Un escaneo inverso en r/m32. |
REX.W + 0F BD /r | BSR r64, r/m64 | RM | Valido | No codificable | Un escaneo inverso en r/m64. |
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.
RM
modrm.regescriturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte 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...
Banderas nombradas
CFAcarreoPFParidadAFAcarreo auxiliarZFCeroSFSignoOFDesbordamiento
Descripción
Busca el operando de origen (segundo operando) para el bit mas significativo fijado (1 bit). Si se encuentra un bit mas significativo, su índice de bits se almacena en el operando de destino (primer operando). El operando de origen puede ser un registro o una ubicación de memoria; el operando de destino es un registro. El índice de bits es un offset sin firmar del bit 0 del operando de origen. Si el contenido operando de origen es cero, el operando de destino no está modificado.1
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. Vea la tabla resumen al comienzo de esta sección para la codificación de datos y límites.
Operación
IF SRC <> 0
temp := OperandSize 1;
WHILE Bit(SRC, temp) = 0
DO
temp := temp - 1;
OD;
DEST := temp;
FI;Banderas afectadas
La bandera ZF se establece a 1 si el operando de origen es 0; de lo contrario, la bandera ZF se pone a cero. La bandera PF se establece a 1 si el número de bits fijados en el operando de origen es incluso; de lo contrario, se pone a cero. Las banderas CF, OF, SF y AF están limpiadas.2
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 el prefijo LOCK se utiliza. 1. Con un operando de origen cero en algunos procesadores más antiguos, el uso de un tamaño de operando de 32 bits puede limpiar los 32 bits superiores de un destino de 64 bits, dejando los 32 bits inferiores sin modificar. 2. En algunos procesadores más antiguos, las banderas CF, OF, SF, AF y PF no están modificadas. |
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. |