El ensamblador Netwide ( NASM ) es un ensamblador y desensamblador para la arquitectura Intel x86 . Se puede usar para escribir programas de 16 bits , 32 bits ( IA-32 ) y 64 bits ( x86-64 ). Se considera uno de los ensambladores más populares para Linux y chips x86 . [ 3 ]
Fue escrito originalmente por Simon Tatham con la colaboración de Julian Hall. A partir de 2016, es mantenido por un pequeño equipo liderado por H. Peter Anvin . [ 4 ] Es software de código abierto publicado bajo los términos de una licencia BSD simplificada (de 2 cláusulas) . [ 5 ]
Características
NASM puede generar varios formatos binarios, incluidos COFF , OMF, a.out , formato ejecutable y enlazable (ELF), Mach-O y archivos binarios (.bin, imagen de disco binaria, utilizada para compilar sistemas operativos ), aunque el código independiente de la posición solo es compatible con archivos objeto ELF . También tiene su propio formato binario llamado RDOFF. [ 6 ]
La variedad de formatos de salida permite redirigir los programas a prácticamente cualquier sistema operativo (SO) x86. También puede crear archivos binarios planos , utilizables para escribir cargadores de arranque , imágenes de memoria de solo lectura (ROM) y en diversas facetas del desarrollo de SO. [ 6 ] Puede ejecutarse en plataformas que no son x86 (si NASM se compila para esa plataforma) como un ensamblador cruzado , como PowerPC y SPARC , aunque no puede generar programas utilizables por esas máquinas.
NASM utiliza una variante de la sintaxis de ensamblador de Intel en lugar de la sintaxis de AT&T . [ 7 ] También evita características como la generación automática de anulaciones de segmento (y la directiva ASSUME relacionada) utilizadas por MASM y ensambladores compatibles. [ 6 ]
Desarrollo
La versión 0.90 de NASM se publicó en octubre de 1996. [ 5 ]
La versión 2.00 se publicó el 28 de noviembre de 2007, añadiendo soporte para extensiones x86-64 . [ 4 ] Las versiones de desarrollo no se suben a SourceForge.net , sino que se registran en GitHub con instantáneas binarias disponibles en la página web del proyecto.
En julio de 2009, a partir de la versión 2.07, NASM se lanzó bajo la licencia BSD simplificada (de dos cláusulas). Anteriormente, debido a que estaba licenciado bajo la LGPL , se desarrolló Yasm, una reescritura completa bajo la licencia New BSD . Yasm ofreció soporte para x86-64 antes que NASM. También añadió soporte para la sintaxis del ensamblador GNU .
RDOFF
El formato de archivo de objeto dinámico reubicable (RDOFF) es utilizado por los desarrolladores para probar la integridad de las capacidades de salida de archivos objeto de NASM. Se basa en gran medida en la estructura interna de NASM, [ 8 ] que consiste esencialmente en una cabecera que contiene la serialización de las llamadas a las funciones del controlador de salida, seguida de una matriz de secciones que contienen código ejecutable o datos. Las herramientas para utilizar el formato, incluyendo un enlazador y un cargador, se incluyen en la distribución de NASM.
Hasta que se lanzó la versión 0.90 en octubre de 1996, NASM solo admitía la salida de archivos ejecutables de formato plano (por ejemplo, archivos COM ). En la versión 0.90, Simon Tatham añadió compatibilidad con una interfaz de salida de archivos objeto y con archivos .OBJ de DOS solo para código de 16 bits. [ 9 ]
Por lo tanto, NASM carecía de un formato de objeto de 32 bits. Para solucionar esta carencia, y como ejercicio para aprender la interfaz de archivos de objeto, el desarrollador Julian Hall creó la primera versión de RDOFF, que se publicó en la versión 0.91 de NASM. [ 9 ]
Desde esta versión inicial, se ha producido una actualización importante del formato RDOFF, que añadió un indicador de longitud de registro en cada registro de encabezado, [ 10 ] lo que permite a los programas omitir los registros cuyo formato no reconocen, y compatibilidad con múltiples segmentos; RDOFF1 solo admitía tres segmentos: texto , datos y bss (que contiene datos no inicializados). [ 8 ]
El formato RDOFF está totalmente desaconsejado y se ha deshabilitado a partir de NASM 2.15.04. [ 11 ]
Véase también
Referencias
- ↑ "Versión 3.02" . 29 de junio de 2026. Consultado el 29 de junio de 2026 .
- ↑ "NASM, el ensamblador de red" . GitHub . 25 de octubre de 2021.
- ↑ Ram Narayan. "Ensambladores de Linux: una comparación de GAS y NASM" . IBM . Archivado del original el 3 de octubre de 2013.
Dos de los ensambladores más populares para Linux, GNU Assembler (GAS) y Netwide Assembler (NASM).
- 1 2 "El ensamblador de toda la red" . Consultado el 27 de junio de 2008 .
- 1 2 NASM – El ensamblador de red – versión 3.01 – Apéndice C: Historial de versiones de NASM , 2025, Wikidata Q137260489 , archivado del original el 6 de diciembre de 2025
- 1 2 3 "Manual de la NASM" . Archivado del original el 23 de febrero de 2009. Recuperado el 15 de agosto de 2009 .
- ↑ Randall Hyde . "NASM: El ensamblador de red" . Archivado del original el 12 de septiembre de 2010. Recuperado el 27 de junio de 2008 .
- 1 2 "Manual NASM Cap. 6" . Consultado el 27 de junio de 2008 .
- 1 2 "NASM CVS" . 8 de junio de 2008. Consultado el 27 de junio de 2008 .
- ↑ "V1-V2.txt" . 4 de diciembre de 2002. Consultado el 27 de junio de 2008 .
- ↑ "Formato de archivo de objeto dinámico reubicable (obsoleto)" .
Lecturas adicionales
- Jeff Duntemann (2000). Lenguaje ensamblador paso a paso . J Wiley and Sons. ISBN 0-471-37523-3.
Enlaces externos
- Sitio web oficial
- Ensamblador para toda la red en SourceForge
- Edición especial para Win32 y BeOS.
- Una comparación de GAS y NASM en IBM
- "Ensamblador para toda la red" . Freecode .: un convertidor entre el formato fuente de los ensambladores NASM y GAS
- Software de 1996
- Ensambladores
- Desmontadores
- Software para DOS
- Compiladores libres y de código abierto
- Herramientas de programación Linux
- macOS
- Herramientas de programación de macOS
- Herramientas de programación para Windows
- Software que utiliza la licencia BSD.