AND
Logical AND
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
24 ib | AND AL, imm8 | I | Valido | Valido | AL AND imm8. |
25 iw | AND AX, imm16 | I | Valido | Valido | AX AND imm16. |
25 id | AND EAX, imm32 | I | Valido | Valido | EAX AND imm32. |
REX.W + 25 id | AND RAX, imm32 | I | Valido | No codificable | RAX AND imm32 sign-extended a 64-bits. |
80 /4 ib | AND r/m8, imm8 | MI | Valido | Valido | r/m8 AND imm8. |
81 /4 iw | AND r/m16, imm16 | MI | Valido | Valido | r/m16 AND imm16. |
81 /4 id | AND r/m32, imm32 | MI | Valido | Valido | r/m32 AND imm32. |
REX.W + 81 /4 id | AND r/m64, imm32 | MI | Valido | No codificable | r/m64 AND imm32 signo extendido a 64-bits. |
83 /4 ib | AND r/m16, imm8 | MI | Valido | Valido | r/m16 AND imm8 (extended firma). |
83 /4 ib | AND r/m32, imm8 | MI | Valido | Valido | r/m32 AND imm8 (extended firma). |
REX.W + 83 /4 ib | AND r/m64, imm8 | MI | Valido | No codificable | r/m64 AND imm8 (extended firma). |
20 /r | AND r/m8, r8 | MR | Valido | Valido | r/m8 AND r8. |
21 /r | AND r/m16, r16 | MR | Valido | Valido | r/m16 AND r16. |
21 /r | AND r/m32, r32 | MR | Valido | Valido | r/m32 AND r32. |
REX.W + 21 /r | AND r/m64, r64 | MR | Valido | No codificable | r/m64 AND r64. |
22 /r | AND r8, r/m8 | RM | Valido | Valido | r8 AND r/m8. |
23 /r | AND r16, r/m16 | RM | Valido | Valido | r16 AND r/m16. |
23 /r | AND r32, r/m32 | RM | Valido | Valido | r32 AND r/m32. |
REX.W + 23 /r | AND r64, r/m64 | RM | Valido | No codificable | r64 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
modrm.reglectura y escriturabyte 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
MR
modrm.rmlectura y escriturabyte 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)
MI
modrm.rmlectura y escriturabyte 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
I
AL/AX/EAX/RAXimm8/16/32inmediato que sigue a la instruccion, del ancho del operando
Coste medido
Cargando las mediciones de arch-data...
Banderas nombradas
CFAcarreoPFParidadAFAcarreo auxiliarZFCeroSFSignoOFDesbordamiento
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. |
#UD | Si el prefijo LOCK se utiliza pero el destino no es un operando de memoria. |
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 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. |
#UD | Si 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. |
#UD | Si el prefijo LOCK se utiliza pero el destino no es un operando de memoria. |