TEST
Comparación lógica
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
A8 ib | TEST AL, imm8 | I | Valido | Valido | AND imm8 con AL; set SF, ZF, PF según resultado. |
A9 iw | TEST AX, imm16 | I | Valido | Valido | AND imm16 con AX; set SF, ZF, PF según resultado. |
A9 id | TEST EAX, imm32 | I | Valido | Valido | AND imm32 con EAX; set SF, ZF, PF según resultado. |
REX.W + A9 id | TEST RAX, imm32 | I | Valido | No codificable | AND imm32 sign-extended a 64-bits con RAX; set SF, ZF, PF según resultado. |
F6 /0 ib | TEST r/m8, imm8 | MI | Valido | Valido | AND imm8 con r/m8; set SF, ZF, PF según resultado. |
F7 /0 iw | TEST r/m16, imm16 | MI | Valido | Valido | AND imm16 con r/m16; set SF, ZF, PF según resultado. |
F7 /0 id | TEST r/m32, imm32 | MI | Valido | Valido | AND imm32 con r/m32; set SF, ZF, PF según resultado. |
REX.W + F7 /0 id | TEST r/m64, imm32 | MI | Valido | No codificable | AND imm32 sign-extended a 64-bits con r/m64; set SF, ZF, PF según resultado. |
84 /r | TEST r/m8, r8 | MR | Valido | Valido | AND r8 con r/m8; set SF, ZF, PF según resultado. |
85 /r | TEST r/m16, r16 | MR | Valido | Valido | AND r16 con r/m16; set SF, ZF, PF según resultado. |
85 /r | TEST r/m32, r32 | MR | Valido | Valido | AND r32 con r/m32; set SF, ZF, PF según resultado. |
REX.W + 85 /r | TEST r/m64, r64 | MR | Valido | No codificable | AND r64 con r/m64; set SF, ZF, PF según resultado. |
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.
I
AL/AX/EAX/RAXimm8/16/32inmediato que sigue a la instruccion, del ancho del operando
MI
modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pideimm8/16/32inmediato que sigue a la instruccion, del ancho del operando
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)
Coste medido
Cargando las mediciones de arch-data...
Banderas nombradas
CFAcarreoPFParidadAFAcarreo auxiliarZFCeroSFSignoOFDesbordamiento
Descripción
Computa el bit-wise lógico AND del primer operando (fuente 1 operando) y el segundo operando (fuente 2 operando) y establece el SF, ZF, y PF banderas de estado según el resultado. El resultado es descartado.
En modo de 64 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
TEMP := SRC1 AND SRC2;
SF := MSB(TEMP);
IF TEMP = 0
THEN ZF := 1;
ELSE ZF := 0;
FI:
PF := BitwiseXNOR(TEMP[0:7]);
CF := 0;
OF := 0;
(* AF is undefined *)Banderas afectadas
Las banderas OF y CF están establecidas a 0. Las banderas SF, ZF y PF se establecen según el resultado (ver la sección "Operación" arriba). El estado de la bandera AF es indefinido.
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. |