Al instalar emu8086 tenemos una guia a la que podemos acceder que nos brinda toda la informacion necesaria para empezar a programar en ensamblador, la guia esta en ingles y explica bien de forma resumida para que sirven las instrucciones
Esta corta guia es mi manera de haber entendido esas instrucciones con ejemplos faciles, espero les sirva
esta vez veremos algunas de las instrucciones basicas de ensamblador para el procesador 8086
Instruccion MOV: copia el operando 2 al operando 1
Ejemplo:
MOV OPERANDO1, OPERANDO2
Es como si hicieramos
OPERANDO1=OPERANDO2
(https://i.ibb.co/DLR7Yrp/instruccionmov.jpg)
podemos usar esta instruccion con [registro,memoria],[memoria,registro],[registro,registro],[memoria,valor_inmediato],[registro,valor_inmediato] como operando1 y operando2
Instruccion ADD permite añadir el valor de OPERANDO2 a OPERANDO1 como una suma
Ejemplo:
ADD OPERANDO1,OPERANDO2
es como si hicieramos un
OPERANDO1=OPERANDO1+OPERANDO2
(https://i.ibb.co/mH7kLSs/instruccion-ADD.jpg)
Instruccion SUB esta instruccion permite restar, es similar a ADD
Ejemplo
SUB OPERANDO1, OPERANDO2
Es como si hicieramos
OPERANDO1=OPERANDO1-OPERANDO2
Se puede utilizar con [registro, memoria], [memoria,registro], [registro,registro], [memoria,valor_inmediato], [registro,valor_inmediato] como operando1 y operando2
(https://i.ibb.co/vZPDfCQ/instruccion-Sub.jpg)
Instruccion MUL y DIV: Esta instruccion nos permite multiplicar o dividir un registro, pero solo contamos con un OPERANDO, debemos almacenar en AL el valor a multiplicar (En caso de que querramos multiplicar un BYTE) o en AX( En caso de que querramos multiplicar un WORD)
primero almacenaremos el valor que queremos multiplicar en AL
MOV AL,3 o AX MOV AX,20
MOV BL,10 o MOV BX,1225
Ejemplo:
MUL BL o MUL BX
Es como si estuvieramos haciendo esta operacion
AX=AL*OPERANDO o DX AX=AX*OPERANDO
del mismo modo si trabajamos con div
movemos a AL[byte] o AX [word] el valor que deseamos dividir
Ejemplo:
MOV AL,30 o MOV AX,5010
MOV BL,5 O MOV BX,5
DIV BL o DIV BX
Es como si hicieramos
AL=BL/OPERANDO o AX= BX/OPERANDO
el modulo se guarda en AH o en DX
DIV y MUL funcionan unicamente con [registros] o [memoria]
Instruccion JMP esta instruccion realiza un salto no condicional, es decir ocurre si o si
include 'emu8086.inc'
org 100h
mov AX,5
jmp etiqueta1
printn 'nada de esto se va a imprimir'
printn 'porque el jmp hace que el programa salta'
printn 'a lo que esta despues te etiqueta1'
mov ax,10
etiqueta1:
printn 'AX sigue valiendo 5 porque nunca se cumplio el segundo mov'
ret
aqui un ejemplo:
(https://i.ibb.co/0njhqkt/instruccionjmp.jpg)
Instruccion CMP: realiza una comparacion entre OPERANDO1 y OPERANDO2 si ambos operandos son iguales entonces se enciende un FLAG
ZF=1 si no son iguales
ZF=0 tambien se encienden otros flags dependiendo del caso
EJEMPLO:
CMP OPERANDO1,OPERANDO2
es como si hicieramos
OPERANDO1-OPERANDO2Instruccion JE JG JL Estas instrucciones aprovechan la instruccion CMP, despues de la comparacion utilizamos
JE Si ambos son iguales
OPERANDO1-OPERANDO2==0JG Si Operando1 es mayor a Operando2
OPERANDO1-OPERANDO2>0JL Si Operando1 es menor que Operando2
OPERANDO1-OPERANDO2<0los utilizamos cuando queremos realizar comparaciones En el ejemplo compararemos la nota de fulanito con la nota necesaria de aprobacion e imprimiremos un mensaje de aprobacion o reprobacion
(https://i.ibb.co/5nCh81Q/instruccion-CMP.jpg)
Instruccion LOOP: este es un ciclo repetitivo que ya explique en listas, pero la volveremos a ver, para indicar que numero de veces queremos que se repita una accion almacenamos un valor en CX, todo lo que este dentro de la etiqueta loop se repetira
por ejemplo si hacemos un MOV cx,5 las acciones se repetiran con cx=5, CX=4, CX=3, CX=2, CX=1
Ejemplo: imprimir 5 veces "debo hacer la tarea"
include 'emu8086.inc'
org 100h
mov cx,5
repetir:
printn 'debo hacer la tarea'
loop repetir
ret
(https://i.ibb.co/GMTT629/instruccionloop.jpg)
y bien estas son las instrucciones basicas que se encontraran en todo el codigo assembler que vean
empece a estudiar assembler con el objetivo de introducirme al cracking y tambien para modear malware pero no tengo la idea si lo que he posteado hasta ahora es suficiente o se necesita mas conocimiento en assembler, en fin espero que aprovechen el contenido trate de hacerlo muy facil de entender