# data[].attributes.body
ARM o Advanced RISC Machine se trata de una arquitectura para microprocesadores desarrollada por ARM Holdings. Se trata de una arquitectura licenciable que permite que sea usada en distintos dispositivos de diversas compañías, lo que permite que esta arquitectura se encuentre en muchos dispositivos de uso cotidiano.

La relativa simplicidad de los procesadores ARM los hace ideales para aplicaciones de baja potencia. Como resultado, se han convertido en los dominantes dentro del mercado de la electrónica móvil e integrada.

# data[].attributes.body
La arquitectura ARMv6 es conformada por 17 registros de 32 bits cada uno. Dentro de estos registros tenemos 16 principales y uno de estado.
Los registros se dividen en 3 categorías:

1. Registros Generales

2. Registros Especiales

3. Registro CPSR

# data[].attributes.body
Este se encarga de almacenar temporalmente datos, tiene un espacio de 13 registros ubicados de R0 a R12.

# data[].attributes.body
Son los últimos 3 registros principales, cada uno con una función especifica por cumplir:

SP/R13: Stack Pointer ó Puntero de Pila. Sirve como puntero para almacenar variables locales y registros en llamadas a funciones.

LR/R14: Link Register ó Registro de Enlace. Almacena la dirección de retorno cuando se ejecuta una llamada a una rutina.

PC/R15: Program Counter ó Contador de Programa. Es un registro que indica la posición donde está el procesador en su secuencia de instrucciones.

# data[].attributes.attachment_caption
Estructura del Registro CPSR y sus divisiones

# data[].attributes.body
El Registro CPSR almacena las banderas condicionales y los bits de control. Dentro de este registro se encuentras tres estructuras clave (De Izquierda a derecha en la Imagen):

1. Banderas Condicionales (N, Z, C, V)

2. Bits de Interrupción (I, F)

3. Instrucciones Thumbs (T)

4. Modo Operativo (M4 - M0)

# data[].attributes.body
Se trata de un lenguaje de bajo nivel con el que se accede casi directamente al CPU. En relación al procesador cada lineá de este lenguaje es una instrucción al mismo, lo que permite flexibilidad pues se hace contacto directo con el procesador, no obstante se trata de un proceso tedioso y complejo debido a la gran cantidad de líneas que involucran realizar una acción simple.

# data[].attributes.attachment_link.readable_text
SYS_SALIDA equ 1
section .data
     msg db "Hola, Mundo!!!",0x0a
     len equ $ - msg ;longitud de msg
section .text
   global _start ;para el linker
_start: ;marca la entrada
     mov eax, 4 ;llamada al sistema (sys_write)
     mov ebx, 1 ;descripción de archivo (stdout)
     mov ecx, msg ;msg a escribir
     mov edx, len ;longitud del mensaje
     int 0x80 ;llama al sistema de interrupciones
fin: mov eax, SYS_SALIDA ;llamada al sistema (sys_exit)
     int 0x80

# data[].attributes.body
1. El programa se escribe en un editor de programas.

2. Se traduce a lenguaje maquina mediante un traductor.

3. El traductor genera un fichero con el programa traducido.

4. Se genera un fichero ejecutable contenedor del código y una serie de instrucciones mas.

5. Un programa montador se encarga de unir cada pieza resultante en un ejecutable listo para ser lanzado.

# data[].attributes.body
Dentro de la estructura general de un archivo de ensamblador, este se conforma por:

Sección de Datos: Identificada con .data en la parte donde se definen las variables.

Sección de Código: Identificada con .text solamente contiene instrucciones de código.

En términos generales un modulo fuente se conforma por Instrucciones, Datos, Símbolos y Directivas.

# data[].attributes.body
1. Datos: Estos se representan en 4 formas distintas; decimal, hexadecimal (con prefijo 0x), binario (prefijo 0b) y octal (prefijo 0).

2. Instrucciones: Son Nemónicos que nos indican la acción a realizar con cierto operador y/o valor. Ejemplo:  mov, ldr, str, ldm, stm, push, pop.

3. Símbolos: Son capaces de utilizarse en la sección de datos como en la de código. En cada parte tiene una función distinta.

4. Directivas: Ordenes que le indican al compilador que se realicen tareas especificas en el proceso de compilación.

# data[].attributes.body
Con GNU Assembler nos permite ensamblar un archivo (Primera Lineá del Archivo de Texto)

Luego se crea el archivo ejecutable
(Segunda Lineá del Archivo de Texto)

# data[].attributes.body
Para establecer una conexión con el dispositivo, debemos conectarlo a una red Ethernet, una vez hecho esto, obtenemos su IP y mediante SSH nos conectamos a la dirección IP, utilizando el comando (tomando de ejemplo la dirección 192.168.1.42) :

ssh pi@192 .168.1.42