Grupos de instrucciones :
Manejo deMemoria:
Instrucción |
Operandos |
Función equivalente en "C" |
MOV |
destino, fuente |
destino = fuente |
PUSH |
fuente |
[SS:SP] = fuente; SP += sizeof(destino) |
POP |
destino |
SP -= sizeof(destino) ; destino = [SS:SP] |
XCHG |
op1, op2 |
temp = op1; op1 = op2; op2 = temp |
Instricciones
Aritmeticas:
Instrucción |
Operandos |
Función equivalente en "C" |
Resultados |
ADD |
op1, op2 |
op1 = op1 + op2 |
|
SUB |
op1, op2 |
op1 = op1 - op2 |
ADC |
op1, op2 |
op1 = op1 + op2 + Carry |
SBB |
op1, op2 |
op1 = op1 - op2 - Carry |
|
INC |
op1 |
op1 ++; |
|
DEC |
op1 |
op1 --; |
|
MUL |
op1 |
Si op1 es tipo byte: |
AX = AL * op1 |
|
|
Si op1 es tipo word: |
(DX:AX) = AX * op1 |
DIV |
op1 |
Si op1 es tipo byte: |
AL = AX / op1 |
|
|
|
AH = AX % op1 |
|
|
Si op1 es tipo word: |
AX = (DX : AX) / op1 |
|
|
|
DX = (DX : AX) % op1 |
NEG |
op1 |
op1 = - op1 |
|
Manejo
de Bits
(rotaciones
y desplazamientos):
Instrucción |
Operandos |
Función equivalente en "C" |
SHL |
op1, cuenta |
op1 <<= cuenta |
SHR |
op1, cuenta |
op1 >>= cuenta |
SAR |
op1, cuenta |
(no hay equivalente) |
ROL |
op1, cuenta |
(no hay equivalente) |
ROR |
op1, cuenta |
(no hay equivalente) |
Operaciones
lógicas (Booleanas):
Instrucción |
Operandos |
Función equivalente en "C" |
AND |
op1, op2 |
op1 = op1 & op2 |
OR |
op1, op2 |
op1 = op1 | op2 |
XOR |
op1, op2 |
op1 = op1 ^ op2 |
NOT |
op1 |
op1 = ~op1 |
|
Evaluación
de Condiciones y Saltos:
Instrucción |
Operandos |
Función equivalente en "C" |
JMP |
etiqueta |
|
goto |
CMP |
op1, op2 |
|
(no hay equivalente) |
Comparaciones sin signo |
JB/JNAE |
etiqueta |
if (op1 < op2) /* con un CMP */ |
goto |
JNB/JAE |
etiqueta |
if (op1 >= op2) /* con un CMP */ |
goto |
JBE/JNA |
etiqueta |
if (op1 <= op2) /* con un CMP */ |
goto |
JNBE/JA |
etiqueta |
if (op1 > op2) /* con un CMP */ |
goto |
JE/JZ |
etiqueta |
if (op1 == op2) /* con un CMP */ |
goto |
JNE/JNZ |
etiqueta |
if (op1 != op2) /* con un CMP */ |
goto |
Comparaciones con signo |
JL/JNGE |
etiqueta |
if (op1 < op2) /* con un CMP */ |
goto |
JNL/JGE |
etiqueta |
if (op1 >= op2) /* con un CMP */ |
goto |
JLE/JNG |
etiqueta |
if (op1 <= op2) /* con un CMP */ |
goto |
JNLE/JG |
etiqueta |
if (op1 > op2) /* con un CMP */ |
goto |
JP/JPE |
etiqueta |
if (PF) /* Parity flag */ |
goto |
JNP/JPO |
etiqueta |
if (! PF) |
goto |
JS |
etiqueta |
if (SF) /* Sign flag */ |
goto |
JNS |
etiqueta |
if (! SF) |
goto |
JC |
etiqueta |
if (CF) /* Carry flag */ |
goto |
JNC |
etiqueta |
if (! CF) |
goto |
JO |
etiqueta |
if (OF) /* Overflow flag */ |
goto |
JNO |
etiqueta |
if (! OF) |
goto |
Uso de
Procedimientos/Subrutinas:
Instrucción |
Operandos |
Función equivalente en "C" |
CALL |
etiqueta |
Llamada a función |
|
|
PUSH IP |
|
|
PUSH CS ; Sólo si es llamada larga (CALL
FAR) |
|
|
JMP etiqueta |
RET |
(ninguno) |
return |
|
|
POP IP-temp |
|
|
POP CS-temp ; Sólo si es llamada larga
(RETF) |
|
|
JMP CS-temp:IP-temp |
CONCLUSIONES:
Aunque
estas sean solo algunas de las instrucciones que se puden
manejar en Ensablador, me he podido dar cuenta, por lo
visto en clase y lo investigado, de lo poderoso que es
este lenguaje, ya que se pueden hacer programas sencillos
hasta virus dañinos. Ademas que este lenguaje en una
interfaz entre el lenguaje maquina y los lenguajes que
usamos mas comunmente como C++ o Pascal y esto es de gran
ayuda ya que es bastante complicado el lenguaje maquina.
REFERENCIAS:
http://www.sinergia-web.com.mx/clases/asm9708/Temas/clase07.htm
http://lafaq.espaweb.com/manuales/programacion.htm
http://www.intel.com
|