Open Watcom Assembler ( WASM ) es un ensamblador x86 producido por Watcom , basado en el ensamblador Watcom que se encuentra en el compilador Watcom C/C++ y Watcom FORTRAN 77. [ 1 ] [ 2 ] [ 3 ] Se está trabajando en el desarrollo del proyecto JWASM de 32 y 64 bits, [ 4 ] que se ajusta más a la sintaxis del ensamblador de Microsoft . [ 5 ]
Hay ensambladores experimentales para PowerPC , Alpha AXP y MIPS . [ 6 ]
Detalles técnicos
Ensamblador
Desmontador
Existe un desensamblador Watcom asociado , wdis . El ensamblador no dispone de funciones de listado; en su lugar, se recomienda el uso de wdis para generar listados. [ 7 ] wdis puede leer archivos objeto OMF, COFF y ELF, así como ejecutables PE y ELF. Admite conjuntos de instrucciones x86 de 16 y 32 bits, incluyendo MMX, 3DNow!, SSE, SSE2 y SSE3. También incluye soporte para los conjuntos de instrucciones PowerPC, Alpha AXP, MIPS y SPARC V8 . [ 8 ]
Horquillas WASM
JWasm
JWasm es una bifurcación de Wasm originada por Japheth con las siguientes características:
- Compatibilidad nativa con los formatos de salida Intel OMF (16/32 bits), MS COFF (32 y 64 bits), ELF (32 y 64 bits), Bin y DOS MZ.
- Existen binarios JWasm precompilados disponibles para DOS, Windows y Linux. Para OS/2 y FreeBSD, se proporcionan archivos makefile.
- Admite conjuntos de instrucciones Intel x86 (8086, 80186, 80286, 80386, 80486, Pentium, Pentium Pro), x86-64 con SIMD (MMX, 3DNow!, SSE, SSE2, SSE3 y SSSE3, SSE4.1/2 (desde Jwasm), AVX (desde JWasm 2.06), extensiones VMX ( Intel VT-x; AMD SVM , esta última aunque ya implementada, actualmente sigue inactiva) (desde JWasm 2.09)).
- JWasm está escrito en C. El código fuente es portable y ha sido probado con éxito con Open Watcom, MS VC, GCC y otros.
- En Windows, JWasm se puede usar con Win32Inc y Masm32. Desde la versión 2.01, también funcionará con el kit de lenguaje ensamblador Win32 SBS WALK32 de Sven B. Schreiber [ 9 ].
- Los archivos de cabecera C se pueden convertir en archivos de inclusión para JWasm con la herramienta h2incX específica de Japheth.
- El código fuente de JWasm se publica bajo la Licencia Pública Abierta de Sybase Watcom, que permite su uso gratuito tanto comercial como no comercial.
- Compatible con la sintaxis del ensamblador de macros de Microsoft 6 y con todos los conjuntos de instrucciones de MASM 8.
Japheth pausó el desarrollo (o más bien, perdió el contacto) de JWASM en enero de 2014 con la versión 2.12pre, pero actualmente continúa trabajando en el proyecto en GitHub, [ 10 ] la versión actual (junio de 2024) es 2.18. Además, otros en el foro Masm32 [ 11 ] retomaron el trabajo donde Japheth lo dejó.
HJWasm
HJWasm, añadiendo el prefijo H en referencia a Habran, miembro del foro Masm32, quien inició esta segunda continuación del desarrollo de WASM. La versión 2.13pre se anunció originalmente en 2016. [ 12 ] Las nuevas características incluyen:
- Instrucciones:
- SIMD:
- MMX : MOVQ se agregó en la versión 2.13 para complementar a MOVD.
- AVX2 : VGATHERDPD, VGATHERQPD, VGATHERDPS, VGATHERQPS, VPGATHERDD, VPGATHERQD, VPGATHERDQ, VPGATHERQQ, instrucciones de propósito general codificadas en VEX añadidas en la versión 2.13. Las instrucciones restantes se añadieron en la versión 2.16.
- AVX-512 : VCMPxxPD, VCMPxxPS, VCMPxxSD, VCMPxxPD, VCMPxxSS, AVX-512F configurado, instrucciones codificadas en EVEX añadidas en la versión 2.13; VMOVQ añadido en la versión 2.13 para complementar MOVD. Las instrucciones restantes se añadieron en la versión 2.16.
- Registros: Los registros RIP y ZMM se añadieron en la versión 2.13.
- Extensión de lenguaje orientado a objetos añadida en la versión 2.25.
HASM
HASM es una versión renombrada de HJWASM, a partir de la versión 2.33. El nombre se adoptó tras un hilo de discusión en el foro de MASM que propuso inicialmente un nombre alternativo. El nombre HASM fue propuesto por el miembro del foro habran en la respuesta n.º 6, [ 13 ] y se finalizó al término del hilo de discusión en la respuesta n.º 33. [ 14 ] No se han añadido nuevas funcionalidades conocidas en el ciclo de lanzamiento de HASM.
UASM
El nombre se usó en realidad en la versión 2.33 (con fecha 2017-05-20) en la página de producto de Terraspace ltd, [ 15 ] pero solo se anunció en la versión 2.34. [ 16 ] Los cambios en HJWASM incluyen: [ 17 ]
- Conjuntos de instrucciones: RDPID añadido en la versión 2.38.
- AVX-512 : VAESDEC añadido en la versión 2.38.
- Transferencia de datos: MOVBE se agregó en la versión 2.47. MOVABS se agregó en la versión 2.48.
- Intel ADX : ADCX, ADOX añadido en la versión 2.38.
- Intel MPX : Se agregó compatibilidad con el prefijo BND en la versión 2.34. El prefijo BND se eliminó del grupo de instrucciones JCXZ en la versión 2.40.
- Conjunto de instrucciones CLMUL : Añadido en la versión 2.46.8, incluyendo formas pseudooperativas de CLMUL.
- Hashing: Se agregó el conjunto de instrucciones SHA en la versión 2.46.8.
- Prevención de acceso en modo supervisor : CLAC se agregó en la versión 2.38.
- Extensiones de memoria persistente : CLFLUSHOPT se agregó en la versión 2.38.
- Modos de direccionamiento: inmediato absoluto de 64 bits (2.37)
- Tipos identificados
- Tipos de registro: admite completamente registros y campos de registro de hasta 32 bits en la versión 2.41.
- Compatibilidad con SIMD de 128 bits: Añadido en 2.42, declaración en línea con el tipo añadido en 2.43.1 / .2.
- Se agregó compatibilidad con cadenas de typedef en los tipos de retorno en la versión 2.46.8.
- Se añadieron tipos integrados m512 en la versión 2.47.
- Codificación de colores de la consola: Añadida para Windows, OSX y Linux en 2.43.1 / .2.
- Llamada a funciones: Se agregó la llamada a funciones al estilo C en la versión 2.46.
Referencias
- ↑ Randall Hyde. "WASM: El ensamblador abierto de Watcom" . Archivado del original el 2 de marzo de 2012. Consultado el 11 de septiembre de 2017 .
- ↑ Leiterman, James (2005). "MASM vs. NASM vs. TASM vs. WASM". Arquitectura de lenguaje ensamblador 80x86 de 32/64 bits . Wordware Publishing, Inc. pág. 481. ISBN 978-1-59822-002-5. Consultado el 1 de febrero de 2010 .
- ↑ Leiterman p482 en Google Libros
- ↑ JWASM , un ensamblador de 32/64 bits basado en WASM con una sintaxis similar a MASM . Archivado el 10 de octubre de 2014.
- ↑ Fog, Agner (2009), Optimización de subrutinas en lenguaje ensamblador (PDF) (ed. 26-09-2009 ), pág. 13
- 1 2 Abrir sitio web de Watcom: Ensamblador Archivado el 15/07/2006 en Wayback Machine
- ↑ OpenWatcom: Archivado el 29/02/2012 en Wayback Machine. "El ensamblador no genera archivos de listado. Generar listados completos puede ser una pérdida de tiempo, ya que wdis (el desensamblador de Open Watcom) funciona muy bien. Sin embargo, generar un volcado de la tabla de símbolos interna, como lo hace MASM, podría ser extremadamente útil, especialmente para fines de diagnóstico."
- ↑ Abrir sitio web de Watcom: Desensamblador Archivado el 15/07/2006 en Wayback Machine
- ↑ El "WALK32" de 1996 consta de los siguientes componentes principales:
- Un enlazador de archivos PE (Portable Executable) con todas las funciones llamado W32Link.
- Un archivo de inclusión principal que contiene definiciones de constantes, tipos y estructuras de Win32.
- Otro archivo de inclusión, que contiene el código fuente de inicio de la aplicación y la DLL.
- Macros de gestión de segmentos y secciones de PE.
- Macros relacionadas con la compatibilidad con Unicode.
- Varias aplicaciones de demostración y DLL.
- Una colección de utilidades de programación para diversos fines." walk32.doc en walk32_1.zip
- ^ GitHub/Baron-von-Riedesel/JWasm
- ↑ Desarrollo del ensamblador UASM
- ↑ Lanzamientos de HJWasm
- ↑ ¿ Un nuevo nombre? (página 1 del hilo)
- ↑ ¿ Un nuevo nombre? (página 3 del hilo)
- ↑ UASM (2.33)
- ↑ Versión UASM 2.33
- ↑ Registro de cambios de UASM
Enlaces externos
- wiki del ensamblador WASM
- JWasm
- Páginas de Terraspace ltd: HJWASM , Hasm , UASM
- Ensambladores