Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Programación en ensamblador (Resumen II)

17 marzo, 2012

2. Lenguajes de programación

El fichero que contiene el conjunto de instrucciones de un programa (código) se denomina código fuente.

Si queremos ejecutar un programa tenemos que traducirlo a un lenguaje que pueda entender el compilador, esto se llama compilar. Con esto conseguiremos el código ejecutable.

Para conseguir el código ejecutable tenemos que seguir dos pasos, convertir el código fuente en código objeto, y enlazar los códigos objetos que necesitemos en el ejecutable.

-Lenguaje máquina:

Es el lenguaje que interpreta y ejecuta el procesado, este código está formado por instrucciones binarias, es decir, esta codificado en ceros y unos.

-Lenguaje ensamblador:

Este lenguaje está diseñado para poder escribir programas con una sintaxis más cercana al programador pero todavía próximo al lenguaje máquina, por lo que no tenemos que escribir el código en ceros y unos sino utilizando unas reglas más fáciles. Para ejecutar este código es necesario que se traduzca a lenguaje maquina aunque estas traducciones son más rápidas y sencillas que los lenguajes de alto nivel.
Utilizaremos la sintaxis NASM para realizar los programas en ensamblador.

3. Programación en ensamblador

Los programas diseñados en ensamblador tienen que tener la siguiente estructura:

section .data
section .bss
section .text

.data contiene los datos inicializados.
.bss contiene los datos no inicializados. (Opcional)
.text contiene las instrucciones. (Obligatoria)

.text tiene que tener la etiqueta main, que es donde comenzará el programa, y también tiene que tener una instrucción que devuelva el control al sistema operativo.
Utilizando ; podemos poner comentarios en el código.

Directivas

Sirven para declarar elementos que vayamos a utilizar en el programa (constantes, variables, globales).

Las constantes se pueden declarar en cualquier sección del programa, sin embargo las variables debemos declararlas en el .data si las vamos a inicializar y en el .bss si no las vamos a inicializar.

Definiremos constantes de la siguiente forma:

nom_constante equ ‘letras’
nom_constante equ 5

Para declarar variables lo haremos de la siguiente forma:

Nom_variable tipo texto_o_número.
cumple db 21 ; en hexadecimal no puede pasar de FFh (255)
masGrande dw FFFFh ; palabra no más grande de 4 en hexadecimal
masmasG dd 345345 ; FFFFFFFFh no más grande de 8 en hexadecimal
big dq 2345345 ; no más grande de FFFFFFFFFFFFFh 12 cifras en hexadecimal.

Para las variables se puede poner una d, diciendo que es decimal, una h diciendo que es hexadecimal, o separar las cifras con guiones bajos para mejorar la lectura (FF_34_34).

Los valores hexadecimales tienen que comenzar por 0x, 0h o $, o deben finalizar
con una h.

En hexadecimal no pueden empezar por letra, añadiéndoles 0x, 0h o $ al comienzo del valor.

Los caracteres tienen que escribirse entrecomillados con cualquiera de las comillas.
Las cadenas de caracteres pueden separase por comas, el resultado será igual que si están juntas.

Si la cadena se ha declarado con comillas “tumbadas” se le podrá añadir secuencias de escape como el salto de línea o el tabulador, etc. Para añadir secuencias de escape es necesario empezar con la barra \ , por ejemplo:

Stringss dw `salta\n` ; saltaría de línea después de la cadena Stringss

…. parte anterior