HelloWorld en lenguaje ensamblador.

El ensamblador es un lenguaje que ya nos coge lejos a los de mi generación. Hay quien opina que está obsoleto y en desuso pero, nada más lejos de la realidad. Es un lenguaje muy útil para cosas tan «simples» como comprender qué ocurre cuando se ejecuta una sentencia de alto nivel o queremos ver el tiempo de ejecución de la misma. A día de hoy éste lenguaje sigue siendo utilizado (aunque no cómo lenguaje base) para compiladores, sistemas operativos, sistemas empotrados, etc.

Pra empezar con él vamos a usar MIPS. Por ahora, sólo decir que es usado por ejemplo por PS2 o por Lynksys en sus routers. Más adelante profundizaremos más en ello. Tendremos a nuestra disposición un procesador de 32 bits con arquitectura RISC, 32 registros de 32 bits cada uno y tres formatos de intrucciones: R, I, J de 32 bits.

R Op. Rs Rt Rd Shamt func
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
I Op. Rs Rt

Offset

6 bits 5 bits 5 bits

16 bits

J Op.

Offset

6 bits

26 bits

Primero vamos a necesitar un IDE, hemos elegido MARS (MIPS Assembler and Runtime Simulator), podemos descargarlo de aquí. Para su funcionamiento es imprescindible tener java instalado.

Hecho esto, es hora de programar nuestro HelloWorld!. Aquí tenemos el código:

.data
texto: .asciiz "Hola Mundo"

.text
.globl main
main:
la $a0, texto
li $v0, 0x00000004
syscall

Directivas:
.data – nos indica el inicio de la declaración de datos globales.
.asciiz – da a la variable ‘texto’ la cadena que le sigue más un carácter terminador.
.text – indica el inicio del código.
.globl – convierte la etiqueta main en global.

Instrucciones:
la $a0, texto  – Carga(la = load address) en el registro $a0 el contenido de ‘texto’
li $v0, 0x00000004 – Carga(li = load int) en $v0 el número 4, en este registro se almacenan los tipos de llamadas al sistema, el 4 indica que cuando se llame al sistema se imprima como String lo que contiene el registro $a0.

Con esto queda más o menos ilustrado este pequeño HelloWorld!. Más adelante profundizaremos en los detalles de los tipos registros y tipos de instrucciones de que dispone MIPS. Además el entorno MARS nos ayudará a ver cosas muy interesantes del manejo de memoria por parte del sistema lo cual nos hará comprender muchas cosas a bajo nivel.