# data[].attributes.body
ARM es una arquitectura RISC (Reduced Instruction Set Computer=Ordenador
con Conjunto Reducido de Instrucciones) de 32 bits, salvo la versión del core ARMv8-
A que es mixta 32/64 bits (bus de 32 bits con registros de 64 bits).

# data[].attributes.body
ARM Holdings
diseña la arquitectura, pero son otras compañías las que fabrican y venden los chips,
llevándose ARM Holdings un pequeño porcentaje por la licencia.

# data[].attributes.body
El chip en concreto que lleva la Raspberry Pi es el BCM2835, se trata de un SoC
(System on a Chip=Sistema en un sólo chip) que contiene además de la CPU otros
elementos como un núcleo GPU (hardware acelerado OpenGL ES/OpenVG/Open
EGL/OpenMAX y decodificación H.264 por hardware) y un núcleo DSP (Digital
signal processing=Procesamiento digital de señales) que es un procesador más pequeño y simple que el principal, pero especializado en el procesado y representación
de señales analógicas

# data[].attributes.body
La arquitectura ARMv6 presenta un conjunto de 17 registros (16 principales más
uno de estado) de 32 bits cada uno.

# data[].attributes.body
Registros Generales: Su función es el almacenamiento temporal de datos. Son los
13 registros que van R0 hasta R12.

Registros Especiales: Son los últimos 3 registros principales: R13, R14 y R15. Como son de propósito especial, tienen nombres alternativos  SP/R13,  LR/R14  y  PC/R15.

Registro CPSR: Almacena las banderas condicionales y los bits de control.

# data[].attributes.body
El lenguaje ensamblador
El ensamblador es un lenguaje de bajo nivel que permite un control directo de la CPU y todos los elementos asociados. Cada línea de un programa ensamblador consta de una instrucción del procesador y la posición que ocupan los datos de esa instrucción.

# data[].attributes.body
La estructura más general de un módulo fuente es:
-Sección de datos. Viene identificada por la directiva .data. En esta zona se definen todas las variables que utiliza el programa con el objeto de reservar memoria para contener los valores asignados.

-Sección de código. Se indica con la directiva .text, y sólo puede contener código o datos no modificables.

# data[].attributes.body
Ventajas y desventajas
El ensamblador presenta una serie de ventajas e inconvenientes con respecto a
otros lenguajes de más alto nivel. Al ser un lenguaje de bajo nivel, presenta como
principal característica la flexibilidad y la posibilidad de acceso directo a nivel de
registro. En contrapartida, programar en ensamblador es laborioso puesto que los
programas contienen un número elevado de líneas y la corrección y depuración de
éstos se hace difícil.

# data[].attributes.body
Los datos se pueden representar de distintas maneras. Para representar números
tenemos 4 bases decimal, binario, octal,hexadecimal.

# data[].attributes.body
Generalmente, y dado que crear programas un poco extensos es laborioso, el

ensamblador se utiliza como apoyo a otros lenguajes de alto nivel para 3 tipos de

situaciones:

- Operaciones que se repitan un número elevado de veces.
- Cuando se requiera una gran velocidad de proceso.
- Para utilización y aprovechamiento de dispositivos y recursos del sistema.

# data[].attributes.body
Símbolos
Como las etiquetas se pueden ubicar tanto en la sección de datos como en la de código, la versatilidad que nos dan las mismas es enorme. En la zona de datos, las etiquetas pueden representar variables, constantes y cadenas. En la zona de código podemos usar etiquetas de salto, funciones y punteros a zona de datos.

# data[].attributes.body
Directivas
Las directivas son expresiones que aparecen en el módulo fuente e indican al compilador que realice determinadas tareas en el proceso de compilación. Son fácilmente distinguibles de las instrucciones porque siempre comienzan con un punto.

Directivas de asignación: Se utilizan para dar valores a las constantes o reservar posiciones de memoria para las variables (con un posible valor inicial). .byte, .hword, .word, .ascii, .asciz, .zero y .space son directivas que indican al compilador que reserve memoria para las variables del tipo indicado.

Directivas de control: .text y .data sirven para delimitar las distintas secciones de nuestro módulo.

Directivas de operando: Se aplican a los datos en tiempo de compilación.

Directivas de Macros: Una .macro es un conjunto de sentencias en ensamblador (directivas e instrucciones) que pueden aparecer varias veces repetidas en un  programa con algunas modificaciones (opcionales).