TZCNT
Cuenta el número de Trailing Zero Bits
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
F3 0F BC /r | TZCNT r16, r/m16 | A | Valido | Valido | Contar el número de cero bits de seguimiento en r/m16, resultado de retorno en r16. |
F3 0F BC /r | TZCNT r32, r/m32 | A | Valido | Valido | Contar el número de cero bits de seguimiento en r/m32, resultado de retorno en r32. |
F3 REX.W 0F BC /r | TZCNT r64, r/m64 | A | Valido | No codificable | Contar el número de cero bits de seguimiento en r/m64, resultado de retorno en r64. |
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.
A
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
TZCNT cuenta el número de bits menos significativo cero en operando de origen (segundo operando) y devuelve el resultado en el operando de destino (primer operando). TZCNT es una extensión de la instrucción BSF. La clave diferencia entre las instrucciones TZCNT y BSF es que cuando el operando de origen es cero, TZCNT produce el tamaño de operando al operando de destino, mientras que BSF hojas el operando de destino sin modificar.
En los procesadores que no soportan TZCNT, la codificación de byte de instrucciones se ejecuta como BSF.
Operación
temp := 0
DEST := 0
DO WHILE ( (temp < OperandSize) and (SRC[ temp] = 0) )
temp := temp +1
DEST := DEST+ 1
OD
IF DEST = OperandSize
CF := 1
ELSE
CF := 0
FI
IF DEST = 0
ZF := 1
ELSE
ZF := 0
FIBanderas afectadas
ZF se establece a 1 en caso de salida cero (menos significativo bit de la fuente se establece), y a 0 de lo contrario, CF se establece a 1 si la entrada fue cero y se despejó de otra manera. Las banderas de SF, PF y AF no están definidas.
Intel C/C++ compilador intrínseco
TZCNT unsigned __int32 _tzcnt_u32(unsigned __int32 src);
TZCNT unsigned __int64 _tzcnt_u64(unsigned __int64 src);Excepciones
Modo protegido
#GP(0) | Para una dirección efectiva operando de memoria ilegal en los segmentos CS, DS, ES, FS o GS. Si el registro DS, ES, FS o GS se utiliza para acceder a la memoria y contiene un selector de segmento null. |
#SS(0) | Para una dirección ilegal en el segmento SS. #PF (código predeterminado) Para un fallo de pagina. |
#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 LOCK prefijo es usado. |
Modo real
#GP(0) | Si alguna parte del operando está fuera del espacio de dirección eficaz de 0 a 0FFFFH. |
#SS(0) | Para una dirección ilegal en el segmento SS. |
#UD | Si LOCK prefijo se utiliza. Excepciones de Modo Virtual 8086 |
#GP(0) | Si alguna parte del operando está fuera del espacio de dirección eficaz de 0 a 0FFFFH. |
#SS(0) | Para una dirección ilegal en el segmento SS. #PF (código predeterminado) Para un fallo de pagina. |
#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 LOCK prefijo es usado. |
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. |
#SS(0) | Si una dirección de memoria que hace referencia al segmento SS está en forma no canónica. #PF (código predeterminado) Para un fallo de pagina. |
#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 LOCK prefijo es usado. |