¿Cuáles son algunos libros excelentes sobre la programación de algoritmos ARM?

Algoritmos …

Los algoritmos más comunes, como ordenar alfabéticamente una lista de cadenas, ya existe en las bibliotecas de tantos lenguajes de programación predeterminados, que puede seguirlos. O manténgase en el lenguaje de programación donde cree que tiene la mejor solución o rendimiento utilizando este algoritmo particular.

Entonces, ¿qué diferencia a los procesadores ARM típicos de, por ejemplo, los procesadores x86?

  1. En lugar de varios conjuntos de pocos registros de propósito especial, tiene 16 registros universales (R0 a R15) que puede usar para todo. En aras de la compatibilidad con compiladores optimizados x86, un programa C compilado utilizará principalmente 4 de ellos para el cálculo básico, uno para la pila, el puntero de ejecución y la dirección de retorno. Los otros son en su mayoría no utilizados y los valores de datos se leen y se escriben con demasiada frecuencia en la pila.

    Puede aprovechar esto al bombear múltiples valores en el registro y “almacenar en caché” los que se requieren con frecuencia dentro de un pequeño grupo de instrucciones; para ahorrar mucha carga y guardar instrucciones.

  2. Las instrucciones del BRAZO están optimizadas para mal. Una sola instrucción puede, a veces:
    • ser omitido dependiendo de los códigos de estado de las instrucciones anteriores
    • recibir datos, valores y memoria relativamente usando valores de compensación de varios tipos, desplazamientos y fuentes
    • escribir el (los) resultado (s) en registros personalizados
    • opcionalmente establecer códigos de estado o retener los anteriores
  3. Entonces, una sola instrucción puede: “Si el último resultado fue negativo, agregue (13 veces 2 ^ 14) a (R6 LSH 2) y coloque el resultado en R7 y establezca los códigos de estado”.

    Esto a menudo puede acortar el código de ensamblador en muchos saltos y ramas cuando omitir es una opción u organizar valores para el cálculo.

  4. El programador tiene control total sobre cuántos y qué registros se guardan o cargan dinámicamente desde la pila. Los diferentes tipos de interrupciones y subrutinas solo pueden liberar algunos registros, si no necesitan más.

Los algoritmos que intentan aprovechar estas características pueden hacer que el código se ejecute en un ARM significativamente más rápido que en arquitecturas competitivas, a la vez que es más corto. Pero antes de aprender los lenguajes de ensamblaje, considere si existen bibliotecas listas para usar que contengan los algoritmos que necesita. Puede que no lo salve en cada ciclo, pero sí mucho tiempo.

el algoritmo no tiene nada que ver con el lenguaje, sin mencionar el arco, por lo que cada algoritmo escrito en C / Java / Python … puede funcionar en ARM