fbpx
Wikipedia

Microsoft Macro Assembler

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 & 32-bit assembly sources, and another (ML64) for 64-bit sources only.

Microsoft Macro Assembler
Developer(s)Microsoft
Initial release1981; 43 years ago (1981)
Stable release
14.16.27023.1 / March 7, 2017; 7 years ago (2017-03-07)
Operating systemMicrosoft Windows and MS-DOS
TypeAssembler
LicenseCommercial proprietary software
Websitedocs.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference

MASM is maintained by Microsoft, but since version 6.12 it 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.

Notable applications compiled using MASM are RollerCoaster Tycoon which was 99% written in assembly and built with MASM.[1]

History edit

The earliest versions of MASM date back to 1981.[2] They were sold either as the generic "Microsoft Macro Assembler" for all x86 machines or as the OEM version 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.

MS-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; however, as users who did not program had no use of the utility, it was moved to their compiler packages.

Version 4.0, released October 1985, added support for 286 instructions.

Version 5.0, released August 1987, supported 386 instructions, and also shorthand mnemonics for segment descriptors (.code, .data, etc.), but it could still only generate real mode executables.

Through version 5.0, MASM was available as an MS-DOS application only. Versions 5.1 and 6.0 were available as both MS-DOS and OS/2 applications.[3]

Version 6.0, released in 1991, 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. Both 6.0 and 6.0B were able to be run on an 8086 processor but could generate flat 32 bit 386 code. In 1992, 6.1 was released, which added support for the COFF object format used by Windows NT, and removed support for OS/2. 6.1 was built as a bi-modal binary before the Win32 API was finalized, and is incompatible with running on Windows NT due to missing exports.[4]

In 1993 full support for protected mode 32-bit applications and the Pentium instruction set was added. The 6.11 MASM binary at that time (1993) was shipped as a "bi-modal" (win32, i.e. PE) DOS-extended binary (using the Phar Lap TNT DOS extender). However, the setup.exe is an MZ executable so won't run under 64-bit versions of Windows, and the bi-modal ml.exe is compressed, and the decomp.exe is an NE executable, so also won't run under 64-bit versions of Windows (if you were hoping to manually extract the required ml.exe and ml.err), so you effectively need access to 32-bit Windows (or MSDOS) in order to install it. Version 6.11 is the last version of MASM that will run under MS-DOS. There were a series of patches available, up to 6.11d, that need 32-bit Windows to run, but the patched ml.exe still has the Phar Lap dos extender so can still be run under MSDOS.

Versions 6.12 to 6.14 were implemented as patches for version 6.11. These patches were self-extracting PK executables (i.e. MSDOS), so won't run under 64-bit Windows. Even if you extract them by other means, the patch.exe is an NE executable so won't be able to run on 64-bit Windows to update ml.exe either. If you do run on a 32-bit Windows (or earlier), patch will strip the Phar Lap dos extender from ml.exe so it can no longer be run on MSDOS. The stripping of Phar Lap makes the MZ portion of the executable smaller, so that the "PE" signature is more easily visible, unlike the situation with 6.11 where the PE signature was a long way into the file.

By the end of 1997, MASM fully supported Windows 95 and included some AMD-specific instructions.[5]

In 1999, Intel released macros for SIMD and MMX instructions, which were shortly thereafter 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.[5] Support for 64-bit processors was not added until the release of Visual Studio 2005, with MASM 8.0.

After 25 June 2015, there are at least three different MASMs with the version number 14.00.23026. In Microsoft Visual Studio 2015 Enterprise Edition, there is one "amd64_x86" ml and two ml64s, "x86_amd64" and "amd64". They run on different platforms targeting different platforms:

  • amd64_x86: generates 64-bit code, runs in a Windows 32-bit environment
  • x86_amd64: generates 32-bit code, runs in a Windows 64-bit environment
  • amd64: generates 64-bit code, runs in a Windows 64-bit environment

Object module formats supported by MASM edit

Early versions of MASM generated object modules using the OMF format, which was used to create binaries for MS-DOS or OS/2.

