# data[].attributes.body
¿Qué es ARM?
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). Se trata de una arquitectura licenciable, quiere decir que la empresa desarrolladora 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.attachment_link.readable_text
ARM está conquistando poco a poco el mundo. Su negocio mediante licencias a fabricantes le ha permitido sacar tajada del mercado de Intel a base de colocar chips en todo tipo de teléfonos, portátiles y otros dispositivos. Ahora la compañía se prepara para dar el siguiente gran paso: una nueva arquitectura para chips, la primera en diez años.

Durante gran parte de la última década la mayoría de smartphones que han llegado en el mercado lo han hecho b ajo arquitectura de ARM. Apple o Qualcomm por ejemplo, dos de los que más contribuyen a este mercado con chips, utilizan arquitectura ARM. ¿Cuál de ellas? ARMv8, una arquitectura que lleva más de diez años y finalmente va a ser reemplazada.

Seguridad, IA y potencia

Según ha anunciado ARM, hoy llega la nueva arquitectura v9. Con v9 la empresa británica dice centrarse en tres aspectos principales de las necesidades de los procesadores de hoy en día: seguridad, procesamiento de inteligencia artificial y potencia informática.

Empezando por el aspecto de la seguridad, la arquitectura ARMv9 incluye la funcionalidad de Arquitectura de Computación Confidencial (CCA) de ARM. Esto permite a las apps utilizar Realms, que es esencialmente la posibilidad de proteger su código y datos privados para que se ejecuten en entornos separados de otras apps o software.

Dice ARM que los procesadores con ARMv9 también contarán con Scalable Vector Extension (SVE) de ARM. Se trata de una funcionalidad desarrollada en conjunto con Fujitsu y que permite procesar con mayor rapidez datos por 5G, realidad virtual o aumentada en local y sobre todo aprendizaje automático. La tecnología SVE también está presente por ejemplo en el superordenador más potente del mundo, el japonés Fugaku. Dice ARM que ARMv9 incluirá la segunda iteración de SVE, SVE2.

Respecto a la potencia y el rendimiento en sí, ARM promete aumentos de rendimiento de más del 30% en las próximas generaciones de CPUs para móviles y la nube. No obstante, no hay muchos detalles acerca de cómo esperan conseguir esto. Como siempre, habrá que ver en la práctica cómo se comportan las CPUs y GPUs una vez integren ARMv9 como arquitectura.

De momento no hay una fecha determinada de cuándo los chips con ARMv9 llegarán al mercado y para los consumidores. Es una arquitectura que se implementará tanto en procesadores para móviles como GPUs para ordenadores como servidores y superordenadores en la nube. Eso sí, estiman que la arquitectura v9 alimentará a 300.000 millones de nuevos chips basados en ARM.

Vía | Android Authority

# data[].attributes.attachment_link.title
ARM presenta ARMv9, su primera nueva arquitectura para chips en los últimos diez años

# data[].attributes.attachment_link.description
ARM está conquistando poco a poco el mundo. Su negocio mediante licencias a fabricantes le ha permitido sacar tajada del mercado de Intel a base de colocar chips en todo tipo de teléfonos, portátiles y otros dispositivos. Ahora la compañía se prepara para dar el siguiente gran paso: una nueva arquitectura para chips, la primera en diez años.

# data[].attributes.body
Registros
La arquitectura ARMv6 presenta un conjunto de 17 registros (16 principales más uno de estado) de 32 bits cada uno.
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. 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 una instrucción BL ó BLX ejecuta una llamada a una rutina.
Registro CPSR: Almacena las banderas condicionales y los bits de control. Los bits de control definen la habilitación de interrupciones normales (I), interrupciones rápidas (F), modo Thumb 1 (T) y el modo de operación de la CPU. Existen hasta 8 modos de operación, pero por ahora desde nuestra aplicación sólo vamos a trabajar en uno de ellos, el Modo Usuario. Los demás son modos privilegiados usados exclusivamente por el sistema operativo

# 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.
Desarrollar programas en lenguaje ensamblador es un proceso laborioso. El procedimiento es similar al de cualquier lenguaje compilado. Un conjunto de instrucciones y/o datos forman un módulo fuente. Este módulo es la entrada del compilador, que chequea la sintaxis y lo traduce a código máquina formando un módulo objeto. Finalmente, un enlazador (montador ó linker) traduce todas las referencias relativas a direcciones absolutas y termina generando el ejecutable.

# data[].attributes.body
Caracteristicas del lenguaje ensamblador
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.
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
El entorno
Los pasos habituales para hacer un programa (en cualquier lenguaje) son los siguientes: lo primero es escribir el programa en el lenguaje fuente mediante un editor de programas.
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.
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.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. 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. Las directivas más frecuentes en el as son:

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 operando: Se aplican a los datos en tiempo de compilación. En general, incluyen las operaciones lógicas &, |, ∼, aritméticas +, -, *, /, % y de desplazamiento <, >, <<, >>.

# data[].attributes.body
Cómo empezar para practicar!!!
Recuerda que en laboratorio las raspberries no tienen monitor ni teclado, la única conexión con el mundo real es el puerto Ethernet. En el apéndice C se explica otro mecanismo para conectar.
Dentro del editor tenemos una pequeña guía de comandos en la parte inferior. También podemos acceder a una ayuda más detallada pulsando F1 dentro del editor.
A continuacion una foto de los comandos.

# 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. 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.