ADCX

Adición sin firma de dos operandos con bandera de acarreo

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 38 F6 /rADCX r32, r/m32RMValidoValidoAdiciones no firmadasr32con CF,r/m32ar32, escribe CF.
66 REX.w 0F 38 F6 /rADCX r64, r/m64RMValidoNo codificableAdiciones 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

  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

Coste medido

Cargando las mediciones de arch-data...

Banderas nombradas

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
#UDSi 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
#UDSi 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
#UDSi 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
#UDSi 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.

Fuentes