Hoy en día, la gran parte del desarrollo de los sistemas empotrados se realiza en C. No siempre fue así, en los inicios de los sistemas empotrados, el código estaba escrito en lenguaje ensamblador ya que era la única opción.
En aquellos tiempos la memoria era limitada, por lo que el manejo muy estricto de su uso era fundamental y el ensamblaje proporcionaba ese control, aparte de eso, no existían herramientas lingüísticas de alto nivel disponibles como en la actualidad.
Pasaron años antes de que las herramientas llegaran al mercado y muchos más antes de que su calidad fuera lo suficientemente buena para un serio desarrollo de código. Dichas herramientas llegaron en el mejor momento, ya que los procesadores se estaban volviendo más potentes (ya eran viables dispositivos de 16 y 32 bits), el precio de la memoria se disminuyó y la complejidad de las aplicaciones iba en aumento.
¿Qué pasa actualmente? Existen procesadores potentes que pueden tener enormes cantidades de memoria, ejecutando aplicaciones complejas que son desarrolladas por grandes equipos de programadores.
¿Dónde destacan las habilidades del lenguaje ensamblador? Aunque es cierto, seguramente no se encontrará escribiendo la aplicación de su próximo cliente en lenguaje ensamblador, todavía hay mucho que ganar aprendiendolo. El lenguaje ensamblador, se utiliza principalmente para la manipulación directa del hardware, el acceso a instrucciones especializadas del procesador o para abordar problemas de rendimiento críticos. Sus típicos usos son controladores de dispositivos, sistemas integrados de bajo nivel y sistemas en tiempo real.
El lenguaje ensamblador es lo más cercano al procesador que puede obtener como programador, por lo que un algoritmo bien diseñado es maravilloso, además, le da un control completo sobre los recursos del sistema al igual que una línea de ensamblaje, escribe código para ingresar valores individuales en registros, tratar direcciones de memoria directamente para recuperar valores o punteros. Se trata de rendimiento y eficiencia.
Escribir en lenguaje ensamblador es entender exactamente cómo el procesador y la memoria trabajan juntos para hacer que las cosas sucedan.
La ley de Wirth
El refrán lleva el nombre de Niklaus Wirth, quien lo discutió en su artículo de 1995 “A Plea for Lean Software” que habla sobre el rendimiento de la computadora. Establece que, el software se está volviendo más lento mientras que el hardware se está volviendo más rápido, mientras más nos alejamos como desarrolladores de los detalles de nivel inferior del desarrollo de software, escribimos más código ineficiente.
Los nuevos lenguajes y procesadores sobrecargados han abstraído tanto de la máquina que ya no hay tiempo para preocuparse por cosas como la recolección de basura, inicialización de variables, punteros de direcciones de memoria, etc. Todas estas características son ahora estándar en los lenguajes/IDE actuales. El resultado es una nueva generación de desarrolladores que confían en una potencia de hardware superior para el rendimiento en lugar de esforzarse por escribir código eficiente.
Ahora comprendemos que aprender lenguaje ensamblador me enseñará sobre el funcionamiento interno de la computadora. Se aprenderán cómo los registros de la CPU funcionan con direcciones de memoria para lograr el resultado final y esto con una instrucción a la vez. Esto no quiere decir que todo lo que tenga en mente lo desarrollará en lenguaje ensamblador, sin embargo, se puede aprender qué tipos de datos usar y cuándo, así cómo. pequeñas rutinas, rápidas y eficientes.
Referencias Bibliográficas
Introduction to x86 Assembly Language http://www.c-jump.com/CIS77/ASM/Assembly/lecture.html
Colaboradores de Wikipedia. (2021, 8 de Julio). Wirth's law. Recuperado de : https://en.wikipedia.org/w/index.php?title=Wirth%27s_law&oldid=1032629782
Walls, C. (2019, Septiembre 20) Assembly vs. C: Why Learn Assembly?. Recuperado de: Assembly vs. C: Why Learn Assembly? - Technical Articles (allaboutcircuits.com)