Microsoft Macro Assembler (MASM) Unofficial Changelist
*LEGAL DISCLAIMER: All references to Microsoft products, including but not limited to: Microsoft Macro Assembler (MASM), MS-DOS, Visual C++, Visual Basic, Visual Studio, Windows, Windows NT, Windows Software Development Kit (SDK) and associated logos or images are trademarks owned and copyright by Microsoft Corporation.
Microsoft MASM was originally an assembler (i.e. assembly language compiler) for the Intel processor targeting IBM PC and compatible computers. This processor and its successors were grouped into what eventually became known as Intel's x86 architecture, capable of targeting bit ( and below) and bit ( and up) modes. Around , Microsoft released a bit version of MASM targeting AMD's bit specification (now known as the x64 architecture), which is a bit extension to the x86 line of processors. Microsoft publicly released this assembler alongside the x64 debut releases of Windows: XP and Server Although Microsoft has publicly released an assembler for ARM processors (known as ARMASM) at least as of Visual Studio , it is technically not MASM. The primary focus of this page are the x86 and x64 versions of MASM.
Before Microsoft's Macro Assembler popularized the acronym MASM, MASM previously meant Meta Assembler (essentially an assembler-generation tool whose application is primarily used in mainframe computing). In the pre-DOS era, there were many macro-style assemblers produced by different companies, primarily targeting mainframes or the newly emerging proprietary chipsets for personal computers or gaming systems. During this time, someone invented the notion of a “macro”, which is essentially a series of keystrokes assigned to a name or keyboard sequence as a time saving construct. In these days, macro support was popular and used in many utilities from spreadsheets to command line shells, not just programming languages. This was at a time where the major programming languages in widespread use today were still under development, so it was common for entire applications to be written purely in assembly language. As programming in assembly language is just one small step above programming directly in machine language (programming in numeric codes), it takes many separate instructions to perform even the most simple tasks such as writing a single character to a display terminal. This is why assembly language is known as a tedious programming language. When used in assembly language, macros enable programmers to assign a group of commonly used instructions to a name and insert those instructions anywhere the name appears in as many places as that common task is needed. Microsoft's Macro Assembler (MASM), initially appearing in near the release of Microsoft's IBM PC-DOS, is an assembler using the Intel syntax/notation. MASM became the most popular assembler likely due to the success of DOS and Windows. As of this writing, MASM is the oldest IBM PC assembler still being actively developed and supported.
Origins of MASM:
After some guesswork as to the origins of MASM being possibly related to the Assembler created by Tim Paterson of SCP (Seattle Computer Products), I was able to contact him for his help in clearing things up. Tim Patterson, the original creator of DOS and the famous www.cronistalascolonias.com.ar, wrote an assembler (ASM) to assemble DOS, the predecessor to MS-DOS. Here is what he said:
MASM was written in Pascal by Marc McDonald (Microsoft employee #1, after Bill & Paul). Microsoft had been doing all their development on DEC computers, and the macro capability put in MASM was modeled after DEC assemblers. Because MASM was such a large macro assembler, one of the guys referred to it as "McDonald's big mac".
MASM does not have lineage back to M It was written specifically for the and attempted some level of compatibility with Intel's assembler. I remember it was different from what I was used to. When MS bought DOS from SCP I was at MS. After finishing up DOS , I translated DOS from SCP's assembler to MASM, and I needed Marc to explain some of the syntax to me.
He also had the following to say about his Assembler he wrote while at SCP:
The assembler I wrote originally was in Z80 assembly language and ran under CP/M. I believe it was distributed with the SCP CPU card as ASM I also wrote a translator that converted Z80 source code to inefficient but workable source code (Intel promoted this idea with a published translation table). This was called TRANS86 and was also written in Z80 assembly for CP/M. Once DOS was working, I applied the translator to ASM86 (and to itself) to create versions that ran under DOS. I do not have the change history in front of me (I see you deleted it from your history page), but I believe that versions >= 2 marked the translated (DOS) version. If any history shows version numbers < 2, that was the CP/M version.
Although the SCP Assembler was used to build early versions of DOS (DOS, MS-DOS 1.x), Microsoft's major rewrite of DOS included changing the build system to use Microsoft's own assembler, MASM. More information about Tim's Assembler (ASM) can be found at the Computer History Museum's Microsoft MS-DOS early source code article. From here you may download the now freely available MS-DOS and source code which includes the source code to Tim's Assembler and the Z80 to translator.
Evolution of MASM:
From MASM in (corresponding to the release of MS-DOS ), MASM enjoyed almost 13 years as a distinct Microsoft product. This status was lost with MASM version in where Microsoft stated MASM is no longer available as a retail product. With the popularity of the new and various programming languages available, the demand for people wanting to write in pure assembler declined, so Microsoft followed suit and downgraded MASM to a system-level C/C++ tool. Microsoft would release patches for new versions of MASM (primarily to accommodate changes in Intel's upcoming chipsets) up to version in In the year , the Microsoft released MASM , not as a patch, but as an add-on to Visual C++ and no official changelist was officially published. Since version , MASM has been bundled with every release of Visual C++ via Microsoft Visual Studio to date along with the rest of the C/C++ toolset.
Microsoft's first failure in documentation was a lack of an official changelist for MASM version , something they had dutifully adhered to up until this point. Unfortunately version was one of the most stable and widely used versions, not to mention one of the most historically significant. This version had finally stabilized all of the www.cronistalascolonias.com.ar features (started 9 years prior) with the recently solidified architecture of the now-dominant Win32 platform ala Windows NT and Windows 9x. The www.cronistalascolonias.com.ar features were the only real thing that set MASM apart from Borland's Turbo Assembler which was the market leader in MASM www.cronistalascolonias.com.ar syntax. I spent a good deal of time scouring the internet for changelist information for this version and I found nothing but unofficial tidbits. Once I had put together an unofficial changelist, this soon grew to encompass all www.cronistalascolonias.com.ar versions. Eventually this page was born as the changelist quickly expanded to all known versions of MASM.
I have attempted obtain the most complete version information for Microsoft's MASM throughout its history using official information when available and falling back to bits and pieces from other sources when information is limited. This includes printed manuals, readme's and other information shipping with the product, MSDN content, or other Microsoft websites. When appropriate, opinions and hearsay are also included (and noted as such), as this helps develop a clearer picture of how the product impacted those who used it, circumventing the usual marketing rhetoric from official sources.
Jump to MASM Version Info / 43 Versions Listed
Version | Copyright | Runs Under | Main Program Date/File/Size | @Version | Build Version |
---|
MACRO | | CPM | 12/09/ | MCOM | 20 k | |
MACRO | | DOS | MEXE |
MASM IBM | | DOS | 12/07/ pm | www.cronistalascolonias.com.ar | 66 k |
MASM | | DOS | 02/05/ pm | www.cronistalascolonias.com.ar | 66 k |
MASM | | DOS | 02/08/ | www.cronistalascolonias.com.ar | 69 k |
MASM | | DOS | 02/01/ pm | www.cronistalascolonias.com.ar | 76 k |
MASM | | DOS | 08/25/ | www.cronistalascolonias.com.ar | 79 k |
MASM | | DOS | 11/27/ am | www.cronistalascolonias.com.ar | 79 k |
MASM IBM | | DOS | 07/18/ pm | www.cronistalascolonias.com.ar | 75 k |
MASM | | DOS | 03/02/ | www.cronistalascolonias.com.ar | 66 k |
MASM | | DOS | 11/21/ pm | www.cronistalascolonias.com.ar | 76 k |
MASM | | DOS | 11/21/ pm | www.cronistalascolonias.com.ar | 76 k |
MASM | | DOS | 10/16/ am | www.cronistalascolonias.com.ar | 84 k |
MASM | | DOS | 07/24/ am | MASMEXE | k |
MASM | | DOS | 07/31/ am | www.cronistalascolonias.com.ar | k |
MASM/2 IBM | | OS/2,DOS | 09/03/ pm | www.cronistalascolonias.com.ar | k |
MASM | | DOS,OS/2 | 02/01/ pm | www.cronistalascolonias.com.ar | k | |
MASM A | | DOS,OS/2 | 01/16/ am | www.cronistalascolonias.com.ar | k | |
MASM B | | DOS,OS/2 | 01/04/ pm | www.cronistalascolonias.com.ar | k | |
QuickAssembler | | DOS |
MASM www.cronistalascolonias.com.ar | | WIN32 | 11/01/ am | MASMEXE | k | | |
MASM | | DOS,OS/2 | 04/03/ pm | www.cronistalascolonias.com.ar | k | |
MASM A |
MASM B | | DOS,OS/2 | 03/18/ pm | www.cronistalascolonias.com.ar | k | |
MASM | | DOS,WIN32 | 11/16/ pm | www.cronistalascolonias.com.ar | k | |
MASM a | | DOS,WIN32 | 03/12/ pm | www.cronistalascolonias.com.ar | k | |
MASM | | DOS,WIN32 | 09/24/ am | www.cronistalascolonias.com.ar | k | |
MASM a | | DOS,WIN32 | 03/21/ pm | www.cronistalascolonias.com.ar | k | |
MASM c | | DOS,WIN32 | 08/25/ pm | www.cronistalascolonias.com.ar | k | |
MASM d | | DOS,WIN32 | 09/19/ pm | www.cronistalascolonias.com.ar | k | |
MASM | | WIN32 | 08/27/ pm | www.cronistalascolonias.com.ar | k | | |
MASM | | WIN32 | 12/05/ pm | www.cronistalascolonias.com.ar | k | | |
MASM | | WIN32 | 04/12/ pm | www.cronistalascolonias.com.ar | k | | |
MASM | | WIN32 | 03/16/ pm | www.cronistalascolonias.com.ar | k | | |
MASM | WIN32 | 01/05/ am | www.cronistalascolonias.com.ar | k | | / www.cronistalascolonias.com.ar (any*) |
MASM | WIN32 | 07/11/ pm | www.cronistalascolonias.com.ar | k | | / www.cronistalascolonias.com.ar PRO |
MASM | WIN32/64 | 04/21/ pm | www.cronistalascolonias.com.ar | k | | / VS EXPRESS, PRO & ACADEMIC |
MASM | WIN32/64 | 07/30/ pm | www.cronistalascolonias.com.ar | k | | / VS (any*) / Win32 |
MASM | WIN32/64 | 03/19/ pm | www.cronistalascolonias.com.ar | k | | / Win32 |
MASM | WIN32/64 | 07/26/ pm | www.cronistalascolonias.com.ar | k | | / Win32 |
MASM | WIN32/64 | 10/05/ am | www.cronistalascolonias.com.ar | k | | / From VS Express for Desktop / Win32 |
MASM | WIN32/64 | 06/25/ pm | www.cronistalascolonias.com.ar | k | | / From VS Community D14REL / Win32 |
MASM | WIN32/64 | 07/21/ pm | www.cronistalascolonias.com.ar | k | | / From VS Community |
Jump to Keyword Version Info
Special thanks to Vernon from pcdosretro for sending the version information up to in the tables shown below. Vernon also extracted the MASM B QuickHelp Documentation into a single text file for quick reference and simple search lookups for the various MASM keywords and operators. Despite being derived from the version B documentation, the majority of the information still applies to current versions of MASM.
*
NOTE: It is to be expected many characters in this file will not display as intended through your web browser, specifically the high-ASCII line drawing characters. If you save the page as a text file and open it in a command prompt under Windows (using "edit", "more" or any other text editor), the high-ASCII characters will display as intended.
Keyword | Version | BYTE | | DB | DD | DF | | DQ | DT | DW | DWORD | | ENDS | FWORD | | MMWORD | | OWORD | | QWORD | | REAL10 | | REAL4 | | REAL8 | | RECORD | SBYTE | | SDWORD | | SQWORD | | STRUC | STRUCT | | SWORD | | TBYTE | | TYPEDEF | | UNION | | WORD | | XMMWORD | | YMMWORD | |
| Keyword | Version | | | | | C | | P | | | | | | C | | P | | | | | | P | | | | P | | | | P | | | | | | .K3D | | .MMX | | .NO87 | | .XMM | |
| Keyword | Version | ALIGN | | .ALPHA | | ASSUME | .CODE | | .CONST | | .DATA | | .DATA? | | DOSSEG | | .DOSSEG | | END | ENDS | EVEN | .EXIT | | .FARDATA? | | .FARDATA | | GROUP | LABEL | .MODEL | | ORG | SEGMENT | .SEQ | | .STACK | | .STARTUP | |
| Keyword | Version | .ALLOCSTACK (x64) | | ENDM | ENDP | .ENDPROLOG (x64) | | EXITM | .FPO | NT, A, | GOTO | | INVOKE | | LOCAL | MACRO | PROC | PROTO | | PURGE | .PUSHFRAME (x64) | | .PUSHREG (x64) | | .SAFESEH | | .SAVEREG (x64) | | .SAVEXMM (x64) | | .SETFRAME (x64) | | USES | |
| Keyword | Version | ALIAS | | COMM | | COMMENT | EXTERN | | EXTERNDEF | | EXTRN | INCLUDE | INCLUDELIB | | NAME | <= / ignored + | PUBLIC |
|
Keyword | Version | ECHO | | .MSFLOAT | | OPTION | | %OUT | POPCONTEXT | | PUSHCONTEXT | | .RADIX |
| Keyword | Version | CATSTR | | INSTR | | SIZESTR | | SUBSTR | |
| Keyword | Version | = | EQU | TEXTEQU | |
| Keyword | Version | ENDM | FOR | | FORC | | GOTO | | IRP | IRPC | REPEAT | | REPT | WHILE | |
| Keyword | Version | ELSE | ELSEIF | | ELSEIF1 | | ELSEIF2 | | ELSEIFB | | ELSEIFDEF | | ELSEIFDIF | | ELSEIFDIFI | | ELSEIFE | | ELSEIFIDN | | ELSEIFIDNI | | ENDIF | IF | IF1 | IF2 | IFB | IFDEF | IFDIF | IFDIFI | | IFE | IFIDN | IFIDNI | | IFNB | IFNDEF |
|
Keyword | Version | .BREAK | | .CONTINUE | | .ELSE | | .ELSEIF | | .ENDIF | | .ENDW | | .IF | | .REPEAT | | .UNTIL | | .UNTILCXZ | | .WHILE | |
| Keyword | Version | .ERR | | .ERR1 | | .ERR2 | | .ERRB | | .ERRDEF | | .ERRDIF | | .ERRDIFI | | .ERRE | | .ERRIDN | | .ERRIDNI | | .ERRNB | | .ERRNDEF | | .ERRNZ | |
| Keyword | Version | .CREF | .LALL | .LFCOND | .LIST | .LISTALL | | .LISTIF | | .LISTMACRO | | .LISTMACROALL | | .NOCREF | | .NOLIST | | .NOLISTIF | | .NOLISTMACRO | | PAGE | .SALL | .SFCOND | SUBTITLE | | SUBTTL | | .TFCOND | TITLE | .XALL | .XCREF | | .XLIST | |
|
Keyword | Version | @code | | @CodeSize | | @CurSeg | | @data | | @DataSize | | @fardata? | | @fardata | | @Model | | @stack | | @WordSize | |
| Keyword | Version | @Cpu | | @Date | | @Environ | | @FileCur | | @FileName | | @Interface | | @Line | | @Time | | @Version | |
| Keyword | Version | @CatStr | | @InStr | | @SizeStr | | @SubStr | |
| |
Keyword | Version | . | ABS | FAR | HIGH | HIGH32 | | HIGHWORD | | LENGTH | LENGTHOF | | LOW | LOW32 | | LOWWORD | | MASK | NEAR | OPATTR | | PTR | SHORT | SIZE | SIZEOF | | THIS | .TYPE | TYPE | WIDTH |
| Keyword | Version | : | ADDR | | AT | BYTE | COMMON | DWORD | FLAT | | IMAGEREL | | LROFFSET | | MEMORY | OFFSET | PAGE | PARA | PRIVATE | | PUBLIC | SECTIONREL | | SEG | STACK | USE16 | | USE32 | | WORD |
| Keyword | Version | " | "" | () | : | :: | | ; | [] | CARRY? | | DUP | OVERFLOW? | | PARITY? | | SIGN? | | ZERO? | |
| | Keyword | Version | ! | != | & | && | < | <= | == | > | >= | || |
|
Keyword | Version | EQ | GE | GT | LE | LT | NE |
| Keyword | Version | AND | NOT | OR | SHL | SHR | XOR |
| |
Languages, Models and Registers |
Keyword | Version | BASIC | | C | | FORTRAN | | PASCAL | | STDCALL | B | SYSCALL | |
| Keyword | Version | COMPACT | | FLAT | | HUGE | | LARGE | | MEDIUM | | SMALL | | TINY | |
| Keyword | Version | AH | AL | AX | BH | BL | BP | BX | CH | CL | CR0 | | CR2 | | CR3 | | CR4 | | CS | CX | DH | DI | DL | DR0 | | DR1 | | DR2 | | DR3 | | DR6 | | DR7 | | DS | DX | EAX | | EBP | | EBX | | ECX | | EDI | | EDX | | ES | ESI | | ESP | | FS | | GS | | MM0 | | MM1 | | MM2 | | MM3 | | MM4 | | MM5 | | MM6 | | MM7 | | SI | SP | SS | ST | TR3 | | TR4 | | TR5 | | TR6 | | TR7 | | XMM0 | | XMM1 | | XMM2 | | XMM3 | | XMM4 | | XMM5 | | XMM6 | | XMM7 | | YMM0 | | YMM1 | | YMM2 | | YMM3 | | YMM4 | | YMM5 | | YMM6 | | YMM7 | |
|
Reserved and Non-reserved operands |
Keyword | Version | $ | ? | ADDR | | @B | | BASIC | BYTE | C | CARRY? | | DWORD | @F | | FAR | FAR16 | | FAR32 | | FORTRAN | FWORD | NEAR | NEAR16 | | NEAR32 | | OVERFLOW? | | PARITY? | | SIGN? | | STDCALL | B | SWORD | | SYSCALL | | TBYTE | VARARG | | WORD | ZERO? | |
| Non-Reserved Operands (many are used with OPTION directive) Keyword | Version | ABS | ALL | ASSUMES | | AT | CASEMAP | | COMMON | COMPACT | | CPU | | DOTNAME | | EMULATOR | | EPILOGUE | | ERROR | | EXPORT | | EXPR16 | | EXPR32 | | FARSTACK | | FLAT | | FORCEFRAME | | HUGE | | LANGUAGE | | LARGE | | LISTING | | LJMP | | LOADDS | | M | | MEDIUM | | MEMORY | NEARSTACK | | NODOTNAME | | NOEMULATOR | | NOKEYWORD | | NOLJMP | | NOM | | NONE | NONUNIQUE | | NOOLDMACROS | | NOOLDSTRUCTS | | NOREADONLY | | NOSCOPED | | NOSIGNEXTEND | | NOTHING | NOTPUBLIC | | OLDMACROS | | OLDSTDCALL | B | OLDSTRUCTS | | OS_DOS | | PARA | PRIVATE | | PROLOGUE | | RADIX | | READONLY | | REQ | | SCOPED | | SETIF2 | | SMALL | | STACK | TINY | | USE16 | | USE32 | | USES |
|
|
MCOM | 20, bytes (20k) | md5=cbce3a7cdeff3 | date=12/9/ | build | (time of day from file stamp unknown) | MCOM | 19, bytes (19k) | md5=19c63f05ab95ffe6c | build | (file date unknown) |
|
The original Microsoft assembler product was for the Intel archtecture typically running the CP/M operating system, predating DOS. Although Tim Paterson (creator of DOS) confirmed with me that MASM
did not originate from MACRO, it is included here for historical purposes as it appears to have been Microsoft's first commercial assembler product. According to EMSPS, the list price was $ The Intel Wikipedia Page describes the 8-bit 2 MHz microprocessor released in April as follows:
"The has sometimes been labeled "the first truly usable microprocessor", although earlier microprocessors were used for calculators, cash registers, computer terminals, industrial robots and other applications. The architecture of the strongly influenced Intel's CPU architecture, which spawned the x86 family of processors."
The following snippet is from the TRS Manual: Macro Assembler Introduction:
"MACRO is a relocatable macro assembler for the and Z80 microcomputer systems. It assembles or Z80 code on any or Z80 development system running the CP/M, ISIS-II, TRSDOS or TEKDOS operating system. The MACRO package includes the MACRO assembler, the LINK-*) linking loader, and the CRED cross reference facility. CP/M versions also include the LIB Library Manager. MACRO resides in approximately 14K of memory and has an assembly rate of over lines per minute.
MACRO incorporates almost all "big computer" assembler features without sacrificing speed or memory space. The assembler supports a complete, Intel standard macro facility, including IRP, IRPC, REPEAT, local variables and EXITM. Nesting of macros is limited only by memory. Code is assembled in relocatable modules that are manipulated with the flexible linking loader. Conditional assembly capability is enhanced by an expanded set of conditional pseudo operations that include testing of assembly pass, symbol definition, and parameters to macros. Conditionals may be nested up to levels."
Microsoft's next assembler (a two-pass assembler) targeted the , a bit microprocessor released by Intel in This was the first in the series of microprocessors that later became known as the
x86 architecture. This was the first Microsoft assembler product for the architecture. Microsoft's assembler (and main product line) has remained with this architecture to date. Later versions of the assembler would be renamed to "Microsoft MACRO Assembler".
The manual states, "MACRO supports most of the directives found in Microsoft's MACRO Macro Assembler. Macros and conditionals are Intel standard."
The Microsoft Utility Software Package Reference Manual for Microprocessors was the primary source for the information shown below.
MACRO was distributed on a single disk along with 4 files: MEXE, www.cronistalascolonias.com.ar, www.cronistalascolonias.com.ar and www.cronistalascolonias.com.ar
SYSTEM REQUIREMENTS:
MACRO - 96K bytes of memory minimum: 64K bytes for code and static data 32K bytes for run space MS-LINK - 54K bytes of memory minimum: 44K bytes for code 10K bytes for run space MS-LIB - 38K bytes of memory minimum: 28K bytes for code 10K bytes for run space MS-CREF - 24K bytes of memory minimum: 14K bytes for code 10K bytes for run space 1 disk drive 1 disk drive if and only if output is sent to the same physical diskette from which the input was taken. None of the utility programs in this package allow time to swap diskettes during operation on a one-drive configuration. Therefore, two disk drives is a more practical configuration.
www.cronistalascolonias.com.ar | 67, bytes (66k) | md5=0c68bde13bf46fb41fc5b19ed56d8 | date=12/7/ pm |
|
This was an IBM-branded OEM version of MASM developed by Microsoft specifically for the IBM PC, executing only instructions. Detect It Easy identifies this version as being built with "IBM PC Pascal". Vernon from pcdosretro says this version of MASM supports ESC and an archaic syntax which could be used to specify floating-point opcodes.
The command line displays "The IBM Personal Computer MACRO Assembler" rather than the "The Microsoft MACRO Assembler" displayed by the unbranded Microsoft version. It is not known how much this version differs from the unbranded version although if the file dates we have are correct, the IBM version pre-dates the unbranded version by just about 2 months.
Embedded within www.cronistalascolonias.com.ar at offset 0xE50D () is the date string:
"8/24/81 Ver" This may be a possible build timestamp. Although I don't have documentation on this version of MASM, I suspect you can get the program to emit this string one way or another (via the command line or possibly using a predefined macro combined with the old %out directive during assembly). This version date string is not displayed on the command line when MASM is run with no options, but instead the copyright year of
The IBM versions of MASM also distributed a small companion assembler named www.cronistalascolonias.com.ar This assembler lacked some of the features present in www.cronistalascolonias.com.ar (such as the ability to use macros) so it would run in PCs with only 64k of memory.
The original distribution contains the following directory list of 14 files, on a K 5¼ inch floppy disk:
09/24/ PM $$www.cronistalascolonias.com.ar 09/24/ PM $$www.cronistalascolonias.com.ar 10/28/ PM $www.cronistalascolonias.com.ar 10/28/ PM $www.cronistalascolonias.com.ar 10/28/ PM $www.cronistalascolonias.com.ar 09/24/ PM 23 $www.cronistalascolonias.com.ar 10/28/ PM $www.cronistalascolonias.com.ar 12/07/ PM 52, www.cronistalascolonias.com.ar 10/04/ PM 13, www.cronistalascolonias.com.ar 11/08/ PM 6, www.cronistalascolonias.com.ar 11/08/ PM 5, www.cronistalascolonias.com.ar 09/15/ PM 2, www.cronistalascolonias.com.ar 09/15/ PM 1, www.cronistalascolonias.com.ar 12/07/ PM 67, www.cronistalascolonias.com.ar NOTE: Like Microsoft's unbranded MASM (shown below), DOSBox hangs when the executable is run, although it appears to work fine running in a command window under XP or under a MS-DOS environment simulated by VirtualBox, at least in my experience. In , this appears to have been solved by an entry in Christophe Lenclud's blog where the issue was tracked down to a signedness bug originating from the Pascal compiler's startup code. Apparently
decreasing the amount of conventional memory or patching a single byte (changing a JNG to a JNA instruction) solves the problem.
MASM IBM Disk |
|
 |
www.cronistalascolonias.com.ar | 67, bytes (66k) | md5=82e78c6aa3cc5df33bcde8 | date=2/5/ pm | (file time of day may not be official) |
|
This version likely supports the same features as the IBM branded version. Also like the IBM version, Detect It Easy identifies this version as being built with "IBM PC Pascal". The directory listing of the k distribution disk is as follows (courtesy of www.cronistalascolonias.com.ar):
Volume in drive A has no label Directory of A:\ M EXE p LINK EXE p 2 file(s) bytes Total files listed: 2 file(s) bytes bytes free When this version is run with no command line options, the name the MASM reports to the console is "The Microsoft MACRO Assembler". This name appears in all of the www.cronistalascolonias.com.ar series versions (at least those known on this page). Successive versions dropped the leading "The" resulting in "Microsoft MACRO Assembler". This internal name would change slightly once more in version to "Microsoft (R) Macro Assembler", which would stick for all future versions.
Embedded within the oddly-named executable (www.cronistalascolonias.com.ar, the only version of MASM I'm aware of with this short name) at offset 0xED83 () is the identical date string we saw in the IBM branded MASM:
"8/24/81 Ver" The file dates listed here (see below) differ by almost 6 months. Also like the IBM version, this date string is not displayed on the command line when MASM is run with no options.
Two separate distributions I've seen of the plain (non OEM IBM) Microsoft MASM have identical file content but differing timestamps. The timestamps are identical except for being off by two hours (a time zone difference perhaps); the time stamps between the versions of www.cronistalascolonias.com.ar were also off by two hours. This might be viewed as an indication of an official release date since two archives had the same day in common or not.
Mainstream Distribution (consistent with directory listing above):
02/05/ PM 67, www.cronistalascolonias.com.ar 02/04/ PM 41, www.cronistalascolonias.com.ar Alternate Distribution:
02/05/ AM 67, www.cronistalascolonias.com.ar 02/04/ AM 41, www.cronistalascolonias.com.ar Although this version of MASM appears to run under XP, it hangs when run under DOSBox just as the IBM-branded version does. See the explanation in the MASM IBM section.
According to reports, this version was compatible with IBM PC-DOS
SYSTEM REQUIREMENTS:
www.cronistalascolonias.com.ar | 70, bytes (69k) | md5=dccbebf9ca5df5b | date=2/8/ | (from date embedded within executable) |
|
I haven't found any public information about this version. It may also be an internal or unofficial release. Similar to all prior 1.x versions, Detect It Easy identifies this version as being built with "IBM PC Pascal". Vernon from pcdosretro said it definitely falls in between versions and as it has floating-point support but does not yet support DOS 2+ file handles. Like MASM it only supports /D /O /X.
The archive I found this in was bundled with the same www.cronistalascolonias.com.ar that came with version
www.cronistalascolonias.com.ar | 77, bytes (76k) | md5=a9f9df1d0afd30c46f8facffffc72c64 | date=2/1/ pm | (file from MS-DOS source code) |
|
This was the first version to support the opcodes. Similar to all prior 1.x versions, Detect It Easy identifies this version as being built with "IBM PC Pascal". File handles were also supported if running DOS or higher (clearly Microsoft had already added file handle support to the in-development DOS at that point).
Little public information is available about this version, however it can be downloaded free along with the rest of the MS-DOS and operating system source code as of early
The link below leads you to an article where the source code archive can be downloaded. This archive contains MASM (found as v20object/www.cronistalascolonias.com.ar), reportedly used to compile the MS-DOS source code (in the v20source directory) according to www.cronistalascolonias.com.ar Version of MS-DOS (the version MASM was to compile) was the first version of DOS to support subdirectories, hard disks, device drivers, TSRs (terminate and stay resident programs), file redirection and k floppy disks (versus the previously supported k floppies).
Microsoft, while retaining the MS-DOS rights throughout the years, has released the source code to the Computer History Museum (www.cronistalascolonias.com.ar) making it freely available to all for non-commercial use. The source code can be downloaded directly from the Microsoft MS-DOS early source code article. After accepting the agreement, you will download:
www.cronistalascolonias.com.ar size= (K) md5=f7bccaac46aabf9d18fdc
The changelist below was derived from Vernon of pcdosretro.
CHANGELIST:
- Support for the Intel opcodes (coprocessor) via the /R switch
- Support for DOS + file handles / verified with an INT 21h function tracer
www.cronistalascolonias.com.ar | 80, bytes (79k) | md5=2d7cd8e9ce4de37ca2dfaa4 | date=8/25/ | (from date embedded within executable) |
|
Little public information is available about this version. Starting with this version, it appears "IBM PC Pascal" was no longer used to build MASM according to Detect It Easy as no signature was recognized (it may have been ported to assembler). It is not until version that the MASM EXE signatures change again as originating from Microsoft C.
The command line display for versions and are somewhat unique amongst the MASM series. The command line displays spaces surrounding the comma between the name and the version, which looks odd. These versions also center the copyright line which is not done in any other known versions.
This version was referenced by Microsoft in KB and Q
The original file date stamp was not preserved, but embedded internally within the executable at offset 0x10BC7 () is the string:
"8/25/82 Ver" For this version of MASM, this was the only accurate date information available to me.
The changelist below was derived from Vernon of pcdosretro.
CHANGELIST:
- Floating point emulation support (via the /E switch), causing the resulting .OBJ file to have an external reference to FIDRQQ and additional fixups.
www.cronistalascolonias.com.ar | 81, bytes (79k) | md5=6ada65dbcaef5a26cf | date=11/27/ am | (from ACT/Apricot BETA Programmer's Toolkit) |
|
Little public information was previously available about this version until it surfaced in the ACT/Apricot archive on a disk labeled:
This was an Apricot/Xi RAM BIOS boot disk including the MS-DOS versions of MASM, LINK, LIB, CREF, EXE2BIN and DEBUG utilities. This disk did include a www.cronistalascolonias.com.ar which was the source of the changelist information below. It appears this was the first version of MASM to be distributed with a README document. Also included within the README was changelist information for LINK and LIB Although the LIB version on the disk matched, the disk only included LINK
The command line display for versions and are somewhat unique amongst the MASM series. The command line displays spaces surrounding the comma between the name and the version, which looks odd. These versions also center the copyright line which is not done in any other known versions.
The version www.cronistalascolonias.com.ar hints that may have been the predecessor to (at least for non-IBM versions of MASM).
CHANGELIST:
- IFB & IFNB have been corrected
- Recognizes memory greater than K
- fsubr, fdiv & fdivr have been corrected
www.cronistalascolonias.com.ar | 76, bytes (75k) | md5=3bd07c55cee0af0e8fe8e3 | date=7/18/ pm |
|
This was the last DOS-only version Microsoft made with the IBM brand. Future versions of MASM would be Microsoft-only with exception of IBM's "Assembler/2" which was a rebranded MASM with OS/2 support 3 years later.
According to the PC Magazine article below, this version came with a manual that was one of the best instruction set references (of the time) in the opinion of the writer. This was reportedly a solid version that was the "top choice in the field" due to the added stability of bugfixes, a 2-volume manual that was reported as one of the best instruction set references at the time, and the inclusion of the LIB tool. This version fixed some problems with the SHR and SHL pesudo-op instructions and improved type-checking. The author of the article found the in-depth inclusion of the SALUT tool in the manual (38 pages), was misplaced, especially with no documentation beyond the command line-syntax for much-needed LIB tool. IBM SALUT, written by Scott T Jones, stood for Structured Assembly Language Utilities; it essentially allowed the inclusion of structured flow-controlling statements into assembly language programs that output .ASM files. According to the author, it was a "wimpy preprocessor" written in BASIC. Microsoft must have realized this as SALUT never showed up again in any Microsoft MASM releases, though IBM's MASM for OS/2 (3 years later) included the last known version.
MASM was released 4 months from this release (based on the file dates). This is also confirmed on page of the article.
The changelist was derived from Vernon of pcdosretro and the October PC magazine article below.
CHANGELIST:
- , and instruction support (, c and directives)
Analysis of the binary showed protected-mode instructions in the instruction tables but can't actually be used as there is no p directive (wouldn't be present until version ) - SHR and SHL pesudo-op instructions fixed
- LIB tool added
- IBM SALUT tool added
www.cronistalascolonias.com.ar | 67, bytes (66k) | md5=8e97eff1ceb2ab8decf | date=3/2/ | (from date embedded within executable) |
|
This version was found in at least two distribution sets, so more branded sets probably exist:
- An MS-DOS distribution OEM branded for Columbia Data Products R for their MPC and VP computers / timestamp 3/15/ pm
- A disk labeled "SEATTLE COMPUTER Utility Software Package Version March " / timestamp 3/16/ pm
Despite appearing to be in the MASM version 2 series, this version has a copyright year and file date placing it around the timeframe. Also similar to all versions prior to , Detect It Easy identifies this version as being built with "IBM PC Pascal".
WHAT OTHERS HAVE SAID:
- According to Vernon from pcdosretro, this version of MASM appears to have only been called to match the overall utility software package(s) as it is not technically in the MASM 2.x series. This version is clearly a rebranded MASM as its features predate even those present in MASM
www.cronistalascolonias.com.ar | 77, bytes (76k) | md5=3baefe2dcfb21f0b15 | date=11/21/ pm |
|
This version of MASM indicates in its www.cronistalascolonias.com.ar that it is "a significantly enhanced version of Microsoft Macro Assembler Package v ". This indicates that after version , Microsoft's version numbering likely skipped directly to , and that a non-IBM MASM never existed. I was never able to find a reference to a version either, officially or unofficially.
The directory listing of the k distribution disk is as follows (courtesy of www.cronistalascolonias.com.ar):
Volume in drive A has no label Directory of A:\ MASM EXE p SYMDEB EXE p MAPSYM EXE p CREF EXE p LINK EXE p LIB EXE p MAKE EXE a README DOC p 8 file(s) bytes Total files listed: 8 file(s) bytes bytes free This appeared to be the 2nd version of MASM to be distributed with a www.cronistalascolonias.com.ar ( was the first). Since I have found two different distributions of MASM , both with the exact Nov date (matching the copyright), I believe the file timestamp is the original released version.
On the command line, Microsoft abandoned the previously named "The Microsoft MACRO Assembler" for the more concise "Microsoft MACRO Assembler" the www.cronistalascolonias.com.ar versions.
-
-