ADC

Añadir con Carry

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
14 ibADC AL, imm8IValidoValidoAñadir con llevar imm8 a AL.
15 iwADC AX, imm16IValidoValidoAñadir con el port imm16 a AX.
15 idADC EAX, imm32IValidoValidoAñadir con el port imm32 a EAX.
REX.W + 15 idADC RAX, imm32IValidoNo codificableAgregue con el signo imm32 extendido a 64-bits a RAX.
80 /2 ibADC r/m8, imm8MIValidoValidoAñadir con el port imm8 a r/m8.
81 /2 iwADC r/m16, imm16MIValidoValidoAñadir con el port imm16 a r/m16.
81 /2 idADC r/m32, imm32MIValidoValidoAñadir con CF imm32 a r/m32.
REX.W + 81 /2 idADC r/m64, imm32MIValidoNo codificableAñadir con el signo CF imm32 extendido a 64-bits a r/m64.
83 /2 ibADC r/m16, imm8MIValidoValidoAñadir con CF señal-extended imm8 a r/m16.
83 /2 ibADC r/m32, imm8MIValidoValidoAñadir con CF señal-extended imm8 en r/m32.
REX.W + 83 /2 ibADC r/m64, imm8MIValidoNo codificableAñadir con CF señal-extended imm8 en r/m64.
10 /rADC r/m8, r8MRValidoValidoAñadir con registro de byte a r/m8.
11 /rADC r/m16, r16MRValidoValidoAñadir con el port r16 a r/m16.
11 /rADC r/m32, r32MRValidoValidoAñadir con CF r32 a r/m32.
REX.W + 11 /rADC r/m64, r64MRValidoNo codificableAñadir con CF r64 a r/m64.
12 /rADC r8, r/m8RMValidoValidoAñadir con el port r/m8 a byte register.
13 /rADC r16, r/m16RMValidoValidoAñadir con el port r/m16 a r16.
13 /rADC r32, r/m32RMValidoValidoAñadir con CF r/m32 a r32.
REX.W + 13 /rADC r64, r/m64RMValidoNo codificableAñadir con CF r/m64 a r64.

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

Añade el operando de destino (primer operando), el operando de origen (segundo operando), y la bandera de acarreo (CF) y almacena el resultado en el operando de destino. El operando de destino puede ser un registro o una ubicación de memoria; el operando de origen puede ser un registro inmediato, o una ubicación de memoria. (Sin embargo, dos operandos de memoria no se pueden utilizar en una instrucción.) El estado de la bandera CF representa una carga de una adición anterior. Cuando un valor inmediato se utiliza como un operando, se muestra en la longitud del formato el operando de destino.

La instrucción ADC no distingue entre operandos con o sin signo. En su lugar, el procesador evalúa el resultado para ambos tipos de datos y establece las banderas OF y CF para indicar un port en el resultado con o sin signo, respectivamente. La bandera SF indica el signo del resultado con signo.

La instrucción ADC generalmente se ejecuta como parte de una adición multibyte o multipalabra en la que una instrucción ADD es seguida por una instrucción ADC.

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

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 + SRC + CF;

Intel C/C++ compilador intrínseco

ADC extern unsigned char _addcarry_u8(unsigned char c_in, unsigned char src1, unsigned char src2, unsigned char *sum_out);
ADC extern unsigned char _addcarry_u16(unsigned char c_in, unsigned short src1, unsigned short src2, unsigned short *sum_out);
ADC extern unsigned char _addcarry_u32(unsigned char c_in, unsigned int src1, unsigned char int, unsigned int *sum_out);
ADC extern unsigned char _addcarry_u64(unsigned char c_in, unsigned __int64 src1, unsigned __int64 src2, unsigned __int64 *sum_out);

Banderas afectadas

Las banderas OF, SF, ZF, AF, CF y PF se establecen según el resultado.

Excepciones

Modo protegido
#GP(0)Si el destino se encuentra en 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 se utiliza para acceder a la memoria y 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