dest - Erika Vilches

Anuncio
Instrucciones
Arquitectura x86
M. en C. Erika Vilches
MOV
• Mover datos (move data)
• Sintaxis
MOV dest, orig
• Operación
dest ← orig
• Restricciones:
• Los operandos deben ser del mismo
tamaño (BYTE, WORD o DWORD)
• dest debe ser un registro o una
localidad de memoria
• orig puede ser un registro, una localidad
de memoria o un valor inmediato
• dest y orig NO pueden ser localidades
de memoria al mismo tiempo
XCHG
• Intercambiar datos (Exchange data)
• Sintaxis
XCHG op1, op2
• Operación
temp ← op1
op1 ← op2
op2 ←temp
• Restricciones:
• Los operandos deben ser del mismo
tamaño (BYTE, WORD o DWORD)
• Al menos uno de los operandos tiene
que ser un registro
• El otro operando puede ser una
localidad de memoria u otro registro
•
•
•
•
•
•
•
•
•
•
Instrucciones
Aritméticas
CLC
STC
CMC
ADD
ADC
INC
SUB
SBB
DEC
NEG
•
•
•
•
•
•
•
•
•
•
•
CMP
MUL
IMUL
DIV
IDIV
CBW
CWD
CDQ
CWDE
MOVSX
MOVZX
CLC
• Limpiar bandera de carry (Clear carry)
• Sintaxis
CLC
• Operación
CF ← 0
STC
• Prender bandera de carry (Set carry flag)
• Sintaxis
STC
• Operación
CF ← 1
CMC
• Complementar la bandera de carry
(Complement carry flag)
• Sintaxis
CMC
• Operación
CF ← ~CF
ADD
• Sumar enteros (Add integers)
• Sintaxis
ADD dest, orig
• Operación
dest ← dest + orig
•
Restricciones (Las mismas de MOV):
•
Los operandos deben ser del mismo tamaño
(BYTE, WORD o DWORD)
•
dest debe ser un registro o una localidad de
memoria
•
orig puede ser un registro, una localidad de
memoria o un valor inmediato
•
dest y orig NO pueden ser localidades de
memoria al mismo tiempo
•
Banderas modificadas: OF SF ZF AF PF CF
Ejemplo de ADD
AX: 0075
CX: 01A2
ADD AX, CX
Resultado:
AX: 0217
CX: 01A2
SF = ZF = CF = OF = AF= 0
PF=1
Ejemplo de ADD
AX: 77AC
CX: 4B35
ADD AX, CX
Resultado:
AX: C2E1
CX: 4B35
AF = PF = SF = OF = 1
ZF = CF = 0
ADC
• Suma con carry (Add with carry)
• Sintaxis
ADC dest, orig
• Operación
dest ← dest + orig + CF
•
Restricciones (Las mismas de MOV):
•
Los operandos deben ser del mismo tamaño
(BYTE, WORD o DWORD)
•
dest debe ser un registro o una localidad de
memoria
•
orig puede ser un registro, una localidad de
memoria o un valor inmediato
•
dest y orig NO pueden ser localidades de
memoria al mismo tiempo
•
Banderas modificadas: OF SF ZF AF PF CF
INC
• Incrementar entero (Increment integer)
• Sintaxis
INC dest
• Operación
dest ← dest + 1
• Restricciones:
• dest debe ser un registro o localidad de
memoria de tamaño BYTE, WORD o
DWORD
• Banderas modificadas: OF SF ZF AF PF
Ejemplo de INC
ECX: 00 00 01 A2
INC ECX
Resultado:
ECX = 00 00 01 A3
AF = SF = ZF = OF = 0
PF = 1
Ejemplo de INC
EDX: 7F FF FF FF
INC EDX
Resultado:
EDX: 80 00 00 00
SF = OF = AF = PF = 1
ZF = 0
SUB
• Restar enteros (Substract Integers)
• Sintaxis
SUB dest, orig
• Operación
dest ← dest - orig
•
Restricciones (Las mismas de MOV):
•
Los operandos deben ser del mismo tamaño
(BYTE, WORD o DWORD)
•
dest debe ser un registro o una localidad de
memoria
•
orig puede ser un registro, una localidad de
memoria o un valor inmediato
•
dest y orig NO pueden ser localidades de
memoria al mismo tiempo
•
Banderas modificadas: OF SF ZF AF PF CF
Ejemplo de SUB
EAX: 00 00 00 75
ECX: 00 00 01 A2
SUB EAX, ECX
Resultado:
EAX: FF FF FE D3
ECX: 00 00 01 A2
AF = CF = SF = 1
ZF = PF = OF = 0
Ejemplo de SUB
DX: FF 20
Valor: FF 20
SUB DX, Valor
Resultado:
DX: 00 00
Valor: FF 20
ZF = PF = 1
AF = CF = SF = OF = 0
SBB
• Restar con préstamo (Substract with borrow)
• Sintaxis
SBB dest, orig
• Operación
dest ← dest - orig - CF
•
Restricciones (Las mismas de MOV):
•
Los operandos deben ser del mismo tamaño
(BYTE, WORD o DWORD)
•
dest debe ser un registro o una localidad de
memoria
•
orig puede ser un registro, una localidad de
memoria o un valor inmediato
•
dest y orig NO pueden ser localidades de
memoria al mismo tiempo
•
Banderas modificadas: OF SF ZF AF PF CF
DEC
• Decrementar entero (Decrement integer)
• Sintaxis
DEC dest
• Operación
dest ← dest - 1
• Restricciones (Las mismas de INC):
• dest debe ser un registro o localidad de
memoria de tamaño BYTE, WORD o
DWORD
• Banderas modificadas: OF SF ZF AF PF
Ejemplo de DEC
BX: 00 01
DEC BX
Resultado:
BX: 00 00
AF = PF = ZF = 1
SF = OF = 0
Ejemplo de DEC
AL: F5
DEC AL
Resultado:
AL: F4
SF = AF = 1
OF = ZF = PF = 0
NEG
• Negar (Negate) - Complemento a 2
• Sintaxis
NEG dest
• Operación
dest ← - dest
• Nota: Prende la bandera CF, a menos que
el dest sea cero, en cuyo caso se apaga CF
• Restricciones (Las mismas de INC):
• dest debe ser un registro o localidad de
memoria de tamaño BYTE, WORD o
DWORD
• Prende CF a menos que dest sea cero, en
cuyo caso CF se apaga
• Banderas modificadas: OF SF ZF AF PF
CF
Ejemplo de NEG
BX: 01 A2
NEG BX
Resultado:
BX: FE 5E
SF = CF = 1
AF = OF = PF = ZF = 0
Ejemplo de NEG
DH: F5
NEG DH
Resultado:
DH: 0B
CF = 1
PF = AF = OF = SF = ZF = 0
Ejemplo de NEG
EAX: 00 00 00 00
NEG EAX
Resultado:
EAX: 00 00 00 00
AF = PF = ZF = 1
CF = SF = OF = 0
MUL
•
•
Multiplicación
Sintaxis
MUL orig
•
Operación
if (size(orig)== 8) {
AX ← AL × orig
} else if (size(orig)==16) {
DX:AX ← AX × orig
} else if (size(orig)==32) {
EDX:EAX ← EAX × orig
}
• Restricciones:
• Utilizado para multiplicaciones
UNSIGNED.
• orig debe ser un registro o localidad de
memoria de tamaño BYTE, WORD o
DWORD.
IMUL
•
•
Multiplicación
Sintaxis
IMUL orig
•
Operación
if (size(orig)== 8) {
AX ← AL × orig
} else if (size(orig)==16) {
DX:AX ← AX × orig
} else if (size(orig)==32) {
EDX:EAX ← EAX × orig
}
• Restricciones:
• Utilizado para multiplicaciones SIGNED.
• orig debe ser un registro o localidad de
memoria de tamaño BYTE, WORD o
DWORD.
IMUL
• Multiplicación
• Sintaxis
IMUL dest, orig
• Operación
dest ← dest × orig
• Restricciones:
• Los operandos deben ser del mismo
tamaño (WORD o DWORD).
• dest debe ser un registro.
• orig puede ser un registro, localidad de
memoria o valor inmediato.
IMUL
• Multiplicación
• Sintaxis
IMUL dest, orig, const
• Operación
dest ← orig × const
• Restricciones:
• Los operandos deben ser del mismo
tamaño (WORD o DWORD).
• dest debe ser un registro.
• orig puede ser un registro o localidad de
memoria.
• const debe ser un valor inmediato.
Descargar