Microsoft Macro Assembler ( MASM ) es un ensamblador x86 que utiliza la sintaxis Intel para MS-DOS y Microsoft Windows . A partir de MASM 8.0, existen dos versiones del ensamblador: una para fuentes de ensamblaje de 16 y 32 bits , y otra ( ML64 ) solo para fuentes de 64 bits .
MASM es mantenido por Microsoft , pero desde la versión 6.12 no se vende como un producto independiente. En su lugar, se suministra con varios SDK de Microsoft y compiladores de C. Las versiones recientes de MASM se incluyen con Microsoft Visual Studio .
Entre las aplicaciones notables compiladas con MASM se encuentran RollerCoaster Tycoon , que fue escrita en un 99 % en ensamblador y construida con MASM. [1]
Las primeras versiones de MASM datan de 1981. [2] Se vendían como el "Microsoft Macro Assembler" genérico para todas las máquinas x86 o como la versión OEM específicamente para IBM PC . En la versión 4.0, se abandonó la versión para IBM . Hasta la versión 3.0, MASM también venía con un ensamblador complementario más pequeño, ASM.EXE. Este estaba pensado para PC con solo 64k de memoria y carecía de algunas características del MASM completo, como la capacidad de usar macros de código.
Las versiones de MS-DOS hasta la 4.x incluían la utilidad LINK de Microsoft, que fue diseñada para convertir archivos OBJ intermedios generados por MASM y otros compiladores; sin embargo, como los usuarios que no programaban no podían usar la utilidad, se trasladó a sus paquetes de compiladores.
La versión 4.0, lanzada en octubre de 1985, agregó soporte para 286 instrucciones.
La versión 5.0, lanzada en agosto de 1987, admitía 386 instrucciones y también mnemónicos abreviados para descriptores de segmentos (.code, .data, etc.), pero todavía sólo podía generar ejecutables en modo real.
Hasta la versión 5.0, MASM estaba disponible únicamente como aplicación MS-DOS . Las versiones 5.1 y 6.0 estaban disponibles tanto como aplicaciones MS-DOS como OS/2 . [3]
La versión 6.0, publicada en 1991, añadió el paso de parámetros con "invoke" y otras construcciones similares a las de alto nivel, además de los ya existentes de alto nivel como records , entre otras cosas. Tanto 6.0 como 6.0B podían ejecutarse en un procesador 8086 pero podían generar código 386 plano de 32 bits. En 1992, se publicó 6.1, que agregó soporte para el formato de objeto COFF utilizado por Windows NT y eliminó el soporte para OS/2. 6.1 se creó como un binario bimodal antes de que se finalizara la API Win32 y es incompatible con la ejecución en Windows NT debido a la falta de exportaciones. [4]
En 1993 se agregó soporte completo para aplicaciones de 32 bits en modo protegido y el conjunto de instrucciones Pentium . El binario MASM 6.11 en ese momento (1993) se envió como un binario extendido DOS "bimodal" (win32, es decir, PE ) (usando el extensor DOS Phar Lap TNT). Sin embargo, setup.exe es un ejecutable MZ, por lo que no se ejecutará en versiones de 64 bits de Windows, y el ml.exe bimodal está comprimido , y decomp.exe es un ejecutable NE, por lo que tampoco se ejecutará en versiones de 64 bits de Windows (si esperaba extraer manualmente los ml.exe y ml.err requeridos), por lo que efectivamente necesita acceso a Windows de 32 bits (o MSDOS) para instalarlo. La versión 6.11 es la última versión de MASM que se ejecutará en MS-DOS. Había una serie de parches disponibles, hasta 6.11d, que necesitaban Windows de 32 bits para ejecutarse, pero el ml.exe parcheado todavía tiene el extensor de dos Phar Lap, por lo que aún se puede ejecutar bajo MSDOS.
Las versiones 6.12 a 6.14 se implementaron como parches para la versión 6.11. Estos parches eran ejecutables PK autoextraíbles (es decir, MSDOS), por lo que no se ejecutarán en Windows de 64 bits. Incluso si los extrae por otros medios, el patch.exe es un ejecutable NE, por lo que tampoco podrá ejecutarse en Windows de 64 bits para actualizar ml.exe. Si lo hace en Windows de 32 bits (o anterior), el parche eliminará el extensor de DOS Phar Lap de ml.exe para que ya no pueda ejecutarse en MSDOS. La eliminación de Phar Lap hace que la parte MZ del ejecutable sea más pequeña, de modo que la firma "PE" sea más fácilmente visible, a diferencia de la situación con 6.11 donde la firma PE estaba bastante adentro del archivo.
A finales de 1997, MASM era totalmente compatible con Windows 95 e incluía algunas instrucciones específicas de AMD . [5]
En 1999, Intel lanzó macros para instrucciones SIMD y MMX , que poco después fueron soportadas de forma nativa por MASM. Con el lanzamiento de la versión 6.15 en 2000, Microsoft dejó de brindar soporte para MASM como un producto independiente, y en su lugar lo incorporó al conjunto de herramientas de Visual Studio . Aunque todavía era compatible con Windows 98 , las versiones actuales de Visual Studio no lo eran. [5] La compatibilidad con procesadores de 64 bits no se agregó hasta el lanzamiento de Visual Studio 2005 , con MASM 8.0.
Después del 25 de junio de 2015, existen al menos tres MASM diferentes con el número de versión 14.00.23026. En Microsoft Visual Studio 2015 Enterprise Edition, hay un ml "amd64_x86" y dos ml64, "x86_amd64" y "amd64". Se ejecutan en diferentes plataformas y están destinados a diferentes plataformas:
Las primeras versiones de MASM generaban módulos de objetos utilizando el formato OMF , que se utilizaba para crear binarios para MS-DOS o OS/2 .
Desde la versión 6.1, MASM puede producir módulos de objetos en formato Portable Executable [6] [7] (PE/COFF). PE/COFF es compatible con los compiladores C más recientes de Microsoft, y los módulos de objetos producidos por MASM o por el compilador C se pueden combinar y vincular de forma rutinaria en binarios Win32 y Win64.
Algunos otros ensambladores pueden ensamblar la mayor parte del código escrito para MASM, con la excepción de macros más complejas.
La documentación de la versión 5.1 de 1987 incluía soporte para " Microsoft BASIC , C, FORTRAN , Pascal ". [8]
En una revisión de tres ensambladores, Michael Blaszczak de BYTE en febrero de 1989 descubrió que MASM 5.1 era el más lento y el que más quejas generaba sobre el código. Concluyó que "es difícil acostumbrarse a MASM, pero cumple su función" a pesar de "tener más de su cuota justa de rarezas y rarezas frustrantes". [9]
{{cite web}}
: CS1 maint: copia archivada como título ( enlace )