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
|