About Taringa!

Popular channels

Introducción al Assembler

El post va a ser puramente práctico, si alguien está interesado pero no sabe bien de qué se trata el assembler le recomiendo buscar un poco por internet para estar al tanto!

Esto está realizado en un emulador de debug ya que no corre en los SO de 64 bits o en los mas nuevos ya ni viene. De todas formas se pueden buscar por internet algún emulador y listo! O si bien tienen alguna PC con un win de 32b ejecutan el CMD y escriben DEBUG y ya entran!

*Gracias titi40 por recordarme esto

Aspectos a tener en cuenta (hay muchos más pero para iniciar en el tema alcanza):

enter E address




assemble A



unassemble U



register R



Los registros que vamos a utilizar tienen una parte baja y una parte alta, es decir:

*El registro AX tiene una parte AH y una parte AL que se componen de 8 bits cada una.



De todas formas lo veremos más adelante.

Caso práctico 1:

Colocar en la posición de memoria 0100 el dato 02 00.
Colocar en la posición de memoria 0200 el dato 04 00.
Verificar que estén correctos.
Comenzar a escribir las instrucciones desde la posición 1000.
Mover al registro AX el dato de la posición 0100.
Mover al registro BX el dato de la posición 0200.
Sumarle al registro AX el registro BX.
Mover lo que esté dentro del registro AX a la posición de memoria 0300.
Verificar que estén correctos.
Ejecutar el programa!

Bien ahora voy a explicar paso por paso:


1) Colocar en la posición de memoria 0100 el dato 02 00.

Hacemos un E en la posición 0100 y escribimos primero 02 y luego 00 (tocando la barra espaciadora sigue en la memoria).



2) Colocar en la posición de memoria 0200 el dato 04 00.



3) Verificar que estén correctos.

Hacemos un E en la posición 0100 y otro en la 0200 para comprobar que estén los datos (simplemente hacemos E [posición], tocamos enter y vamos presionando la barra espaciadora).



4) Comenzar a escribir las instrucciones desde la posición 1000.

Vamos a empezar a hacer el A (assemble de las instrucciones a partir de la posición 1000)



5) Mover al registro AX el dato de la posición 0100.

Es decir, nos pide que movamos hacia la posición 0100 el número 2 (en este caso vamos a usar el registro entero, parte baja y alta).

Al escribir 02 00 quedaría como si fuese 0002, son 8 bits y 8 bits.

Entonces:

Hacemos con el comando A (assemble) en la posición 1000 un MOV AX, .



Se está moviendo al registro AX lo que hay dentro de la posición .

6) Mover al registro BX el dato de la posición 0200.

Les recomiendo escribir todas las instrucciones seguidas para no hacerse lío con las posiciones de memoria.



Muevo a BX lo que hay dentro de la posición [0200].

7) Sumarle al registro AX el registro BX.

Le adicionamos (add) al registro AX lo que hay en el registro BX.



8) Mover lo que esté dentro del registro AX a la posición de memoria 0300.

Primero va la posición de destino y luego lo que se va a mover.



9) Verificar que estén correctos.



10) Ejecutar el programa!

Para ejecutar el programa se utiliza el comando P lo cual va a ejecutar instrucción por instrucción comenzando desde la posición de memoria que indique el IP.



En nuestro caso el programa va a comenzar en la posición de memoria 1000, entonces tenemos que cambiar el valor del registro con el comando RIP.



También sirve para cambiar otros registro, por ejemplo en el caso de AX sería RAX.

Bien, ahora solo queda ir ejecutando con el comando P instrucción por instrucción.



Luego de ejecutar todas las instrucciones vamos a observar la posición de memoria 0300 en la cual si todo salió bien tendría que estar el valor 06 00 (6).



Bueno esto es una introducción muy básica, si a alguien le interesa después hago una segunda parte con más ejemplos y con instrucciones ya un poco mas complejas.
12Comments