El arte del ensamblador de 64 bits

Un nuevo volumen de *The Art of 64‑Bit Assembly* centrado en Windows x64 y MASM provoca un debate más amplio sobre si aprender y escribir ensamblador a mano sigue siendo valioso en una era de compiladores potentes y modelos de lenguaje grandes. Muchos comentaristas sostienen que el ensamblador sigue siendo esencial para entender sistemas, escribir código de bajo nivel crítico y lograr el máximo rendimiento en puntos calientes muy específicos, mientras que otros señalan que los compiladores modernos suelen superar a los humanos salvo en casos especializados. El hilo también aborda detalles de ABI y convenciones de llamada, preferencias de herramientas de ensamblador (MASM frente a NASM/FASM/GAS) y la frustración de que los debates sobre IA y marketing a menudo eclipsen la interacción sustantiva con libros técnicamente ricos.

ABIs de C++, vtables y convenciones de Windows

  • El hilo aclara que la disposición de las vtables forma parte de las ABIs del compilador de C++ (MSVC frente a Itanium), no de las ABIs del kernel.
  • Las APIs en modo usuario de Windows usan enlace C; las vtables y COM son convenciones de espacio de usuario.
  • Las vtables de COM son independientes del lenguaje: las primeras entradas son métodos específicos, todas __stdcall, y la disposición coincide de forma efectiva con un subconjunto restringido de C++.
  • Toolchains como MSYS2/Cygwin mezclan convenciones de llamada: SysV/Itanium internamente, convenciones de Windows en los límites de la API.
  • Conclusión: la interoperabilidad depende de entender qué ABI y qué convención de llamada usa cada componente.

¿Sigue escribiéndose ensamblador en la era de los LLM?

  • Muchos dicen que sí: para cambios de contexto del SO, controladores de interrupciones, MCU en tiempo real, JITs, corutinas, runtimes y bucles muy calientes o críticos en tiempo.
  • Varios lo ven como un hobby y una forma de entender profundamente los sistemas.
  • Algunos informan que los LLM funcionan bien para traducir entre ensambladores, SIMD de ARM y como apoyo para herramientas de ingeniería inversa.
  • Otros encuentran el ensamblador generado por LLM poco fiable y más lento, y no confiarían en él para código crítico.
  • Consenso: los compiladores suelen vencer a los humanos en la mayoría del código; los humanos aún pueden superarlos en kernels pequeños, altamente especializados y críticos para el rendimiento.

IA, comprensión y la posición del libro

  • Debate sobre una línea de marketing que afirma que las explicaciones de IA sobre vtables carecen de “comprensión genuina”.
  • Algunos lo llaman marketing anti‑IA; otros argumentan que, aunque los modelos estén entrenados con el libro, no lo aplicarán de forma fiable ni proporcionarán la misma comprensión que leerlo.
  • Preocupación por que el discurso se vea dominado por “¿esto fue generado por IA?” en lugar del contenido técnico.

Assemblers, herramientas y uso de macros/preprocesadores

  • Opiniones fuertes sobre MASM frente a NASM/YASM/FASM/GAS; MASM es elogiado por sus funciones y criticado por su centrismo en Windows y su disponibilidad.
  • GAS se ve como orientado a compiladores con capacidades de macros más débiles; algunos dependen de preprocesadores externos o assemblers con macros potentes para gestionar espacios de nombres, estado de registros/pila y portabilidad.
  • Se recuerdan históricas “guerras de assemblers”; la práctica moderna a menudo mezcla assemblers y usa bibliotecas de macros de forma intensiva.

Libros y ecosistema en torno al ensamblador x86/ARM

  • Se recomiendan varios otros libros de ensamblador y programación de bajo nivel (x86‑64, ARM, orientados a Linux).
  • Varios comentaristas elogian ediciones anteriores de esta serie “Art of Assembly” y libros afines de codificación de bajo nivel, aunque señalan un fuerte énfasis en Windows y cierta desconfianza hacia los compiladores.