Microsoft Macro Assembler
14.00.23506.0 / November 6, 2015
|Operating system||Microsoft Windows and MS-DOS|
The Microsoft Macro Assembler (MASM) is an x86 assembler that uses the Intel syntax for MS-DOS and Microsoft Windows. Beginning with MASM 8.0 there are two versions of the assembler - one for 16-bit and 32-bit assembly sources, and another (ML64) for 64-bit sources only.
MASM is maintained by Microsoft, but since version 6.12 has not been sold as a separate product, it is instead supplied with various Microsoft SDKs and C compilers. Recent versions of MASM are included with Microsoft Visual Studio.
Early versions of MASM were sold either as a generic "Microsoft Macro Assembler" for all x86 machines and the OEM version produced specifically for IBM PCs. By Version 4.0, the IBM release was dropped. Up to Version 3.0, MASM was also bundled with a smaller companion assembler, ASM.EXE. This was intended for PCs with only 64k of memory and lacked some features of the full MASM such as the ability to use code macros.
DOS versions up to 4.x included Microsoft's LINK utility which was designed to convert intermediate OBJ files generated by MASM and other compilers, but as users who did not do programming had no use of LINK, it was moved to their compiler packages.
Version 4.0 added support for 286 instructions and also shorthand mnemonics for segment descriptors (.code, .data, etc.). Version 5.0 supported 386 instructions, but could still only generate real mode executables.
Version 6.0, released in 1992, added parameter passing with "invoke" and some other high level-like constructs, in addition to the already existing high level-like records, among other things. By the end of the year, version 6.1A updated the memory management to be compatible with code produced by Visual C++. In 1993 full support for protected mode 32-bit applications and the Pentium instruction set was added. The MASM binary at that time was shipped as a "bi-modal" DOS-extended binary (using the Phar Lap TNT DOS extender).
Versions 6.12 to 6.14 were implemented as patches for version 6.11. These patches changed the type of the binary to native PE format; version 6.11 is the last version of MASM that will run under MS-DOS.
By the end of 1997 MASM fully supported Windows 95 and included some AMD-specific instructions.
In 1999 Intel released macros for SIMD and MMX instructions, which were shortly after supported natively by MASM. With the 6.15 release in 2000, Microsoft discontinued support for MASM as a separate product, instead subsuming it into the Visual Studio toolset. Though it was still compatible with Windows 98, current versions of Visual Studio were not. Support for 64-bit processors was not added until the release of Visual Studio 2005, with MASM 8.0.
After 25 June 2015, we find at least three different MASMs, with the same version number 14.00.23026, in Microsoft Visual Studio 2015 Enterprise Edition: one "amd64_x86" ml and two ml64s, "x86_amd64" and "amd64".
The three versions mentioned above run on different platforms targeting different platforms:
- amd64_x86: 64-bit (win64) MASM application, targeting 32-bit windows application development
- x86_am64: 32-bit (win32) MASM application, targeting 64-bit windows application development
- amd64: 64-bit (win64) MASM application, also targeting 64-bit windows application development
Object module formats supported by MASM
Since version 6.1, MASM is able to produce object modules in the Portable Executable (PE/COFF) format. PE/COFF is compatible with recent Microsoft C compilers, and object modules produced by either MASM or the C compiler can be routinely intermixed and linked into Win32 and Win64 binaries.
Some third-party tools that support MASM
- WinAsm Studio
- Visual Studio
- Visual MASM
- IDAPro the Interactive Disassembler
Assemblers compatible with MASM
Some other assemblers can assemble most code written for MASM, with the exception of more complex macros.
- Turbo Assembler (TASM) developed by Borland, later owned by Embarcadero, last updated in 2002 and supplied with Delphi and C++Builder for several years, later discontinued.
- JWASM Macro Assembler, licensed under the Sybase Open Watcom EULA.
- Pelle's Macro Assembler, a component of the Pelles C development environment.
- Watt, Peggy; Christine McGeever (January 7, 1985). "Macintosh Vs. IBM PC At One Year". InfoWorld. Vol. 7 no. 1. pp. 15–16. ISSN 0199-6649. The IBM PC Macro Assembler was released in December 1981.
- Marshall, Martin (April 29, 1991). "Macro Assembler Update Adds High-Level Features". InfoWorld. Vol. 13 no. 17. p. 21. ISSN 0199-6649.
- R. E. Harvey (2007). "Assemblers". Archived from the original on 16 February 2008. Retrieved 4 February 2010.
- "Archived copy". Archived from the original on 2009-01-26. Retrieved 2008-06-24.
- "WHDC White Papers and Documentation". Retrieved 25 September 2016.
- "RAD Software". Retrieved 25 September 2016.
- Kyprianou, Antonis. "WinAsm Studio, The Assembly IDE - Free Downloads, Source Code". Retrieved 25 September 2016.
- "Easy Code Visual Assembler IDE - Assembly programming". Retrieved 25 September 2016.
- Palavos. "Assembly Programming with Visual Studio 2010/2012 - CodeProject". Retrieved 25 September 2016.
- "Visual MASM - The MASM IDE for Microsoft Macro Assembler". Retrieved 25 September 2016.
- Olly. "OllyDbg v1.10". Retrieved 25 September 2016.
- Official Microsoft Macro Assembler Reference
- Intro to MASM Win32
- Win32 assembly tutorials using MASM
- Win32 Radasm
- Masm32 project
- When and how to use an assembler. Assembly programming basics