stringtranslate.com

Ensamblador de macros de Microsoft

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, hay dos versiones del ensamblador: una para fuentes ensambladas 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 separado. En cambio , se suministra con varios SDK de Microsoft y compiladores de C. Las versiones recientes de MASM se incluyen con Microsoft Visual Studio .

Las aplicaciones notables compiladas con MASM son RollerCoaster Tycoon, que fue escrita en un 99% en ensamblaje y construida con MASM. [1]

Historia

Las primeras versiones de MASM se remontan a 1981. [2] Se vendieron como "Microsoft Macro Assembler" genérico para todas las máquinas x86 o como versión OEM específicamente para PC IBM . En la versión 4.0, la versión de IBM se eliminó. Hasta la versión 3.0, MASM también incluía un ensamblador complementario más pequeño, ASM.EXE. Estaba destinado a 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 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 utilizaban la utilidad, se trasladó a sus paquetes de compilador.

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 solo 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 como aplicaciones MS-DOS y OS/2 . [3]

La versión 6.0, lanzada en 1991, agregó el paso de parámetros con "invoke" y algunas otras construcciones de alto nivel, además de los registros de alto nivel ya existentes , 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 lanzó la versión 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 de Win32 y es incompatible con la ejecución en Windows NT debido a que faltan exportaciones. [4]

En 1993 se añadió soporte total para aplicaciones de 32 bits en modo protegido y el conjunto de instrucciones Pentium . El binario 6.11 MASM en ese momento (1993) se envió como un binario "bimodal" (win32, es decir, PE ) extendido a DOS (usando el extensor de 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 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 necesarios), por lo que efectivamente necesita acceso a Windows de 32 bits (o MSDOS) para poder 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 Phar Lap dos, por lo que aún se puede ejecutar en 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, patch.exe es un ejecutable de NE, por lo que tampoco podrá ejecutarse en Windows de 64 bits para actualizar ml.exe. Si lo ejecuta en un sistema Windows de 32 bits (o anterior), el parche eliminará el extensor Phar Lap dos de ml.exe para que ya no pueda ejecutarse en MSDOS. La eliminación de Phar Lap hace que la porción 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 muy dentro 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 admitidas de forma nativa por MASM. Con la versión 6.15 en 2000, Microsoft suspendió el soporte para MASM como un producto separado, y en lugar de ello lo incluyó en el 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 dirigidas a diferentes plataformas:

Formatos de módulos de objetos soportados por MASM

Las primeras versiones de MASM generaban módulos de objetos utilizando el formato OMF , que se utilizaba para crear archivos binarios para MS-DOS u OS/2 .

Desde la versión 6.1, MASM es capaz de producir módulos de objetos en el formato Portable Executable [6] [7] (PE/COFF). PE/COFF es compatible con compiladores recientes de Microsoft C, y los módulos de objetos producidos por MASM o el compilador de C se pueden entremezclar y vincular de forma rutinaria a binarios Win32 y Win64.

Ensambladores compatibles con MASM

Algunos otros ensambladores pueden ensamblar la mayor parte del código escrito para MASM, con la excepción de macros más complejas.

Soporte de programación en lenguaje mixto

La documentación para la versión 5.1 de 1987 incluía soporte para " Microsoft BASIC , C, FORTRAN , Pascal ". [8]

Ver también

Referencias

  1. ^ "Desarrollo de software de Chris Sawyer". www.chrissawyergames.com . Consultado el 5 de enero de 2023 .
  2. ^ Vatio, Peggy; Christine McGeever (7 de enero de 1985). "Macintosh versus IBM PC en un año". InfoMundo . vol. 7, núm. 1. págs. 15-16. ISSN  0199-6649.El IBM PC Macro Assembler fue lanzado en diciembre de 1981.
  3. ^ Marshall, Martín (29 de abril de 1991). "La actualización de Macro Assembler agrega funciones de alto nivel". InfoMundo . vol. 13, núm. 17. pág. 21. ISSN  0199-6649.
  4. ^ "Q94314: Código MASM de modelo de memoria plana de 32 bits para Windows NT". Archivado desde el original el 13 de enero de 2021 . Consultado el 3 de octubre de 2023 .
  5. ^ ab RE Harvey (2007). "Ensambladores". Archivado desde el original el 16 de febrero de 2008 . Consultado el 4 de febrero de 2010 .
  6. ^ "Copia archivada". Archivado desde el original el 26 de enero de 2009 . Consultado el 24 de junio de 2008 .{{cite web}}: Mantenimiento CS1: copia archivada como título ( enlace )
  7. ^ "Documentación y documentos técnicos de WHDC". Microsoft . Consultado el 25 de septiembre de 2016 .
  8. ^ Microsoft Macro Assembler 5.1, Guía de programación en idiomas mixtos . pag. 3.

enlaces externos