SBB
Sutracción de enteros con el aburrimiento
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
1C ib | SBB AL, imm8 | I | Valido | Valido | Extracto con prestado imm8 de AL. |
1D iw | SBB AX, imm16 | I | Valido | Valido | Extracto con prestado imm16 de AX. |
1D id | SBB EAX, imm32 | I | Valido | Valido | Extracto con prestado imm32 de EAX. |
REX.W + 1D id | SBB RAX, imm32 | I | Valido | No codificable | Sustitúyase con el signo prestado imm.32 a 64-bits de RAX. |
80 /3 ib | SBB r/m8, imm8 | MI | Valido | Valido | Extracto con prestado imm8 de r/m8. |
81 /3 iw | SBB r/m16, imm16 | MI | Valido | Valido | Extracto con prestado imm16 de r/m16. |
81 /3 id | SBB r/m32, imm32 | MI | Valido | Valido | Extracto con prestado imm32 de r/m32. |
REX.W + 81 /3 id | SBB r/m64, imm32 | MI | Valido | No codificable | Subtract with borrow sign-extended imm32 a 64-bits de r/m64. |
83 /3 ib | SBB r/m16, imm8 | MI | Valido | Valido | Subtract with borrow sign-extended imm8 de r/m16. |
83 /3 ib | SBB r/m32, imm8 | MI | Valido | Valido | Subtract with borrow sign-extended imm8 de r/m32. |
REX.W + 83 /3 ib | SBB r/m64, imm8 | MI | Valido | No codificable | Subtract with borrow sign-extended imm8 de r/m64. |
18 /r | SBB r/m8, r8 | MR | Valido | Valido | Extracto con prestado r8 de r/m8. |
19 /r | SBB r/m16, r16 | MR | Valido | Valido | Extracto con prestado r16 de r/m16. |
19 /r | SBB r/m32, r32 | MR | Valido | Valido | Extracto con prestado r32 de r/m32. |
REX.W + 19 /r | SBB r/m64, r64 | MR | Valido | No codificable | Extracto con prestado r64 de r/m64. |
1A /r | SBB r8, r/m8 | RM | Valido | Valido | Extracto con prestado r/m8 de r8. |
1B /r | SBB r16, r/m16 | RM | Valido | Valido | Extracto con prestado r/m16 de r16. |
1B /r | SBB r32, r/m32 | RM | Valido | Valido | Extracto con prestado r/m32 de r32. |
REX.W + 1B /r | SBB r64, r/m64 | RM | Valido | No codificable | Extracto con prestado r/m64 de 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.
I
AL/AX/EAX/RAXimm8/16/32inmediato que sigue a la instruccion, del ancho del operando
MI
modrm.rmescriturabyte 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
MR
modrm.rmescriturabyte 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)
RM
modrm.regescriturabyte 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
Añade el operando de origen (segundo operando) y la bandera de acarreo (CF), y resta el resultado del operando de destino (primer operando). El resultado de la resta se almacena 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 un préstamo de una resta anterior.
Cuando un valor inmediato se utiliza como un operando, se muestra en la longitud del formato el operando de destino.
La instrucción SBB 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 préstamo en el resultado con o sin signo, respectivamente. La bandera SF indica el signo del resultado con signo.
La instrucción SBB generalmente se ejecuta como parte de una resta multibyte o multipalabra en la que una instrucción SUB es seguida por una instrucción SBB.
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
SBB extern unsigned char _subborrow_u8(unsigned char c_in, unsigned char src1, unsigned char src2, unsigned char *diff_out);
SBB extern unsigned char _subborrow_u16(unsigned char c_in, unsigned short src1, unsigned short src2, unsigned short *diff_out);
SBB extern unsigned char _subborrow_u32(unsigned char c_in, unsigned int src1, unsigned char int, unsigned int *diff_out);
SBB extern unsigned char _subborrow_u64(unsigned char c_in, unsigned __int64 src1, unsigned __int64 src2, unsigned __int64 *diff_out);Banderas afectadas
Las banderas OF, SF, ZF, AF, PF y CF 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 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. |