# data[].attributes.body
Es una arquitectura RISC.  de 32 bits, salvo la versión del core ARMv8- A que es mixta 32/64 bits.

El chip en concreto que lleva la Raspberry Pi es el BCM2835, se trata de un SoC.  Contiene además de la CPU otros elementos como un núcleo GPU.

Un núcleo DSP:  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.attachment_caption
Figura 1.1: Registros de la arquitectura ARM

# data[].attributes.body
1.  Registros Generales: Es el almacenamiento temporal de datos. (R0-R12)

2.  Registros Especiales: Son los últimos 3 registros principales (R13-R15) Los cuales son:

1. SP(R13):  Stack Pointer  sirve para almacenar variables locales y registros en llamadas a funciones.

2. LR(R14):  Link Register  almacena la dirección de retorno cuando una instrucción BL ó BLX ejecuta una llamada a una rutina.

3. PC(R15):  Program Counter indica la posición donde está el procesador en su secuencia de instrucciones. Se incrementa de 4 en 4 cada vez que se ejecuta una instrucción.

3.  Registro CPSR: Almacena las banderas condicionales y los bits de control. Los
bits de control definen la habilitación de interrupciones normales.

1. N: Se activa cuando el resultado es negativo

2. Z: Se activa cuando el resultado es cero o una comparación es cierta

3. C: Indica acarreo en las operaciones aritméticas

4. V: Desbordamiento aritmético

# data[].attributes.body
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.

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:

1. Operaciones que se repitan un número elevado de veces.

2. Cuando se requiera una gran velocidad de proceso.

3. Para utilización y aprovechamiento de dispositivos y recursos del sistema.

# data[].attributes.attachment_caption
Figura 1.3: Entorno típico de programación

# data[].attributes.body
Los pasos habituales para hacer un programa son:
Escribir el programa en el lenguaje fuente mediante un editor de programas. El resultado es un fichero en un lenguaje que puede entender el usuario, pero no la máquina.
Para traducirlo a lenguaje máquina hay que utilizar un programa traductor. Éste genera un fichero con la traducción de dicho programa, pero todavía no es un programa ejecutable. Un fichero ejecutable contiene el programa traducido más una serie de códigos que debe tener todo programa que vaya a ser ejecutado en una máquina determinada. Entre estos códigos comunes se encuentran las librerías del lenguaje. El encargado de unir el código del programa con el código de estas librerías es un programa llamado montador (linker) que genera el programa ejecutable.

# data[].attributes.attachment_caption
Figura 1.2: Ubicación de datos en memoria

# data[].attributes.body
El procesador es Bi-Endian, es configurable entre Big Endian y Little Endian. Aunque nuestro sistema operativo nos lo limita a Little Endian. La regla que sigue es “el byte menos significativo ocupa la posición más baja”. Cuando escribimos un dato en una posición de memoria, dependiendo de si es byte, half word o word, ...

# data[].attributes.headline
principal característica de un módulo fuente

# data[].attributes.subject
principal característica de un módulo fuente

# data[].attributes.body
1. 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. Hay que tener especial cuidado para que los datos estén alineados en palabras de 4 bytes, sobre  todo después de las cadenas. Alinear significa rellenar con ceros el final de un dato para que el siguiente dato comience en una dirección múltiplo de 4 (con los dos bits menos significativos a cero). Los datos son modificables.

2. Sección de código. Se indica con la directiva .text, y sólo puede contener código o datos no modificables. Como todas las instrucciones son de 32 bits no hay que tener especial cuidado en que estén alineadas. Si tratamos de escribir en esta zona el ensamblador nos mostrará un mensaje de error.

# data[].attributes.attachment_caption
Listado 1.1: Código del programa intro1.s

# data[].attributes.body
En el código hay una serie de elementos que aparecerán en todos los programas

Datos:  Se pueden representar de distintas maneras. Para representar números tenemos 4 bases. La más habitual es en su forma decimal, la cual no lleva ningún delimitador especial.

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. Las macros y las constantes simbólicas son símbolos cuyo ámbito pertenece al preprocesador, a diferencia de las etiquetas que pertenecen al del ensamblador. Se especifican con las directivas .macro y .equ respectivamente y permiten que el código sea más legible y menos repetitivo.

# data[].attributes.body
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. El uso de directivas es aplicable sólo al entorno del compilador, por tanto varían de un compilador a otro y para diferentes versiones de un mismo compilador