MASM est maintenu par Microsoft , mais depuis la version 6.12, il n'est plus vendu séparément. Il est fourni avec différents kits de développement logiciel (SDK) et compilateurs C de Microsoft . Les versions récentes de MASM sont incluses dans Microsoft Visual Studio .
Parmi les applications notables compilées à l'aide de MASM, on peut citer RollerCoaster Tycoon , écrit à 99 % en langage assembleur et construit avec MASM.
les PC IBM . La version IBM a été abandonnée à partir de la version 4.0 . Jusqu'à la version 3.0, MASM était également fourni avec un assembleur complémentaire plus léger, ASM.EXE. Ce dernier était destiné aux PC disposant de seulement 64 Ko de mémoire et ne possédait pas certaines fonctionnalités de la version complète de MASM, comme la possibilité d'utiliser des macros.Les versions MS-DOS jusqu'à la version 4.x incluaient l'utilitaire LINK de Microsoft, conçu pour convertir les fichiers OBJ intermédiaires générés par MASM et d'autres compilateurs ; cependant, comme les utilisateurs qui ne programmaient pas n'avaient aucune utilité de cet utilitaire, celui-ci a été déplacé dans leurs packages de compilation.
La version 4.0, sortie en octobre 1985, a ajouté la prise en charge des instructions 286 .
La version 5.0, sortie en août 1987, prenait en charge 386 instructions, ainsi que des mnémoniques abrégées pour les descripteurs de segments (.code, .data, etc.), mais elle ne pouvait toujours générer que des exécutables en mode réel.
Jusqu'à la version 5.0, MASM était disponible uniquement en tant qu'application MS-DOS . Les versions 5.1 et 6.0 étaient disponibles à la fois en tant qu'applications MS-DOS et OS/2 .
La version 6.0, sortie en 1991, a introduit le passage de paramètres avec « invoke » et d'autres constructions de haut niveau, en plus des enregistrements de haut niveau déjà existants . Les versions 6.0 et 6.0B pouvaient s'exécuter sur un processeur 8086 , mais généraient du code 32 bits 386. En 1992, la version 6.1 a été publiée ; elle a ajouté la prise en charge du format d'objet COFF utilisé par Windows NT et a supprimé celle d'OS/2. La version 6.1 a été compilée comme un binaire bimodal avant la finalisation de l' API Win32 et est incompatible avec Windows NT en raison de l'absence d'exportations.
En 1993, la prise en charge complète des applications 32 bits en mode protégé et du jeu d'instructions Pentium a été ajoutée. Le binaire MASM 6.11 de cette époque (1993) était distribué comme un binaire DOS étendu « bimodal » (win32, c'est-à-dire PE ) (utilisant l'extension DOS Phar Lap TNT). Cependant, setup.exe étant un exécutable MZ, il ne fonctionne pas sous les versions 64 bits de Windows. De plus, ml.exe (bimodal) est compressé et decomp.exe (NE), ce qui le rend également incompatible avec les versions 64 bits de Windows. Par conséquent, l'accès à Windows 32 bits (ou MS-DOS) est nécessaire pour l'installer. La version 6.11 est la dernière version de MASM compatible avec MS-DOS. Il existait une série de correctifs disponibles, jusqu'à la version 6.11d, qui nécessitaient Windows 32 bits pour fonctionner, mais le fichier ml.exe corrigé possède toujours l'extension Phar Lap dos et peut donc toujours être exécuté sous MSDOS.
Fin 1997, MASM prenait entièrement en charge Windows 95 et incluait certaines instructions spécifiques à AMD .
En 1999, Intel a publié des macros pour les instructions SIMD et MMX , rapidement prises en charge nativement par MASM. Avec la version 6.15 en 2000, Microsoft a cessé de prendre en charge MASM en tant que produit distinct, l'intégrant à la suite d'outils Visual Studio . Bien que toujours compatible avec Windows 98 , ce n'était plus le cas pour les versions actuelles de Visual Studio. La prise en charge des processeurs 64 bits n'a été ajoutée qu'avec la sortie de Visual Studio 2005 et de MASM 8.0.
Après le 25 juin 2015, il existe au moins trois MASM différents portant le numéro de version 14.00.23026. Dans Microsoft Visual Studio 2015 Enterprise Edition, on trouve un fichier ml « amd64_x86 » et deux fichiers ml64, « x86_amd64 » et « amd64 ». Ils s'exécutent sur des plateformes différentes et ciblent des systèmes d'exploitation différents.
- amd64_x86 : génère du code 64 bits, s’exécute dans un environnement Windows 32 bits
- x86_amd64 : génère du code 32 bits, s’exécute dans un environnement Windows 64 bits
- amd64 : génère du code 64 bits, s’exécute dans un environnement Windows 64 bits
Formats de modules objets pris en charge par MASM
Les premières versions de MASM généraient des modules objets au format OMF , qui était utilisé pour créer des binaires pour MS-DOS ou OS/2 .
Depuis la version 6.1, MASM est capable de produire des modules objets au format PE/COFF ( Portable Executable ). Ce format est compatible avec les compilateurs C récents de Microsoft, et les modules objets produits par MASM ou par le compilateur C peuvent être facilement combinés et liés dans des binaires Win32 et Win64.
Assembleurs compatibles avec MASM
D'autres assembleurs peuvent assembler la plupart du code écrit pour MASM, à l'exception des macros plus complexes.
- Turbo Assembler (TASM) développé par Borland , puis racheté par Embarcadero, mis à jour pour la dernière fois en 2002, mais toujours fourni avec C++Builder et RAD Studio .
- JWasm Macro Assembler, distribué sous licence Sybase Open Watcom EULA . Dernière mise à jour : 2014.
- L'assembleur macro de Pelle, un composant de l' environnement de développement Pelles C le 29 février 2020 sur la Wayback Machine .
- UASM est un assembleur gratuit compatible MASM basé sur JWasm.
- ASMC est un assembleur gratuit compatible MASM basé sur JWasm.
Prise en charge de la programmation multilingue
La documentation de la version 5.1 de 1987 incluait la prise en charge de « Microsoft BASIC , C, FORTRAN , Pascal ».
Réception
Dans un article comparatif de trois assembleurs, Michael Blaszczak de BYTE, paru en février 1989, a constaté que MASM 5.1 était le plus lent et celui qui se plaignait le plus du code. Il a conclu que « MASM demande un certain temps d’adaptation, mais il remplit sa fonction », malgré « un certain nombre de bizarreries et de particularités frustrantes ».