14/10/2024
¿Qué es el Lenguaje de Programación Assembler?
El pasado 11 de octubre de 2024, estuve mencionando sobre un sistema operativo llamado KolibriOS que se hizo desde 0 usando lenguaje máquina también conocido como Assembler y es en entorno gráfico. Acá explicaré en que consiste dicho lenguaje de programación.
Para los que no lo saben, el procesador tiene un set o conjunto de instrucciones que le permite procesar los datos en lo que se llama un programa o software. Ese conjunto de instrucciones le dicen a él si debe cargar un dato, si lo debe mover a memoria, si lo debe mover hacia un dispositivo de salida, o si debe realizar alguna operación matemática simple o compleja con él, etcétera. Esos códigos de instrucción es lo que se conoce como Assembler y cada procesador tiene su propio código de instrucción para realizar las múltiples tareas que hace o puede hacer un procesador.
Sin embargo, para escribir alguna instrucción se necesita tener de una forma entendible los códigos, ya que, estos son en código binario. Así que, los fabricantes de estos procesadores, escriben en las hojas técnicas del procesador como se llama cada código, lo que hace y el tiempo que demora para ejecutarse que actualmente está en nanosegundos (ns). Con base en esa información, se escribe un programa que lo que hace es trabajar con esos nombres y los números hexadecimales para las direcciones de memoria y dispositivos, ese programa se llama el Assembler y lo es más cercano de programar un procesador directamente y exprimirle su potencia y desempeño. En algunos se llama también Debug, y es el mismo lenguaje.
Existen lenguajes de alto nivel que también convierten el programa escrito en Assembler directamente y son como Basic (no el de Microsoft), C/C++, Cobol, Fortran, Phyton y otros más en la lista. Todos ellos introducen algo llamado latencia para que no sea instantáneo la ejecución. C/C++ tiene una latencia de 1 milisegundo (ms) fija, mientras que la de Phyton es variable. Así que, se escoje el lenguaje de acuerdo a la aplicación que se vaya a hacer.
Existe un sistema operativo que solo se usa en situaciones críticas como en los automóviles y aviones en donde la latencia debe ser fija, y se llama RTOS. El RTOS es la sigla de Real Time Operating System o traducido Sistema Operativo en Tiempo Real y es el sistema que controla los automóviles y los aviones en todos sus sistemas de control, desde la combustión hasta los sistemas de seguridad. Los únicos lenguajes que se usan para su programación por su latencia fija es C/C++ y Assembler. Dependiendo de la aplicación se uso un lenguaje o el otro.
En el Assembler debes escribir como se maneja todo línea por línea hacer microprogramas, enlazarlos y todo eso, que es lo que haría un lenguaje de alto nivel, solo que, aquí tu controlas con las mejores instrucciones del procesador los tiempos de respuesta del programa en cuestión por lo que puedes fijar, sin mucha programación un tiempo de respuesta fijo, ya que, en las hojas tecnicas del procesador te indican cuanto tiempo se demora cada instrucción en ejecutarse, por lo que, puedes elegir entre muchas instrucciones cual es la ideal para tu proyecto de cómputo.
Ahora bien, miremos un poco los procesadores Intel64/AMD64 que son de la familia x86, principalmente me voy a centrar en el AMD64 que es tecnología RISC x86 que es mucho más rápido. El último procesador de esta familia la parte del procesador, ya que tiene incorporada una unidad de punto flotante (FPU), GPU y otras cosas que por ahora no vienen al caso por lo que no tocaré esas partes incorporadas.
Resulta que, el AMD64 en su juego de instrucciones tiene los de los siguientes procesadores:
- 8086
- 80286
- 80386
- 80486
- 80586 (Pentium)
- 80686 (Pentium MMX)
- K6
- K6 II 3D Now
- K6 III
- K7 (Athlon)
- AMD64
Todos estos conjuntos de instrucciones forman parte del conjunto de instrucciones que se pueden hacer en el ancho de 64 bits. Como ya expliqué en un artículo anterior, la cantidad de instrucciones que se pueden hacer para un procesador abarcando de 4 bits en adelante es 2⁶⁴, en donde, el 64 es el número de bits en el bus de datos del procesador y abarca todo un conjunto extenso de instrucciones. Esto permite poder escoger un gran número de instrucciones en donde se puede construir cualquier programa que se me ocurra. Ahora bien, como están hechos directamente sobre una tecnología RISC, los tiempos de ejecución son muy cortos, sin embargo, debemos igual observar cuál se demora menos tiempo y cuál se demora más. Claro que, con estos tiempos medidos en nanosegundos, visualmente hablando no lo notamos, sin embargo en una máquina la velocidad de respuesta ante un evento fortuito puede representar la diferencia entre la vida y la muerte.
Hasta ahora, la aplicación del Assembler se limitó solamente a estos RTOS por su rápida respuesta en múltiples situaciones. El que una persona o grupos de personas hayan hecho un Sistema Operativo como KolibriOS es un gran avance para este lenguaje de programación, además de marcar la diferencia entre los otros sistemas construidos con lenguajes de alto nivel. Cierto, nuestros PC no son para uso crítico ¿O sí?
Solo imaginen está situación, el mejor Linux en cargar desde cero hasta el escritorio, demora alrededor de 1 minuto con SSD (Unidad de estado sólido), ni siquiera Windows, con su TPM y eso, no demora ese tiempo ni siquiera por error. Ahora bien, ¿qué pasaría si ese mismo Linux se escribiera en Assembler exclusivamente y no con C o con cualquier otro lenguaje de alto nivel? el tiempo de carga pasaría a ser de 10 segundos. Eso quiere decir que estoy ahorrando energía eléctrica (y de paso disminuimos las emisiones de Dióxido de Carbono) porque ya no tengo que prender mi computador personal en la oficina con 1 minuto de antelación sino con 10 segundos. Además, el sistema operativo no ocuparía más de 8 Megas en RAM con entorno gráfico, por lo que, tengo libre el resto de la memoria RAM disponible para efectuar cualquier trabajo que se me cruce por la mente si trabajo en diseño asistido por computador (CAD) o en diseño gráfico. Solo imaginen que su equipo con 64 Gigas en RAM le restamos 8 Megas que ocupa el sistema operativo y piensen en todo ese espacio para trabajar hasta el proyecto más grande que pueda realizar, y ni hablar de los videojuegos (sé que por ahí algunos que les gusta jugar en su PC), se pueden hacer juegos cada vez más complejos que le puedan sacar el jugo al máximo de toda esa RAM.
En redes de cómputo tanto críticas como no críticas funcionarían muy rápido y puede manejar una enorme cantidad de usuarios. Solo Piensen en un equipo servidor de internet con 128 Teras en RAM y el sistema operativo Linux server con entorno gráfico ocupando solo 8 Megas en RAM... Son 8 Megas que se coge de 128 Teras de RAM, ¿cuántos usuarios puede manejar con toda esa RAM de sobra? Hagan sus cuentas.
¿Recuerdan que en otro artículo hablé del código fuente de Gnu y de Linux? Si yo cojo ese código fuente de ambos, los paso a Assembler para hacer una nueva distro, los resultados serían esos que ya mencionén en los dos párrafos anteriores. Sería un sistema operativo, muy rápido y muy potente, y serviría para todo y más. Cierto, los de KolibriOS no hicieron un Gnu/Linux, hicieron un sistema operativo diferente, pero ese sistema operativo diferente muestra el potencial de programar en Assembler un sistema operativo óptimo para cualquier PC, Apple Mac, etc. en el mercado y ponerlo a trabajar muy bien sin demoras de arranque, incluso con EFI que es lo que se usa ahora, porque hasta en eso pensaron sus creadores.
Así que, es aplicable a cualquier computador con Legacy o con EFI y funciona perfecto. Además, el Assembler se actualiza con cada nuevo procesador y sus tiempos mejoran con cada nuevo nivel de integración. Si en un Pentium de 100 Mhz este sistema operativo entra en 16 segundos, en uno actual entraría en 3 segundos o menos, si hablamos del RISC x86. Como dije, es cuestión de tener el código fuente de Gnu/Linux y pasarlo a Assembler en vez de a un lenguaje de alto nivel, y el cambio no se hace esperar.
Espero les haya gustado el tema, o les haya dado ideas. Si es así pueden compartirlo con quienes deseen.