Since version 6.1, MASM is able to produce object modules in the Portable Executable[6][7] (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.

Assemblers compatible with MASM edit

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, but still supplied with C++Builder and RAD Studio.
  • JWasm Macro Assembler, licensed under the Sybase Open Watcom EULA. Last updated in 2014.
  • Pelle's Macro Assembler, a component of the Pelles C 2020-02-29 at the Wayback Machine development environment.
  • UASM is a free MASM-compatible assembler based on JWasm.
  • ASMC is a free MASM-compatible assembler based on JWasm.

Mixed language programming support edit

Documentation for 1987's version 5.1 included support for "Microsoft BASIC, C, FORTRAN, Pascal."[8]

See also edit

References edit

  1. ^ "Chris Sawyer Software Development". www.chrissawyergames.com. Retrieved 2023-01-05.
  2. ^ 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.
  3. ^ Marshall, Martin (April 29, 1991). "Macro Assembler Update Adds High-Level Features". InfoWorld. Vol. 13, no. 17. p. 21. ISSN 0199-6649.
  4. ^ . Archived from the original on 13 January 2021. Retrieved 3 October 2023.
  5. ^ a b R. E. Harvey (2007). . Archived from the original on 16 February 2008. Retrieved 4 February 2010.
  6. ^ . Archived from the original on 2009-01-26. Retrieved 2008-06-24.{{cite web}}: CS1 maint: archived copy as title (link)
  7. ^ "WHDC White Papers and Documentation". Microsoft. Retrieved 25 September 2016.
  8. ^ Microsoft Macro Assembler 5.1, Mixed-Language Programming Guide. p. 3.

External links edit

  • Official website
  • Masm32 project

microsoft, macro, assembler, masm, assembler, that, uses, intel, syntax, microsoft, windows, beginning, with, masm, there, versions, assembler, assembly, sources, another, ml64, sources, only, developer, microsoftinitial, release1981, years, 1981, stable, rele. 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 amp 32 bit assembly sources and another ML64 for 64 bit sources only Microsoft Macro AssemblerDeveloper s MicrosoftInitial release1981 43 years ago 1981 Stable release14 16 27023 1 March 7 2017 7 years ago 2017 03 07 Operating systemMicrosoft Windows and MS DOSTypeAssemblerLicenseCommercial proprietary softwareWebsitedocs wbr microsoft wbr com wbr en us wbr cpp wbr assembler wbr masm wbr microsoft macro assembler reference MASM is maintained by Microsoft but since version 6 12 it 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 Notable applications compiled using MASM are RollerCoaster Tycoon which was 99 written in assembly and built with MASM 1 Contents 1 History 2 Object module formats supported by MASM 3 Assemblers compatible with MASM 4 Mixed language programming support 5 See also 6 References 7 External linksHistory editThe earliest versions of MASM date back to 1981 2 They were sold either as the generic Microsoft Macro Assembler for all x86 machines or as the OEM version 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 MS 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 however as users who did not program had no use of the utility it was moved to their compiler packages Version 4 0 released October 1985 added support for 286 instructions Version 5 0 released August 1987 supported 386 instructions and also shorthand mnemonics for segment descriptors code data etc but it could still only generate real mode executables Through version 5 0 MASM was available as an MS DOS application only Versions 5 1 and 6 0 were available as both MS DOS and OS 2 applications 3 Version 6 0 released in 1991 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 Both 6 0 and 6 0B were able to be run on an 8086 processor but could generate flat 32 bit 386 code In 1992 6 1 was released which added support for the COFF object format used by Windows NT and removed support for OS 2 6 1 was built as a bi modal binary before the Win32 API was finalized and is incompatible with running on Windows NT due to missing exports 4 In 1993 full support for protected mode 32 bit applications and the Pentium instruction set was added The 6 11 MASM binary at that time 1993 was shipped as a bi modal win32 i e PE DOS extended binary using the Phar Lap TNT DOS extender However the setup exe is an MZ executable so won t run under 64 bit versions of Windows and the bi modal ml exe is compressed and the decomp exe is an NE executable so also won t run under 64 bit versions of Windows if you were hoping to manually extract the required ml exe and ml err so you effectively need access to 32 bit Windows or MSDOS in order to install it Version 6 11 is the last version of MASM that will run under MS DOS There were a series of patches available up to 6 11d that need 32 bit Windows to run but the patched ml exe still has the Phar Lap dos extender so can still be run under MSDOS Versions 6 12 to 6 14 were implemented as patches for version 6 11 These patches were self extracting PK executables i e MSDOS so won t run under 64 bit Windows Even if you extract them by other means the patch exe is an NE executable so won t be able to run on 64 bit Windows to update ml exe either If you do run on a 32 bit Windows or earlier patch will strip the Phar Lap dos extender from ml exe so it can no longer be run on MSDOS The stripping of Phar Lap makes the MZ portion of the executable smaller so that the PE signature is more easily visible unlike the situation with 6 11 where the PE signature was a long way into the file By the end of 1997 MASM fully supported Windows 95 and included some AMD specific instructions 5 In 1999 Intel released macros for SIMD and MMX instructions which were shortly thereafter 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 5 Support for 64 bit processors was not added until the release of Visual Studio 2005 with MASM 8 0 After 25 June 2015 there are at least three different MASMs with the version number 14 00 23026 In Microsoft Visual Studio 2015 Enterprise Edition there is one amd64 x86 ml and two ml64s x86 amd64 and amd64 They run on different platforms targeting different platforms amd64 x86 generates 64 bit code runs in a Windows 32 bit environment x86 amd64 generates 32 bit code runs in a Windows 64 bit environment amd64 generates 64 bit code runs in a Windows 64 bit environmentObject module formats supported by MASM editEarly versions of MASM generated object modules using the OMF format which was used to create binaries for MS DOS or OS 2 Since version 6 1 MASM is able to produce object modules in the Portable Executable 6 7 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 Assemblers compatible with MASM editSome 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 but still supplied with C Builder and RAD Studio JWasm Macro Assembler licensed under the Sybase Open Watcom EULA Last updated in 2014 Pelle s Macro Assembler a component of the Pelles C Archived 2020 02 29 at the Wayback Machine development environment UASM is a free MASM compatible assembler based on JWasm ASMC is a free MASM compatible assembler based on JWasm Mixed language programming support editDocumentation for 1987 s version 5 1 included support for Microsoft BASIC C FORTRAN Pascal 8 See also editMicrosoft MACRO 80 Assembly language High level assembler Comparison of assemblersReferences edit Chris Sawyer Software Development www chrissawyergames com Retrieved 2023 01 05 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 Q94314 32 Bit Flat Memory Model MASM Code for Windows NT Archived from the original on 13 January 2021 Retrieved 3 October 2023 a b 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 a href Template Cite web html title Template Cite web cite web a CS1 maint archived copy as title link WHDC White Papers and Documentation Microsoft Retrieved 25 September 2016 Microsoft Macro Assembler 5 1 Mixed Language Programming Guide p 3 External links editOfficial website Masm32 project Retrieved from https en wikipedia org w index php title Microsoft Macro Assembler amp oldid 1216121535, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.