INSTRUCCIONES ARITMETICAS (Afectan los flags AF, CF, OF, PF, SF, ZF)

INSTRUCCIONES ARITMETICAS (Afectan los flags AF, CF, OF, PF, SF, ZF)

ADD dest,src
Operación: dest <- dest + src.
ADC dest,src
Operación: dest <- dest + src + CF.
SUB dest,src
Operación: dest <- dest - src.
SBB dest,src
Operación: dest <- dest - src - CF.
CMP dest,src
Operación: dest - src (sólo afecta flags).
INC dest
Operación: dest <- dest + 1 (no afecta CF).
DEC dest
Operación: dest <- dest - 1 (no afecta CF).
NEG dest
Operación: dest <- - dest.
donde dest = {regmem} y src = {regmeminmed} no pudiendo ambos operandos estar en memoria.
DAA
Corrige el resultado de una suma de dos valores BCD empaquetados en el registro AL (debe estar inmediatamente después de una instrucción ADD o ADC). OF es indefinido después de la operación.
DAS
Igual que DAA pero para resta (debe estar inmediatamente después de una instrucción SUB o
SBB).
AAA
Lo mismo que DAA para números BCD desempaquetados.
AAS
Lo mismo que DAS para números BCD desempaquetados.
AAD
Convierte AH:AL en BCD desempaquetado a AL en binario.
Operación: AL <- AH * 0Ah + AL, AH <- 0. Afecta PF, SF, ZF, mientras que AF, CF y OF quedan indefinidos.
AAM
Convierte AL en binario a AH:AL en BCD desempaquetado.
Operación: AH <- AL / 0Ah, AL <- AL mod 0Ah. Afecta PF, SF, ZF, mientras que AF, CF y OF quedan indefinidos.
MUL {reg8mem8}
Realiza una multiplicación con operandos no signados de 8 por 8 bits.
Operación: AX <- AL * {reg8mem8}. CF=OF=0 si AH = 0, CF=OF=1 en caso contrario. AF, PF,
SF, ZF quedan indefinidos.
MUL {reg16mem16}
Realiza una multiplicación con operandos no signados de 16 por 16 bits.
Operación: DX:AX <- AX * {reg16mem16}. CF=OF=0 si DX = 0, CF=OF=1 en caso contrario.
AF, PF, SF, ZF quedan indefinidos.
IMUL {reg8mem8}
Realiza una multiplicación con operandos con signo de 8 por 8 bits.
Operación: AX <- AL * {reg8mem8} realizando la multiplicación con signo. CF = OF = 0 si el resultado entra en un byte, en caso contrario valdrán 1. AF, PF, SF, ZF quedan indefinidos.
IMUL {reg16mem16}
Realiza una multiplicación con operandos con signo de 16 por 16 bits.
Operación: DX:AX <- AX * {reg16mem16} realizando la multiplicación con signo. CF = OF = 0 si el resultado entra en dos bytes, en caso contrario valdrán 1. AF, PF, SF, ZF quedan indefinidos.
CBW
Extiende el signo de AL en AX. No se afectan los flags.
CWD
Extiende el signo de AX en DX:AX. No se afectan flags.

No hay comentarios: