AND

Logical AND

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
24 ibAND AL, imm8IValidoValidoAL AND imm8.
25 iwAND AX, imm16IValidoValidoAX AND imm16.
25 idAND EAX, imm32IValidoValidoEAX AND imm32.
REX.W + 25 idAND RAX, imm32IValidoNo codificableRAX AND imm32 sign-extended a 64-bits.
80 /4 ibAND r/m8, imm8MIValidoValidor/m8 AND imm8.
81 /4 iwAND r/m16, imm16MIValidoValidor/m16 AND imm16.
81 /4 idAND r/m32, imm32MIValidoValidor/m32 AND imm32.
REX.W + 81 /4 idAND r/m64, imm32MIValidoNo codificabler/m64 AND imm32 signo extendido a 64-bits.
83 /4 ibAND r/m16, imm8MIValidoValidor/m16 AND imm8 (extended firma).
83 /4 ibAND r/m32, imm8MIValidoValidor/m32 AND imm8 (extended firma).
REX.W + 83 /4 ibAND r/m64, imm8MIValidoNo codificabler/m64 AND imm8 (extended firma).
20 /rAND r/m8, r8MRValidoValidor/m8 AND r8.
21 /rAND r/m16, r16MRValidoValidor/m16 AND r16.
21 /rAND r/m32, r32MRValidoValidor/m32 AND r32.
REX.W + 21 /rAND r/m64, r64MRValidoNo codificabler/m64 AND r64.
22 /rAND r8, r/m8RMValidoValidor8 AND r/m8.
23 /rAND r16, r/m16RMValidoValidor16 AND r/m16.
23 /rAND r32, r/m32RMValidoValidor32 AND r/m32.
REX.W + 23 /rAND r64, r/m64RMValidoNo codificabler64 AND 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

  1. modrm.reg lectura y escriturabyte ModRM, campo reg (bits 5-3)
  2. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

MR

  1. modrm.rm lectura y escriturabyte 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)

MI

  1. modrm.rm lectura y escriturabyte 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

I

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

Coste medido

Cargando las mediciones de arch-data...

Banderas nombradas

Descripción

Realiza una operación bitwise AND en el destino (primero) y fuente (segundo) operandos y almacena el resultado en la ubicación el operando de destino. El operando de origen puede ser un registro inmediato, un registro, o una ubicación de memoria; el operando de destino puede ser un registro o una ubicación de memoria. (Sin embargo, dos operandos de memoria no se pueden utilizar en una instrucción.) Cada parte del resultado se establece a 1 si ambos bits correspondientes de la primera y segunda operandos son 1; de lo contrario, se establece a 0.

Esta instrucción se puede utilizar con un prefijo LOCK para permitir que se ejecute atómico.

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

DEST := DEST AND SRC;

Banderas afectadas

Las banderas OF y CF se limpian; las banderas SF, ZF y PF se establecen según el resultado. El estado de la bandera AF es indefinido.

Excepciones

Modo protegido
#GP(0)Si el operando de destino apunta a un segmento no escrito. Si la dirección efectiva un operando de memoria 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 el prefijo LOCK se utiliza pero el destino no es un operando de memoria.
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 el prefijo LOCK se utiliza pero el destino no es un operando de memoria.
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 el prefijo LOCK se utiliza pero el destino no es un operando de memoria.
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 el prefijo LOCK se utiliza pero el destino no es un operando de memoria.

Fuentes