Check the new version here

Popular channels

Programación en ensamblador 1

Como sabemos, el ensamblador es un lenguaje de programación de computadores de bajo nivel, cercano al lenguaje entendido por la máquina u ordenador(el lenguaje máquina). Con la programación, indicamos al computador que cálculos debe realizar para llevar a cabo una tarea.

En este primer post vamos a explicar conceptos de programación en ensamblador sencillos utilizando la arquitectura del conjunto de instrucciones Intel IA32 en máquinas UNIX/Linux. A pesar de que esta arquitectura posee un 32 en el nombre, en ella se trabaja tanto con 32 bits como con 64, lo cual parece bastante divertido.

Nuestra IA 32 pues posee tres cosas que nos van a ser de gran utilidad:

1. Registros: Son algo parecido a contenedores de datos. Conforman la memoria que está integrada en el procesador, y que , por supuesto, es la más rápida. Hay un número limitado de ellos, y pueden contener un número limitado de bits. Si el programa que estamos realizando no es muy extenso y no exige muchas variables y constantes, utilizaremos exclusivamente registros para su implementación.En nuestro caso, en principio solo tendremos a nuestra disposición 6 registros de 32 bits.
Los registros disponibles son:
-EAX: El registro EAX tiene 32 bits y es una extensión del antiguo registro AX de 16 bits. Sirve para almacenar datos.
-EBX: Con este registro ocurre lo mismo que para el anterior, y su uso es igual.
-ECX: Misma situación que en los dos anteriores e igual uso.
-EDX: Semejante a los otros tres.
Los antiguos registros AX, BX, CX, DX así sus subdivisiones pueden seguir siendo utilizados, porque la IA32 busca la compatibilidad hacia atrás.Sin embargo, nosotros no los utilizaremos.

-ESI: Registro de almacenamiento de datos de 32 bits. Extensión del antiguo registro SI de 16 bits.
-EDI: Igual que el anterior (vez de SI, DI).

-Registro EFLAG: Utilizado para indicar comportamientos a la máquina y resultados de la ALU(Unidad Aritmético-Lógica).

Por último, los registros de puntero de pila, ESP(Extended Stack Pointer) y de base de pila, EBP(Extended Base Pointer), que los escribe el propio ensamblador, y con los que lo único que haremos será usar su valor, nunca almacenar nada en ellos.

2. Memoria: Evidentemente, con los registros no basta a la hora de hacer un programa exigente, ya que no tenemos muchos, por lo que necesitaremos utilizar también la memoria. Esta memoria es de 2^32 bytes (1 byte=8 bits). Aquí es donde entra en juego algo de dificultad con los conceptos de pila y puntero, que explicaremos más adelante. La memoria está segmentada, esto quiere decir que está dividida en trocitos del mismo tamaño, en los que se vamos almacenando los datos de los distintos programa. Mediante ciertos mecanismos se designan trozos de memoria a cada programa. Si en nuestro proceso de creación de un programa intentamos invadir los segmentos de otro programa, estaremos cometiendo una violación del segmento.

3. Conjunto de instrucciones: Son evidentemente todas las instrucciones que se pueden utilizar para escribir nuestros programas. Las instrucciones en nuestra computadora son de distintos tipos, como explicaremos posteriormente.

Finalmente, para acabar esta introducción, explicaremos los modos de direccionamiento. Un modo de direccionamiento no es más que la manera de indicar en una instrucción un operando. En IA32 hay 4 modos de direccionamiento:
-Inmediato: En este modo se da el operando directamente, codificado en hexadecimal. Por ejemplo:
          mov eax, 0x14712847
-Registro: En este modo se indica el registro en el que se encuentra el operando a utilizar. P. ej:
          mov eax, ebx
-Directo: Así se indica la dirección de memoria en la que está localizado el dato con el que operar. Por ejemplo:
          mov eax ,[0x47467647]
-Indirecto: Este método se basa en un desplazamiento desde una dirección origen o registro, con el fin de acceder al dato correcto. Este modo se usa en vectores, y para elementos almacenados en la pila. Ejemplo:
          mov eax, [ebp] 15

Aquí finaliza este post. Si alguien ve algún error en él, me gustaría mucho que me lo comunicara para corregirlo, ya que yo también estoy aprendiendo En el próximo post veremos el conjunto de instrucciones  y la sintaxis. ¡Un saludo programadores!
0
0
0
0
0No comments yet
      GIF
      New