Tienes un programa en ensamblador para ARM (cualquiera de clase vale) investigar y describir como lo compilaríais y
ejecutaríais en una maquina real, (en vez de en un emulador). ¿Se podría hacer?, ¿Cómo? Describe los pasos que seguiríais para
poder hacerlo, si lo habéis conseguido y los problemas que habéis encontrado.
Para realizar esta cuestión se ha decidido utilizar una Raspberry Pi 2, un computador de placa reducida, ya que se trata de una máquina con arquitectura ARM con un juego de instrucciones RISC de 32 bits.
Se va a utilizar un programa de prueba simple que muestra el siguiente mensaje por pantalla: "Pi: Ejecutando programa ARM...".
![]() |
Logo de Raspberry Pi |
La Raspberry Pi tiene como sistema operativo Raspbian. Por tanto, incluye el GNU Compiler Collection (GCC), el cual utilizaremos para ensamblar, enlazar y ejecutar el programa. Además, también incluye el editor de texto vi, el cual se puede utilizar para visualizar el contenido del archivo fuente.
Lo primero que hay que tener en cuenta son unas cuantas diferencias entre la sintaxis conocida ahora y la que debemos utilizar en el GCC, además de otros aspectos, tales como:
- El código y los datos están cargados en la RAM, asignados por el sistema operativo, usando direccionamiento de memoria virtual. Este hecho no debe influir, a no ser que queramos leer o escribir de los registros hardware.
- La ejecución del programa corre cargo del sistema operativo (Raspbian).
- La sintaxis es diferente, algunas de las diferencias son las siguientes:
- Los comentarios empiezan con arroba (@), no punto y coma (;).
- Las etiquetas deben estar seguidas de dos puntos (:).
- La sintaxis de la directiva son diferentes, por ejemplo:
- .text en vez de TEXT
- .data en vez de DATA
- .global label en vez de GLOBAL
- ...
Para visualizar el contenido de este archivo, utilizamos el editor de texto vi de la siguiente manera:
Obtenemos el siguiente resultado:
El siguiente paso es ensamblar el programa. Para ello utilizaremos la siguiente orden en la terminal: as –o mensaje_pi.o mensaje_pi.s 'as' es la instrucción del GCC para ensamblar el programa. '-o' le indica al ensamblador que debe crear el archivo objeto, con el nombre 'mensaje_pi.o'. Finalmente, 'mensaje_pi.s' indica el fichero fuente que debe ensamblar.
Y se nos crea el siguiente archivo en el directorio actual (ARM):
El siguiente paso es enlazar el programa para poder ejecutarlo. Para ello, escribimos en la terminal la orden ld –o mensaje_pi mensaje_pi.o
'ld' es el programa enlazador. La opción '-o' indica al programa que cree el archivo ejecutable, el cual se llamará 'mensaje_pi'. Por último, 'mensaje_pi.o' indica el archivo de entrada (en este caso, el archivo objeto).
Cabe destacar que tanto esta orden como la anterior no producen ninguna salida por terminal. Después de esto, ya tenemos el archivo ejecutable en el directorio:
Finalmente, sólo queda ejecutar el programa; lo haremos con la orden ./mensaje_pi, indicando que ejecute el programa 'mensaje_pi' ubicado en el directorio actual.
Produciendo la siguiente salida:
Para salir del programa, basta con pulsar la combinación de teclas Ctrl+C.
En conclusión, gracias a las páginas web consultadas y a tener una Raspberry Pi, realmente no hemos encontrado muchos problemas a la hora de ejecutar el programa en sí. Sin embargo, ha sido difícil descubrir y decidir apostar por la Raspberry Pi. Al principio no sabíamos por dónde empezar, aunque realmente existen diversas formas de realizar esta actividad. Por último, los cambios de sintaxis en el lenguaje ensamblador han podido dar algún que otro quebradero de cabeza, pero la simplicidad del programa elegido ha convertido este inconveniente en algo insignificante.