Instrucciones basicas en ensamblador [facil]

Iniciado por ErielSinh, Diciembre 17, 2020, 07:32:15 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Diciembre 17, 2020, 07:32:15 PM Ultima modificación: Diciembre 17, 2020, 07:46:59 PM por ErielSinh
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


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


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


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
Código: php

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:


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-OPERANDO2

Instruccion JE JG JL Estas instrucciones aprovechan la instruccion CMP, despues de la comparacion utilizamos
JE Si ambos son iguales  OPERANDO1-OPERANDO2==0
JG Si Operando1 es mayor a Operando2 OPERANDO1-OPERANDO2>0
JL Si Operando1 es menor que Operando2 OPERANDO1-OPERANDO2<0

los 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


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"
Código: php

include 'emu8086.inc'
org 100h

mov cx,5

repetir:   
printn 'debo hacer la tarea' 
loop repetir   

ret



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