ADCX
Adición sin firma de dos operandos con bandera de acarreo
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
66 0F 38 F6 /r | ADCX r32, r/m32 | RM | Valido | Valido | Adiciones no firmadasr32con CF,r/m32ar32, escribe CF. |
66 REX.w 0F 38 F6 /r | ADCX r64, r/m64 | RM | Valido | No codificable | Adiciones no firmadasr64con CF,r/m64ar64, escribe CF. |
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
Coste medido
Cargando las mediciones de arch-data...
Banderas nombradas
CFAcarreoPFParidadAFAcarreo auxiliarZFCeroSFSignoOFDesbordamiento
Descripción
Realiza una adición no firmada del operando de destino (primer operando), el operando de origen (segundo operando) y el plomo (CF) y almacena el resultado en el operando de destino. El operando de destino es un registro para fines generales, mientras que el operando de origen puede ser un registro de proposito general o ubicación de memoria. El estado de CF puede representar una carga de una adición anterior. La instrucción establece la bandera CF con el porte generado por la adición no firmada de los operandos.
La instrucción ADCX se ejecuta en el contexto de la adición de multiprecisión, donde se agrega una serie de operandos con una cadena de carga. Al comienzo de una cadena de adiciones, necesitamos asegurarnos de que el CF esté en un estado inicial deseado. A menudo, este estado inicial necesita ser 0, que se puede lograr con una instrucción a cero el CF (por ejemplo, XOR).
Esta instrucción se soporta en modo real y modo virtual-8086. El tamaño de operando es siempre 32 bits si no en modo de 64 bits.
En modo 64-bit, el tamaño de operación predeterminado es de 32 bits. Utilizando un Prefijo REX en forma de REX.R permite el acceso a registros adicionales (R8-15). Utilizando REX Prefix en forma de REX.W promueve la operación a 64 bits.
ADCX ejecuta normalmente dentro o fuera de una región de transacción. Nota: ADCX define la bandera OF de forma diferente a las instrucciones ADD/ADC definidas en el Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 2A.
Operación
IF OperandSize is 64-bit
THEN CF:DEST[63:0] := DEST[63:0] + SRC[63:0] + CF;
ELSE CF:DEST[31:0] := DEST[31:0] + SRC[31:0] + CF;
FI;Banderas afectadas
CF se actualiza sobre la base del resultado. Las banderas de SF, ZF, AF y PF no están modificadas.
Intel C/C++ compilador intrínseco
unsigned char _addcarryx_u32 (unsigned char c_in, unsigned int src1, unsigned int src2, unsigned int *sum_out);
unsigned char _addcarryx_u64 (unsigned char c_in, unsigned __int64 src1, unsigned __int64 src2, unsigned __int64 *sum_out);SIMD coma flotante Excepciones
None.
Excepciones
Modo protegido
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:EBX.ADX[19] = 0. |
#SS(0) | Para una dirección ilegal en el segmento SS. |
#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. #PF(fault-code) 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. |
Modo real
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:EBX.AVX[19] = 0. |
#SS(0) | Para una dirección ilegal en el segmento SS. |
#GP(0) | Si alguna parte del operando se encuentra fuera del espacio de dirección eficaz de 0 a FFFFH. |
Modo virtual-8086
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:EBX.AVX[19] = 0. |
#SS(0) | Para una dirección ilegal en el segmento SS. |
#GP(0) | Si alguna parte del operando se encuentra fuera del espacio de dirección eficaz de 0 a FFFFH. #PF(fault-code) 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. |
Modo de compatibilidad
| Las mismas excepciones que en modo protegido. |
Modo de 64 bits
#UD | Si se utiliza el prefijo LOCK. Si CPUID.07H.00H:EBX.AVX[19] = 0. |
#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) 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. |