TEST

Comparación lógica

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
A8 ibTEST AL, imm8IValidoValidoAND imm8 con AL; set SF, ZF, PF según resultado.
A9 iwTEST AX, imm16IValidoValidoAND imm16 con AX; set SF, ZF, PF según resultado.
A9 idTEST EAX, imm32IValidoValidoAND imm32 con EAX; set SF, ZF, PF según resultado.
REX.W + A9 idTEST RAX, imm32IValidoNo codificableAND imm32 sign-extended a 64-bits con RAX; set SF, ZF, PF según resultado.
F6 /0 ibTEST r/m8, imm8MIValidoValidoAND imm8 con r/m8; set SF, ZF, PF según resultado.
F7 /0 iwTEST r/m16, imm16MIValidoValidoAND imm16 con r/m16; set SF, ZF, PF según resultado.
F7 /0 idTEST r/m32, imm32MIValidoValidoAND imm32 con r/m32; set SF, ZF, PF según resultado.
REX.W + F7 /0 idTEST r/m64, imm32MIValidoNo codificableAND imm32 sign-extended a 64-bits con r/m64; set SF, ZF, PF según resultado.
84 /rTEST r/m8, r8MRValidoValidoAND r8 con r/m8; set SF, ZF, PF según resultado.
85 /rTEST r/m16, r16MRValidoValidoAND r16 con r/m16; set SF, ZF, PF según resultado.
85 /rTEST r/m32, r32MRValidoValidoAND r32 con r/m32; set SF, ZF, PF según resultado.
REX.W + 85 /rTEST r/m64, r64MRValidoNo codificableAND 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

  1. AL/AX/EAX/RAX
  2. imm8/16/32inmediato que sigue a la instruccion, del ancho del operando

MI

  1. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  2. imm8/16/32inmediato que sigue a la instruccion, del ancho del operando

MR

  1. modrm.rm lecturabyte 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)

Coste medido

Cargando las mediciones de arch-data...

Banderas nombradas

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.
#UDSi se utiliza el prefijo LOCK.
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 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.
#UDSi 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.
#UDSi se utiliza el prefijo LOCK.

Fuentes