Hablemos de LOS LENGUAJES ENSAMBLADORES

The hosts trace assembly language from Kathleen Booth's early work through modern architectures like x86 and ARM, explain how mnemonics map to binary instructions, and compare RISC versus CISC design trade-offs. They cover popular assemblers like NASM and GAS, and real-world uses from embedded systems to AI workloads.
Chapters
Volvemos a las votaciones y pasan estas cosas. Mira, lenguajes ensambladores. ¿Quién en su sano juicio podría querer aprender ensamblador? No lo entiendo.
¿Qué le pasa?
Nada, es por el tema de ensamblador. Parece que tiene algún trauma universitario con ensamblador, punteros y la programación a bajo nivel en general.
¡Que yo estaba ahí!
Es un buen tema como otro cualquiera, no hagas una montaña de todo esto.
¿Y si hablamos mejor de Julia?
No sigas por ahí.
¡Tranquilos, haya paz! Sé que hablar de lenguajes ensambladores puede resultar muy técnico, pero podemos hacerlo de forma que no sea tan... ¿Doloroso? Técnico, iba a decir técnico.
Cierto, podemos hablar de las características sin entrar en pruebas ni explicaciones detalladas. No hace falta programar en ensamblador para hablar del chip.
Bueno, espero al menos que este no sea un vídeo muy extenso.
Tenemos que hablar.
Uy, cuando una conversación comienza así no es bueno.
No es contigo, es con la audiencia.
chavalada, no sé qué habréis hecho, pero os deseo suerte, no os envidio nada.
Es por los miembros, son muy pocos y queremos hacer cosas por y para ellos.
¿Más vídeos exclusivos?
Más vídeos exclusivos, sí, pero para eso necesitamos que además de suscribiros, darle a like y comentar, os hagáis miembros del canal para así traeros más contenido. Es por vuestro bien.
Pues veremos a ver qué hacen, yo preferiría que no lo hicieran. Ya tienen un vídeo cada poco y encima eligen de vez en cuando en votaciones de qué será el vídeo.
Pero los vídeos exclusivos tendrían temas que elegirían solo ellos.
¿Solo los miembros?
Solo los miembros.
¿Y me puedo hacer miembro yo?
¡Chip!
¿Qué? Yo también quiero aportar.
El origen del ensamblador.
Esto me lo sé. Se atribuye a Kathleen Booth la creación del primer lenguaje ensamblador.
Sí, aunque el lenguaje ensamblador que creó Booth es más cercano a las matemáticas que a la máquina en ejecución.
Pero es la raíz.
Sí, es la raíz. Tomando este trabajo, Maurice Wilkes y David Wheeler implementaron otro que ya contiene mnemotécnicos.
¿Mnemotécnicos?
Sí, Chip. La CPU funciona leyendo un número específico de bits de la memoria. Según los primeros bits se identifica el comando de la CPU a ejecutar y el resto de los bits son sus argumentos. A la operación detectada en los primeros bits se le asocia un mnemotécnico, un texto o una letra que identifica ese conjunto de bits.
¿Como la palabra en un diccionario junto a su definición?
Me temo que no. Porque la palabra en el diccionario tiene una definición que puede encajar con otras palabras. Es más parecido a las letras 1, 2, 3 y sus respectivos símbolos numéricos 1, 2 y 3.
Si escribes las letras 1, estas se relacionan unívocamente con la presentación del número 1 y viceversa.
Vale, es una traducción sin ambigüedad.
Exacto. El primer compilador que utilizó esta notación se anunció por parte de IBM en el llamado lenguaje SOAP.
¡Vaya sopa de letras!
Chip, atiende, que SOAP fue la base de muchos lenguajes que vinieron después dentro de IBM, como el SpeakEasy de John Backus.
¡Exacto! John Backus creó SpeakEasy y según él mismo, SpeakEasy era un lenguaje difícil de usar y horrendo.
Entonces, ¿por qué lo hizo o lo usó?
Porque aun así era mucho mejor que utilizar ensamblador.
¿Ves? Si no tiene nada bueno.
SOAP es un lenguaje muy antiguo, incluso para ser ensamblador.
Y el problema es que como cada arquitectura era diferente, cada lenguaje ensamblador era también diferente. Pero esto cambió un poco gracias a SOAP.
¿Todos se unificaron para ser como SOAP?
No, solo dentro de IBM.
Y solo para la gama IBM 700.
Pues vaya avance.
Arquitecturas. Si nos vamos a las arquitecturas más conocidas o empleadas para los PCs, Son x86, ARM, RISC-V, PowerPC, y un poco más antiguas están las 68000, Z80, SPARC, AS/400, VAX y PDP.
Con las arquitecturas me pierdo un poco. Me suena x86 y x86-64, que son las que emplean AMD e Intel.
De hecho, Fue Intel quien la creó. Esos 8086, 286, 386, 486 o Pentium fueron el inicio de la arquitectura.
Aunque no era tan elegante como la 68000 de Motorola, con esa ortogonalidad.
¿Ortogonalidad? Eso suena a cu—
¡Chip! No. La ortogonalidad es la flexibilidad que da una CPU para manejar con cada comando cualquier registro. Posición de memoria o valor inmediato.
Vale, vale, perdón. Entonces, ¿quieres decir que x86 no permite hacer sumas con cualquier registro, con cualquier posición de memoria y valores inmediatos?
Eso decimos, no se puede. Pero sigamos. El Z80 desarrollado por Zilog fue un chip muy versátil. Tanto es así que se empleó en el ZX Spectrum, en las TRS-80 Y las Amstrad CPC.
También en la Game Boy Pro, no te olvides de la Game Boy.
Exacto, y aún se sigue empleando en sistemas embebidos por su bajo consumo.
Tengo entendido que las RISC-V o ARM también tienen bajo consumo, pero RISC-V y ARM no son lo mismo.
No, Chip, no. ARM es una marca propietaria que fabrica chips basados en la tecnología RISC y RISC-V. Es hardware abierto que cualquier fabricante puede implementar para tener un microprocesador RISC.
¿Y qué significa RISC?
Lo contrario de CISC.
¡No ayudas, pro! A ver, Chip, RISC son las siglas de Computación con Conjunto de Instrucciones Reducido o Reduced Instruction Set Computing. Es decir, la CPU proporciona pocas instrucciones pero muy simples de forma que combinándolas pueden conseguir acciones más complejas.
Entonces, CISC siendo lo contrario, ¿es algo así como Computación con Conjunto de Instrucciones Complejas o Complex Instruction Set Computing?
Exacto, las instrucciones en los procesadores CISC, como los Intel o AMD, son muy complejas y pueden realizar acciones muy elaboradas en una sola instrucción.
Entonces, si un lenguaje ensamblador hace una traducción de comandos que permite la CPU, Eso quiere decir que la cantidad de comandos dentro de un procesador CISC es mayor y más compleja que en los procesadores de tipo RISC.
Exacto de nuevo. Los procesadores ARM y RISC-V tienen un lenguaje ensamblador mucho más simple y compacto, pero requiere de un mayor número de instrucciones para conseguir lo que los procesadores CISC hacen en tan solo un comando.
Pero también tiene su precio. Por un lado, un procesador CISC puede ser más rápido y tener mayor rendimiento, pero al tener tantos comandos y tan complejo, sus circuitos son mucho mayores y el nivel de calor y consumo también es mucho mayor.
Es decir, para operaciones de alto rendimiento como la IA puede ser mejor un procesador CISC, y para operaciones triviales y entornos embebidos es mejor entonces un procesador RISC.
Tenlo presente cuando te compres un portátil para trabajar.
En un portátil Yo lo tengo claro, CISC.
¿Le das prioridad a la potencia frente al consumo?
Nah, le doy prioridad a que los juegos vayan bien.
Creo que podemos pasar a ver algunos de los lenguajes ensambladores más utilizados.
Lenguajes ensambladores más utilizados. Por supuesto, quitando los lenguajes ensambladores utilizados para crear los lenguajes más antiguos de las primeras décadas antes del PC, tenemos algunos lenguajes para x86 más utilizados como el MacroAssembler.
¿Tenía macros este lenguaje?
Exacto, Chip. No solo disponía de macros sino también otras facilidades para programación estructurada. Fue creado por Microsoft para el desarrollo de MS-DOS.
No nos podemos olvidar también de un clásico de Borland: el TurboAssembler.
¡Turbo! Cuando hablamos de Pascal dijimos algo también acerca de Turbo Pascal.
Exacto, ambos son de la misma compañía.
¡Borland!
Demasiada alegría para lo que es.
Es emocionante, Chip. La antigua página de Webster de la Universidad de Stanford hizo un ranking de lenguajes ensambladores y de momento vamos en orden.
El siguiente en la lista es Flat Assembler o FASM, muy popular para aplicaciones compactas, creado por Privalov en 1998.
Según la entrevista que le hicieron, hizo Flat porque, aunque le encantaba TurboAssembler, echaba en falta algunas características.
Si cada vez que echamos en falta una característica en un lenguaje creamos el nuestro propio, tendríamos finalmente miles de lenguajes. Oh, vaya.
Tenemos suerte que quisiera compartir el código fuente de su ensamblador. Está muy bien considerado, aunque tiene poca documentación. Sin embargo, el código fuente escrito en Flat se encuentra en GitHub.
Buen colega programador, sabiendo que está también considerado Flat, podría haberse hecho de oro.
Él mismo dice en su entrevista que hubiese sido difícil dar a conocer Flat si hubiese sido un producto comercial.
La paradoja de los productos de software libre: algunos son extremadamente famosos y usados, pero si hubiesen sido de pago, seguro que hubieran caído en el olvido.
Creo que además de Macro, Turbo y Flat solo nos queda New Assembler o GAS.
¡Dale gas!
No, también nos quedarían los específicos para ARM, para el 68000 y para el Z80.
Sí, en realidad hay muchos, como decíamos, tantos como arquitecturas.
Pero parece que para x86 hay muchos más que para otras.
Es normal, Chip, x86 fue muy extendido.
Oh, antes de que nos lo digan en los comentarios, se me olvidó uno: NASM o NetWide Assembler.
¡Cierto! Este está muy bien considerado y sigue muy activo.
Conclusiones.
Chip, todavía queda—
No aguanto más, esto es demasiado bajo nivel, no le veo sentido.
Hay muchos programadores que trabajan a bajo nivel para domótica, soluciones embebidas como sistemas para control de humedad, luz y calidad del aire. Para instalaciones industriales o agrarias.
Y no te digo también en sistemas de alta optimización como por ejemplo los satélites.
Vale, parece útil tener un gran control de la ejecución del programa, pero ¿tiene que ser a tan bajo nivel?
Pues es una buena pregunta para nuestros oyentes. ¿Qué opináis?
¿En videojuegos sigue haciendo falta este nivel de optimización? ¿Basta con C++ o C?
¿Esto de ensamblador tiene que ver con WebAssembly?
Buena pregunta, Chip.
Déjanos tu comentario.
En serio, ensamblador no tiene sentido. No sé por qué lo tratamos siquiera.
Se incluyó en la votación por sugerencias en comentarios y fue la más votada.
La democracia no funciona.
Deberíamos dejar las sugerencias solo para nuestros cronistas, son los que deben decidir.
Cierto. ¿Habrá quien se quiera apuntar a darnos temas que agregar en las votaciones?
Pues espero que tengan mejores ideas y, por favor, no ahuevas En serio. Oye, oye, que no lo pongáis.
Continuará.
More from Manuel

Historia de los Lenguajes de Programación: años 1960-1969 #basic #apl #simula #lisp #logo

¿Compilador o intérprete? La historia de una rivalidad que comenzó en los años 40








